8000 switch exclusions to `Rule`s, best efficiency · scijava/pom-scijava@34b4996 · GitHub
[go: up one dir, main page]

Skip to content

Commit 34b4996

Browse files
elect86ctrueden
authored andcommitted
switch exclusions to Rules, best efficiency
1 parent ff3d1af commit 34b4996

File tree

5 files changed

+65
-212
lines changed

5 files changed

+65
-212
lines changed

gradle/catalog/build.gradle.kts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,20 @@ catalog.versionCatalog {
4848
else -> "$g.$camel"
4949
}
5050

51-
println("$alias($gav)")
51+
// println("$alias($gav)")
5252
library(alias, gav)
5353
}
5454
for ((alias, aliases) in bundles)
5555
bundle(alias, aliases)
56+
57+
// jakarta()
5658
}
5759

60+
//fun VersionCatalogBuilder.jakarta() {
61+
// val bom = URL.of("https://repo1.maven.org/maven2/jakarta/platform/jakarta.jakartaee-bom/10.0.0/jakarta.jakartaee-bom-10.0.0.pom")
62+
// library("jakarta.json", "jakarta.json:jakarta.json-api:")
63+
//}
64+
5865
publishing.publications {
5966
repositories.maven {
6067
name = "sciJava"

gradle/platform/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import org.gradle.internal.impldep.org.junit.experimental.categories.Categories.
66
plugins {
77
`java-platform`
88
publish
9+
// id("org.gradlex.java-ecosystem-capabilities-base") // only rules
10+
// id("org.gradlex.logging-capabilities") // logging extension
911
}
1012

1113
group = "org.scijava"
@@ -45,6 +47,7 @@ dependencies {
4547
// }
4648

4749
api(platform("com.fasterxml.jackson:jackson-bom:" + libs.com.fasterxml.jackson.core.jacksonCore.get().version))
50+
api(platform("jakarta.platform:jakarta.jakartaee-bom:10.0.0"))
4851
// api(platform("com.google.api-client:google-api-client-bom:" + libs.com.google.api.client.googleApiClient.get().version))
4952
// api(platform("com.google.api:gax-bom:" + libs.com.google.api.gax.get().version))
5053
// api(platform("com.google.api:gapic-generator-java-bom:" + libs.com.google.api.grpc.protoGoogleCommonProtos.get().version))

gradle/platform/buildSrc/src/main/kotlin/publish.gradle.kts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
import groovy.util.Node
2-
import groovy.util.NodeList
3-
import java.util.*
4-
51
plugins {
62
`maven-publish`
73
}

gradle/playground/build.gradle.kts

Lines changed: 52 additions & 207 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
plugins {
22
embeddedKotlin("jvm")
3+
id("org.gradlex.java-ecosystem-capabilities-base")
34
}
45

56
repositories {
@@ -8,221 +9,65 @@ repositories {
89
maven("https://maven.scijava.org/content/groups/public")
910
}
1011

11-
//configurations.filter { it.isCanBeResolved }.map { println(it) }
12-
13-
dependencies {
14-
api(libs.imagej.ij)
15-
16-
// Activate the "ScijavaCapability" rule
17-
// components.all<ScijavaCapability>()
12+
// it will appear as this was the original downloaded metadata of the dependency
13+
// @CacheableRule is more verbose but more efficient, because the rule will be applied before the dependency get cached,
14+
inline fun <reified T : ComponentMetadataRule> ComponentMetadataHandler.withModules(vararg modules: String) {
15+
for (module in modules) withModule<T>(module)
1816
}
19-
20-
open class ConflictCapability(val group: String,
21-
val artifact: String = group,
22-
val modules: List<String>,
23-
val reason: String? = null) {
24-
val ga get() = "$group:$artifact"
17+
abstract class Rule : ComponentMetadataRule {
18+
fun ComponentMetadataContext.remove(vararg modules: String) = details.allVariants { withDependencies { removeIf { it.module.toString() in modules } } }
2519
}
20+
dependencies {
21+
components {
22+
@CacheableRule open class NoXalan : Rule() {
23+
override fun execute(context: ComponentMetadataContext) = context.remove("xalan:serializer", "xalan:xalan")
24+
}
25+
withModules<NoXalan>("org.openmicroscopy:ome-common", "ome:bio-formats-tools", "ome:formats-api", "ome:formats-bsd",
26+
"org.apache.xmlgraphics:batik-bridge", "org.apache.xmlgraphics:batik-dom")
2627

27-
class ResolutionCapability(group: String, artifact: String = group, modules: List<String>, reason: String? = null) : ConflictCapability(group, artifact, modules, reason)
28-
29-
// the right module to select will be always the last in the list
30-
val resolutions = listOf(
31-
ResolutionCapability("jzy3d", "emul-gl", listOf("org.jzy3d:jzy3d-emul-gl", "org.jzy3d:jzy3d-emul-gl-awt"), "Replaced by org.jzy3d:jzy3d-emul-gl-awt"),
32-
ResolutionCapability("jzy3d", "jGL", listOf("org.jzy3d:jGL", "jzy3d-jGL-awt"), "Replaced by org.jzy3d:jzy3d-jGL-awt"),
33-
ResolutionCapability("javax", "transaction", listOf("javax.transaction:jta", "jzy3d-jGL-awt"), "Replaced by org.jzy3d:jzy3d-jGL-awt"),
34-
ResolutionCapability("javax", "servlet", listOf("javax.servlet:servlet-api", "javax.servlet:javax.servlet-api")))
35-
val conflicts = listOf(
36-
ConflictCapability("slf4j", modules = listOf("ch.qos.logback:logback-classic", "org.slf4j:slf4j-simple")),
37-
ConflictCapability("jcl", modules = listOf("commons-logging:commons-logging", "org.slf4j:jcl-over-slf4j")),
38-
ConflictCapability("jakarta", "activation",
39-
listOf("jakarta.activation:jakarta.activation-api", "com.sun.activation:javax.activation", "javax.activation:activation"),
40-
"See: https://wiki.eclipse.org/Jakarta_EE_Maven_Coordinates"),
41-
ConflictCapability("javax" , "transaction", listOf("javax.transaction:javax.transaction-api", "javax.transaction:jta")),
42-
ConflictCapability("apache", "commonsCsv", listOf("org.apache.commons:commons-csv", "org.apache.solr:solr-commons-csv")),
43-
ConflictCapability("c3p0", modules = listOf("com.mchange:c3p0", "com.mchange:mchange-commons-java", "c3p0:c3p0")),
44-
ConflictCapability("javax", "mail", listOf("javax.mail:mail", "com.sun.mail:javax.mail")),
45-
ConflictCapability("jersey", "core", listOf("javax.ws.rs:javax.ws.rs-api", "com.sun.jersey:jersey-core")),
46-
ConflictCapability("commons", "beanutils", listOf("commons-beanutils:commons-beanutils", "commons-collections:commons-collections", "commons-beanutils:commons-beanutils-core")))
47-
48-
// TODO
49-
50-
// Uber-JAR of all batik components
51-
// org.apache.xmlgraphics:batik-all
52-
53-
// Conflicts with junit:junit. We don't need Android here.
54-
// com.google.android.tools:dx
55-
56-
// Brings in all gluegen-rt native classifiers.
57-
// org.jogamp.gluegen:gluegen-rt-main
58-
59-
// Brings in all jogl-all native classifiers.
60-
// org.jogamp.jogl:jogl-all-main
61-
62-
// Uber-JAR of all netty components
63-
// io.netty:netty-all
64-
65-
/*
66-
<groupId>org.jzy3d</groupId>
67-
<artifactId>jzy3d-native-jogl-awt</artifactId>
68-
<version>${org.jzy3d.jzy3d-native-jogl-awt.version}</version>
69-
<exclusions>
70-
<!-- Conflicts with properly packaged jogamp native classifiers. -->
71-
<exclusion>
72-
<groupId>org.jogamp.gluegen</groupId>
73-
<artifactId>gluegen-rt-natives-macosx-universal</artifactId>
74-
</exclusion>
75-
<exclusion>
76-
<groupId>org.jogamp.gluegen</groupId>
77-
<artifactId>gluegen-rt-natives-linux-aarch64</artifactId>
78-
</exclusion>
79-
<exclusion>
80-
<groupId>org.jogamp.gluegen</groupId>
81-
<artifactId>gluegen-rt-natives-linux-amd64</artifactId>
82-
</exclusion>
83-
<exclusion>
84-
<groupId>org.jogamp.gluegen</groupId>
85-
<artifactId>gluegen-rt-natives-linux-armv6hf</artifactId>
86-
</exclusion>
87-
<exclusion>
88-
<groupId>org.jogamp.gluegen</groupId>
89-
<artifactId>gluegen-rt-natives-linux-i586</artifactId>
90-
</exclusion>
91-
<exclusion>
92-
<groupId>org.jogamp.gluegen</groupId>
93-
<artifactId>gluegen-rt-natives-macosx-universal</artifactId>
94-
</exclusion>
95-
<exclusion>
96-
<groupId>org.jogamp.gluegen</groupId>
97-
<artifactId>gluegen-rt-natives-windows-amd64</artifactId>
98-
</exclusion>
99-
<exclusion>
100-
<groupId>org.jogamp.gluegen</groupId>
101-
<artifactId>gluegen-rt-natives-windows-i586</artifactId>
102-
</exclusion>
103-
<exclusion>
104-
<groupId>org.jogamp.jogl</groupId>
105-
<artifactId>jogl-all-natives-linux-aarch64</artifactId>
106-
</exclusion>
107-
<exclusion>
108-
<groupId>org.jogamp.jogl</groupId>
109-
<artifactId>jogl-all-natives-linux-amd64</artifactId>
110-
</exclusion>
111-
<exclusion>
112-
<groupId>org.jogamp.jogl</groupId>
113-
<artifactId>jogl-all-natives-linux-armv6hf</artifactId>
114-
</exclusion>
115-
<exclusion>
116-
<groupId>org.jogamp.jogl</groupId>
117-
<artifactId>jogl-all-natives-linux-i586</artifactId>
118-
</exclusion>
119-
<exclusion>
120-
<groupId>org.jogamp.jogl</groupId>
121-
<artifactId>jogl-all-natives-macosx-universal</artifactId>
122-
</exclusion>
123-
<exclusion>
124-
<groupId>org.jogamp.jogl</groupId>
125-
<artifactId>jogl-all-natives-windows-amd64</artifactId>
126-
</exclusion>
127-
<exclusion>
128-
<groupId>org.jogamp.jogl</groupId>
129-
<artifactId>jogl-all-natives-windows-i586</artifactId>
130-
</exclusion>
28+
@CacheableRule open class NoUeberJars : Rule() {
29+
override fun execute(context: ComponentMetadataContext) = context.remove("org.apache.xmlgraphics:batik-all", "it.unimi.dsi:fastutil")
30+
}
31+
withModules<NoUeberJars>("org.openmicroscopy:omero-blitz", "org.openmicroscopy:omero-server")
13132

33+
@CacheableRule open class NoAndroid : Rule() {
34+
override fun execute(context: ComponentMetadataContext) = context.remove("com.google.android.tools:dx")
35+
}
36+
withModules<NoAndroid>("net.clearcontrol:coremem", "com.nativelibs4java:bridj")
13237

133-
<groupId>org.jzy3d</groupId>
134-
<artifactId>jzy3d-native-jogl-core</artifactId>
135-
<version>${org.jzy3d.jzy3d-native-jogl-core.version}</version>
136-
<exclusions>
137-
<!-- Conflicts with properly packaged jogamp native classifiers. -->
138-
<exclusion>
139-
<groupId>org.jogamp.gluegen</groupId>
140-
<artifactId>gluegen-rt-natives-macosx-universal</artifactId>
141-
</exclusion>
142-
<exclusion>
143-
<groupId>org.jogamp.gluegen</groupId>
144-
<artifactId>gluegen-rt-natives-linux-aarch64</artifactId>
145-
</exclusion>
146-
<exclusion>
147-
<groupId>org.jogamp.gluegen</groupId>
148-
<artifactId>gluegen-rt-natives-linux-amd64</artifactId>
149-
</exclusion>
150-
<exclusion>
151-
<groupId>org.jogamp.gluegen</groupId>
152-
<artifactId>gluegen-rt-natives-linux-armv6hf</artifactId>
153-
</exclusion>
154-
<exclusion>
155-
<groupId>org.jogamp.gluegen</groupId>
156-
<artifactId>gluegen-rt-natives-linux-i586</artifactId>
157-
</exclusion>
158-
<exclusion>
159-
<groupId>org.jogamp.gluegen</groupId>
160-
<artifactId>gluegen-rt-natives-macosx-universal</artifactId>
161-
</exclusion>
162-
<exclusion>
163-
<groupId>org.jogamp.gluegen</groupId>
164-
<artifactId>gluegen-rt-natives-windows-amd64</artifactId>
165-
</exclusion>
166-
<exclusion>
167-
<groupId>org.jogamp.gluegen</groupId>
168-
<artifactId>gluegen-rt-natives-windows-i586</artifactId>
169-
</exclusion>
170-
<exclusion>
171-
<groupId>org.jogamp.jogl</groupId>
172-
<artifactId>jogl-all-natives-linux-aarch64</artifactId>
173-
</exclusion>
174-
<exclusion>
175-
<groupId>org.jogamp.jogl</groupId>
176-
<artifactId>jogl-all-natives-linux-amd64</artifactId>
177-
</exclusion>
178-
<exclusion>
179-
<groupId>org.jogamp.jogl</groupId>
180-
<artifactId>jogl-all-natives-linux-armv6hf</artifactId>
181-
</exclusion>
182-
<exclusion>
183-
<groupId>org.jogamp.jogl</groupId>
184-
<artifactId>jogl-all-natives-linux-i586</artifactId>
185-
</exclusion>
186-
<exclusion>
187-
<groupId>org.jogamp.jogl</groupId>
188-
<artifactId>jogl-all-natives-macosx-universal</artifactId>
189-
</exclusion>
190-
<exclusion>
191-
<groupId>org.jogamp.jogl</groupId>
192-
<artifactId>jogl-all-natives-windows-amd64</artifactId>
193-
</exclusion>
194-
<exclusion>
195-
<groupId>org.jogamp.jogl</groupId>
196-
<artifactId>jogl-all-natives-windows-i586</artifactId>
197-
</exclusion>
198-
*/
38+
@CacheableRule open class ClearGl : Rule() {
39+
override fun execute(context: ComponentMetadataContext) = context.remove("org.jogamp.gluegen:gluegen-rt-main", "org.jogamp.jogl:jogl-all-main")
40+
}
41+
withModule<ClearGl>("net.clearvolume:cleargl")
19942

200-
class ScijavaCapability : ComponentMetadataRule {
201-
override
202-
fun execute(context: ComponentMetadataContext) = context.details.run {
203-
for (res in resolutions + conflicts) {
204-
if (id.module.toString() in res.modules)
205-
allVariants {
206-
withCapabilities {
207-
// Declare that all of them provide the same capability
208-
addCapability(res.group, res.artifact, id.version)
209-
}
210-
}
43+
@CacheableRule open class SparkCore211 : Rule() {
44+
override fun execute(context: ComponentMetadataContext) = context.remove("io.netty:netty-all")
21145
}
212-
}
213-
}
46+
withModule<SparkCore211>("org.apache.spark:spark-core_2.11")
21447

215-
configurations.all {
216-
// dependencies.forEach { it. }
217-
resolutionStrategy.capabilitiesResolution {
218-
for (res in resolutions)
219-
withCapability(res.ga) {
220-
for (cand in candidates) {
221-
val id = cand.id
222-
if (id is ModuleComponentIdentifier && id.moduleIdentifier.toString() == res.modules.last())
223-
select(cand)
224-
}
225-
res.reason?.let(::because)
48+
@CacheableRule open class NoBatikExtensions : Rule() {
49+
override fun execute(context: ComponentMetadataContext) = context.remove("org.apache.xmlgraphics:batik-extensions")
50+
}
51+
withModules<NoBatikExtensions>("org.apache.xmlgraphics:batik-rasterizer-ext", "org.apache.xmlgraphics:batik-squiggle-ext")
52+
53+
@CacheableRule open class NoJogampNatives : Rule() {
54+
override fun execute(context: ComponentMetadataContext) {
55+
// Conflicts with properly packaged jogamp native classifiers.
56+
val libs = listOf("gluegen:gluegen-rt", "jogl:jogl-all")
57+
val modules = listOf("linux-aarch64", "linux-amd64", "linux-armv6hf", "linux-i586", "macosx-universal", "windows-amd64", "windows-i586")
58+
.flatMap { p -> libs.map { "org.jogamp.$it-natives-$p" } }.toTypedArray()
59+
context.remove(*modules)
22660
}
61+
}
62+
withModules<NoJogampNatives>("org.jzy3d:jzy3d-native-jogl-awt", "org.jzy3d:jzy3d-native-jogl-core")
63+
64+
@CacheableRule open class Weka : Rule() {
65+
override fun execute(context: ComponentMetadataContext) = context.remove(
66+
"com.github.fommil.netlib:all", "com.googlecode.netlib-java:netlib-java", "net.sourceforge.f2j:arpack_combined_all",
67+
"nz.ac.waikato.cms.weka.thirdparty:java-cup-11b", "nz.ac.waikato.cms.weka.thirdparty:java-cup-11b-runtime")
68+
}
69+
withModule<Weka>("nz.ac.waikato.cms.weka:weka-dev")
22770
}
71+
implementation(libs.org.morphonets.snt)
72+
implementation("org.jzy3d:jzy3d-emul-gl-awt:2.1.0")
22873
}

gradle/playground/settings.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ dependencyResolutionManagement {
2020
}
2121

2222
includeBuild("../catalog")
23+
// java-ecosystem-capabilities
24+
includeBuild("../../../java-ecosystem-capabilities")
2325
}
2426

2527
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")

0 commit comments

Comments
 (0)
0