From abd7eadbae320beaa01ae50822e2b9dac7033cc3 Mon Sep 17 00:00:00 2001 From: Caleb Hulbert Date: Mon, 1 Apr 2024 11:00:07 -0400 Subject: [PATCH 001/294] bump imglib2-label-multisets --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c4e02a2..bb216df 100644 --- a/pom.xml +++ b/pom.xml @@ -1099,7 +1099,7 @@ - 0.11.5 + 0.13.0 ${imglib2-label-multisets.version} From a8bfdc4c10df3e383fc6865c06c9df9e69717d54 Mon Sep 17 00:00:00 2001 From: Michael Doube Date: Mon, 8 Apr 2024 16:32:42 +0800 Subject: [PATCH 002/294] Update pom.xml to use Mockito 4.11.0 Mockito 4.11.0 is the last version that supports Java 8. The previous version stopped working with Maven, Eclipse, etc. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 17bfa87..3884ce0 100644 --- a/pom.xml +++ b/pom.xml @@ -2229,7 +2229,7 @@ ${mines-jtk.version} - 2.19.0 + 4.11.0 ${mockito.version} ${mockito-core.version} From 10eb8c57ca88fe7bc93a37c717054f0c8d72eace Mon Sep 17 00:00:00 2001 From: Caleb Hulbert Date: Fri, 12 Apr 2024 16:03:16 -0400 Subject: [PATCH 003/294] bump imglib2-label-multiset for bugfix --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3884ce0..28d8746 100644 --- a/pom.xml +++ b/pom.xml @@ -1104,7 +1104,7 @@ - 0.13.0 + 0.13.1 ${imglib2-label-multisets.version} From 7a467440c10539c06290a7ed2780668404f2ad76 Mon Sep 17 00:00:00 2001 From: David Gault Date: Thu, 18 Apr 2024 15:01:31 +0100 Subject: [PATCH 004/294] ump Bio-Formats version to 7.3.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 28d8746..ffe5f3e 100644 --- a/pom.xml +++ b/pom.xml @@ -1245,7 +1245,7 @@ ${jxrlib-all.version} - 7.2.0 + 7.3.0 ${bio-formats.version} ${bio-formats.version} ${bio-formats.version} From 62588b50c9be32512f07bdba45ca0a9c20e7c508 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Tue, 16 Apr 2024 13:48:28 +0200 Subject: [PATCH 005/294] Update components * scijava-plugins-commands: 0.2.4 -> 0.2.5 * imagej-common: 2.0.4 -> 2.1.0 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index ffe5f3e..82bd0af 100644 --- a/pom.xml +++ b/pom.xml @@ -365,7 +365,7 @@ ${scijava-plot.version} - 0.2.4 + 0.2.5 ${scijava-plugins-commands.version} @@ -481,7 +481,7 @@ ${ij1-patcher.version} - 2.0.4 + 2.1.0 ${imagej-common.version} From 6787e54719109f20a8c509287cb1a0e27967e9f6 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Fri, 19 Apr 2024 10:42:36 +0200 Subject: [PATCH 006/294] Manage version of org.openmicroscopy:specification It is a monoversioned ome-model component, along with org.openmicroscopy:ome-xml. --- pom.xml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 82bd0af..5b2449e 100644 --- a/pom.xml +++ b/pom.xml @@ -1236,8 +1236,11 @@ ${ome-poi.version} - 6.3.4 + 6.3.6 + ${ome-model.version} + ${ome-model.version} ${ome-xml.version} + ${specification.version} 0.2.4 @@ -3926,6 +3929,11 @@ ome-xml ${org.openmicroscopy.ome-xml.version} + + org.openmicroscopy + specification + ${org.openmicroscopy.specification.version} + From 89a9489789ef00c1b47eb029643d98acf6807ae9 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Mon, 6 May 2024 12:05:21 -0500 Subject: [PATCH 007/294] Update imagej-legacy: 1.2.1 -> 1.2.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5b2449e..4a18e0b 100644 --- a/pom.xml +++ b/pom.xml @@ -493,7 +493,7 @@ ${imagej-launcher.version} - 1.2.1 + 1.2.2 ${imagej-legacy.version} From f9f712f477134f7d6c6bef9e0ef5d3416f6451cc Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Mon, 6 May 2024 14:07:47 -0500 Subject: [PATCH 008/294] Manage new component versions * org.abego.treelayout:org.abego.treelayout.core: 1.0.3 * com.google.inject:guice: 7.0.0 * com.github.jnr:jnr-netdb: 1.2.0 --- pom.xml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/pom.xml b/pom.xml index 4a18e0b..3184a27 100644 --- a/pom.xml +++ b/pom.xml @@ -1304,6 +1304,10 @@ + + 1.0.3 + ${org.abego.treelayout.core.version} + 1.2.7 ${algart-tiff.version} @@ -1779,6 +1783,10 @@ ${guava.version} ${failureaccess.version} + + 7.0.0 + ${guice.version} + 0.3.0 ${humble-video.version} @@ -2039,10 +2047,12 @@ 1.3.13 0.10.4 2.2.16 + 1.2.0 3.1.19 ${jffi.version} ${jnr-constants.version} ${jnr-ffi.version} + ${jnr-netdb.version} ${jnr-posix.version} @@ -4193,6 +4203,13 @@ + + + org.abego.treelayout + org.abego.treelayout.core + ${org.abego.treelayout.org.abego.treelayout.core.version} + + net.algart @@ -5273,6 +5290,13 @@ ${com.google.guava.failureaccess.version} + + + com.google.inject + guice + ${com.google.inject.guice.version} + + io.humble @@ -5795,6 +5819,11 @@ jnr-ffi ${com.github.jnr.jnr-ffi.version} + + com.github.jnr + jnr-netdb + ${com.github.jnr.jnr-netdb.version} + com.github.jnr jnr-posix From 637dd6152f90f480a81e47f46af23e5d4d3bc1fb Mon Sep 17 00:00:00 2001 From: Michael Doube Date: Wed, 15 May 2024 08:30:28 +0800 Subject: [PATCH 009/294] Bump BoneJ to version 7.0.19 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3184a27..31a6042 100644 --- a/pom.xml +++ b/pom.xml @@ -1185,7 +1185,7 @@ ${multiview-simulation.version} - 7.0.18 + 7.0.19 ${bonej.version} ${bonej.version} ${bonej.version} From e7511a197dbb2f897f7d466a7e0ed237a4411a9b Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Thu, 16 May 2024 15:40:34 -0400 Subject: [PATCH 010/294] bump n5 artifacts * n5-ij 4.2.0 * n5-universe 1.5.0 * n5-viewer_fiji 6.1.1 * n5-zarr 1.3.2 --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 3184a27..4e28571 100644 --- a/pom.xml +++ b/pom.xml @@ -1128,7 +1128,7 @@ ${n5-hdf5.version} - 4.1.1 + 4.2.0 ${n5-ij.version} @@ -1136,15 +1136,15 @@ ${n5-imglib2.version} - 1.4.1 + 1.5.0 ${n5-universe.version} - 6.1.0 + 6.1.1 ${n5-viewer_fiji.version} - 1.3.1 + 1.3.2 ${n5-zarr.version} From b0cb0ee523e3581a79798befb2a48b80feb8409f Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Thu, 16 May 2024 15:44:25 -0400 Subject: [PATCH 011/294] bump imglib2-label-multisets 0.13.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4e28571..3a3707e 100644 --- a/pom.xml +++ b/pom.xml @@ -1104,7 +1104,7 @@ - 0.13.1 + 0.13.2 ${imglib2-label-multisets.version} From 7e63de8cc4c67a9c3878a97a83196ca571186538 Mon Sep 17 00:00:00 2001 From: Caleb Hulbert Date: Mon, 3 Jun 2024 16:02:29 -0400 Subject: [PATCH 012/294] build: bump imglib2-label-multiset --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3184a27..4005769 100644 --- a/pom.xml +++ b/pom.xml @@ -1104,7 +1104,7 @@ - 0.13.1 + 0.14.0 ${imglib2-label-multisets.version} From 881466a7fb6fd3bb160c84ad8a7764c353fd7ccb Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Wed, 5 Jun 2024 13:47:31 -0400 Subject: [PATCH 013/294] bump more n5 versions --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 3a3707e..5b902bb 100644 --- a/pom.xml +++ b/pom.xml @@ -1112,7 +1112,7 @@ ${n5.version} - 4.1.2 + 4.2.0 ${n5-aws-s3.version} @@ -1128,7 +1128,7 @@ ${n5-hdf5.version} - 4.2.0 + 4.2.1 ${n5-ij.version} @@ -1136,7 +1136,7 @@ ${n5-imglib2.version} - 1.5.0 + 1.6.0 ${n5-universe.version} @@ -1144,7 +1144,7 @@ ${n5-viewer_fiji.version} - 1.3.2 + 1.3.4 ${n5-zarr.version} From 397d5d0443ac3c00738d6428e90d7399b7d60f6e Mon Sep 17 00:00:00 2001 From: Giuseppe Barbieri Date: Tue, 5 Mar 2024 15:30:42 +0100 Subject: [PATCH 014/294] additional publishing info --- gradle/platform/build.gradle.kts | 91 +++++++++++++++++++++++++++++++- 1 file changed, 90 insertions(+), 1 deletion(-) diff --git a/gradle/platform/build.gradle.kts b/gradle/platform/build.gradle.kts index 9605d8c..43dd9b5 100644 --- a/gradle/platform/build.gradle.kts +++ b/gradle/platform/build.gradle.kts @@ -27,7 +27,7 @@ dependencies { val a = node / "artifactId" val v = node / "version" api("$g:$a:$v") -// println("$g:$a:$v") + // println("$g:$a:$v") } } } @@ -45,6 +45,95 @@ publishing { version = (effXml / "version").toString() from(components["javaPlatform"]) + pom { + name = "SciJava Parent POM" + description = "This POM provides a parent from which participating projects can declare their build configurations. It ensures that projects all use a compatible build environment, including Java version, as well as versions of dependencies and plugins." + url = "https://scijava.org/" + inceptionYear = "2011" + organization { + name = "SciJava" + url = "https://scijava.org/" + } + licenses { + license { + name = "Unlicense" + url = "https://unlicense.org/" + distribution = "repo" + } + } + developers { + developer { + id = "ctrueden" + name = "Curtis Rueden" + url = "https://imagej.net/people/ctrueden" + roles.addAll("founder", "lead", "developer", "debugger", "reviewer", "support", "maintainer") + } + } + contributors { + operator fun String.invoke(id: String) = contributor { + name = this@invoke + url = "https://imagej.net/people/$id" + properties = mapOf("id" to id) + } + "Mark Hiner"("hinerm") + "Johannes Schindelin"("dscho") + "Sébastien Besson"("sbesson") + "John Bogovic"("bogovicj") + "Nicolas Chiaruttini"("NicoKiaru") + "Barry DeZonia"("bdezonia") + "Richard Domander"("rimadoma") + "Karl Duderstadt"("karlduderstadt") + "Jan Eglinger"("imagejan") + "Gabriel Einsdorf"("gab1one") + "Tiago Ferreira"("tferr") + contributor { + name = "David Gault" + properties = mapOf("id" to "dgault") + } + "Ulrik Günther"("skalarproduktraum") + "Philipp Hanslovsky"("hanslovsky") + "Stefan Helfrich"("stelfrich") + "Cameron Lloyd"("camlloyd") + "Hadrien Mary"("hadim") + "Tobias Pietzsch"("tpietzsch") + "Stephan Preibisch"("StephanPreibisch") + "Stephan Saalfeld"("axtimwalde") + "Deborah Schmidt"("frauzufall") + "Lorenzo Scianatico"("LoreScianatico") + "Jean - Yves Tinevez"("tinevez") + "Christian Tischer"("tischi") + "Gabriella Turek"("turekg") + contributor { + name = "Giuseppe Barbieri" + properties = mapOf("id" to "elect") + } + } + + mailingLists { + mailingList { + name = "SciJava" + subscribe = "https://groups.google.com/group/scijava" + unsubscribe = subscribe + post = "scijava@googlegroups.com" + archive = "https://groups.google.com/group/scijava" + } + } + + scm { + connection = "scm:git:https://github.com/scijava/pom-scijava" + developerConnection = "scm:git:git@github.com:scijava/pom-scijava" + tag = "HEAD" + url = "https://github.com/scijava/pom-scijava" + } + issueManagement { + system = "GitHub Issues" + url = "https://github.com/scijava/pom-scijava/issues" + } + ciManagement { + system = "GitHub Actions" + url = "https: //github.com/scijava/pom-scijava/actions" + } + } } } } From 4cf7560ae1f441cdd6988d495965bcd317b24923 Mon Sep 17 00:00:00 2001 From: Giuseppe Barbieri Date: Tue, 5 Mar 2024 15:32:48 +0100 Subject: [PATCH 015/294] remove spaces --- gradle/platform/build.gradle.kts | 3 --- 1 file changed, 3 deletions(-) diff --git a/gradle/platform/build.gradle.kts b/gradle/platform/build.gradle.kts index 43dd9b5..f29fa93 100644 --- a/gradle/platform/build.gradle.kts +++ b/gradle/platform/build.gradle.kts @@ -43,7 +43,6 @@ publishing { groupId = "org.scijava" artifactId = "pom-scijava" version = (effXml / "version").toString() - from(components["javaPlatform"]) pom { name = "SciJava Parent POM" @@ -108,7 +107,6 @@ publishing { properties = mapOf("id" to "elect") } } - mailingLists { mailingList { name = "SciJava" @@ -118,7 +116,6 @@ publishing { archive = "https://groups.google.com/group/scijava" } } - scm { connection = "scm:git:https://github.com/scijava/pom-scijava" developerConnection = "scm:git:git@github.com:scijava/pom-scijava" From ff3d1af0f58d86d5fe5e82aa277ad1c5df2ebda0 Mon Sep 17 00:00:00 2001 From: Giuseppe Barbieri Date: Tue, 12 Mar 2024 09:18:55 +0100 Subject: [PATCH 016/294] up --- gradle/catalog/build.gradle.kts | 67 + gradle/catalog/eff.xml | 6379 +++++++++++++++++ gradle/catalog/settings.gradle.kts | 12 + gradle/platform/build.gradle.kts | 150 +- gradle/platform/buildSrc/build.gradle.kts | 13 + gradle/platform/buildSrc/settings.gradle.kts | 4 + .../src/main/kotlin/publish.gradle.kts | 235 + gradle/platform/settings.gradle.kts | 25 + gradle/playground/build.gradle.kts | 228 + gradle/playground/settings.gradle.kts | 25 + gradle/settings.gradle.kts | 16 +- 11 files changed, 7037 insertions(+), 117 deletions(-) create mode 100644 gradle/catalog/build.gradle.kts create mode 100644 gradle/catalog/eff.xml create mode 100644 gradle/catalog/settings.gradle.kts create mode 100644 gradle/platform/buildSrc/build.gradle.kts create mode 100644 gradle/platform/buildSrc/settings.gradle.kts create mode 100644 gradle/platform/buildSrc/src/main/kotlin/publish.gradle.kts create mode 100644 gradle/platform/settings.gradle.kts create mode 100644 gradle/playground/build.gradle.kts create mode 100644 gradle/playground/settings.gradle.kts diff --git a/gradle/catalog/build.gradle.kts b/gradle/catalog/build.gradle.kts new file mode 100644 index 0000000..7cf6db1 --- /dev/null +++ b/gradle/catalog/build.gradle.kts @@ -0,0 +1,67 @@ +import groovy.xml.XmlSlurper +import groovy.xml.slurpersupport.GPathResult +import groovy.xml.slurpersupport.NodeChild + +plugins { + `version-catalog` + `maven-publish` +} + +group = "org.scijava" +version = "0.1" + +catalog.versionCatalog { + + operator fun GPathResult.div(child: String) = children().find { (it!! as NodeChild).name() == child } as GPathResult + + val effXml = XmlSlurper().parse(projectDir.resolve("eff.xml")) + val deps = effXml / "dependencyManagement" / "dependencies" + val bundles = mutableMapOf>() + val skip = listOf("mpicbg" to "mpicbg_") + val cache = mutableSetOf() // skip duplicates, such as org.bytedeco:ffmpeg + for (dep in deps.children()) { + val node = dep as NodeChild + val g = node / "groupId" + val a = node / "artifactId" + val v = node / "version" + val gav = "$g:$a:$v" + + if (("$g" to "$a") in skip || gav in cache) + continue + + cache += gav + + // println(gav) + val camel = "$a".split('-', '_') + .joinToString("") { if (it.isEmpty()) "" else it[0].uppercase() + it.substring(1).lowercase() } + .replaceFirstChar { it.lowercase() } + + fun getAlias(group: String = "$g".substringAfterLast('.')) = + "$group." + when { + camel.startsWith(group) -> camel.substringAfter(group).replaceFirstChar { it.lowercase() }.ifEmpty { group } + else -> camel + }.also { bundles.getOrPut(group, ::ArrayList) += it } + + val alias = when ("$g") { + in listOf("org.scijava", "net.imagej", "net.imglib2", "sc.fiji", "org.janelia.saalfeldlab") -> getAlias() + "io.scif" -> getAlias("scifio") + else -> "$g.$camel" + } + + println("$alias($gav)") + library(alias, gav) + } + for ((alias, aliases) in bundles) + bundle(alias, aliases) +} + +publishing.publications { + repositories.maven { + name = "sciJava" + credentials(PasswordCredentials::class) + url = uri("https://maven.scijava.org/content/repositories/releases") + } + create("sciJavaCatalog") { + from(components["versionCatalog"]) + } +} \ No newline at end of file diff --git a/gradle/catalog/eff.xml b/gradle/catalog/eff.xml new file mode 100644 index 0000000..1bb3642 --- /dev/null +++ b/gradle/catalog/eff.xml @@ -0,0 +1,6379 @@ + + + + + + + + + + + + + + + 4.0.0 + + org.scijava + pom-scijava-base + 19.0.0 + + + org.scijava + pom-scijava + 38.0.0-SNAPSHOT + pom + SciJava Parent POM + This POM provides a parent from which participating projects can declare their build configurations. It ensures that projects all use a compatible build environment, including Java version, as well as versions of dependencies and plugins. + https://scijava.org/ + 2011 + + SciJava + https://scijava.org/ + + + + Unlicense + https://unlicense.org/ + repo + + + + + ctrueden + Curtis Rueden + https://imagej.net/people/ctrueden + + founder + lead + developer + debugger + reviewer + support + maintainer + + + + + + Mark Hiner + https://imagej.net/people/hinerm + + hinerm + + + + Johannes Schindelin + https://imagej.net/people/dscho + + dscho + + + + Sébastien Besson + https://imagej.net/people/sbesson + + sbesson + + + + John Bogovic + https://imagej.net/people/bogovicj + + bogovicj + + + + Nicolas Chiaruttini + https://imagej.net/people/NicoKiaru + + NicoKiaru + + + + Barry DeZonia + https://imagej.net/people/bdezonia + + bdezonia + + + + Richard Domander + https://imagej.net/people/rimadoma + + rimadoma + + + + Karl Duderstadt + https://imagej.net/people/karlduderstadt + + karlduderstadt + + + + Jan Eglinger + https://imagej.net/people/imagejan + + imagejan + + + + Gabriel Einsdorf + https://imagej.net/people/gab1one + + gab1one + + + + Tiago Ferreira + https://imagej.net/people/tferr + + tferr + + + + David Gault + + dgault + + + + Ulrik Günther + https://imagej.net/people/skalarproduktraum + + skalarproduktraum + + + + Philipp Hanslovsky + https://imagej.net/people/hanslovsky + + hanslovsky + + + + Stefan Helfrich + https://imagej.net/people/stelfrich + + stelfrich + + + + Cameron Lloyd + https://imagej.net/people/camlloyd + + camlloyd + + + + Hadrien Mary + https://imagej.net/people/hadim + + hadim + + + + Tobias Pietzsch + https://imagej.net/people/tpietzsch + + tpietzsch + + + + Stephan Preibisch + https://imagej.net/people/StephanPreibisch + + StephanPreibisch + + + + Stephan Saalfeld + https://imagej.net/people/axtimwalde + + axtimwalde + + + + Deborah Schmidt + https://imagej.net/people/frauzufall + + frauzufall + + + + Lorenzo Scianatico + https://imagej.net/people/LoreScianatico + + LoreScianatico + + + + Jean-Yves Tinevez + https://imagej.net/people/tinevez + + tinevez + + + + Christian Tischer + https://imagej.net/people/tischi + + tischi + + + + Gabriella Turek + https://imagej.net/people/turekg + + turekg + + + + + + SciJava + https://groups.google.com/group/scijava + https://groups.google.com/group/scijava + scijava@googlegroups.com + https://groups.google.com/group/scijava + + + + scm:git:https://github.com/scijava/pom-scijava + scm:git:git@github.com:scijava/pom-scijava + https://github.com/scijava/pom-scijava + + + GitHub Issues + https://github.com/scijava/pom-scijava/issues + + + GitHub Actions + https://github.com/scijava/pom-scijava/actions + + + 3.4.2 + 3.4.2 + 2.0.1 + 0.5.4 + 2.0.2 + 2.0.2 + 1.11.0 + 1.18.0 + 3.0.1 + 3.0.1 + 1.2.10 + 2.1.1 + 2.0.2 + 2.0.1 + 3.0.0 + 3.0.6 + 2.0.7 + 2.5.0 + 3.0.3 + 2.1.0 + 2.1.0 + 1.0.6 + 2.1.8 + 2.1.2 + 2.1.2 + 2.3.0 + 2.3.0 + 2.0.4 + 2.0.3 + 2.0.1 + 2.0.8 + 2.1.1 + 3.1.3 + 2.0.1 + 2.0.1 + 2.0.1 + 1.0.2 + 2.3.5 + 1.1.5 + 1.1.1 + 2.0.2 + 2.0.1 + 4.2.2 + 4.2.2 + 2.0.2 + 3.0.1 + 3.0.1 + 2.0.1 + 2.0.0 + 2.0.1 + 3.0.0 + 4.1.2 + 4.1.2 + 2.0.2 + 2.0.1 + 5.0.0 + 5.0.0 + 2.0.1 + 2.0.1 + 2.0.1 + 7.1.1 + 2.1.1 + 1.6.2 + 1.6.2 + 3.0.1 + 2.0.0 + 2.0.0 + 1.1.2 + 1.1.2 + 2.0.2 + 2.0.2 + 2.0.5 + 4.2.1 + 2.0.2 + 5.0.25 + 4.3.4 + 2.0.3 + 2.0.3 + 2.0.1 + 3.1.10 + 1.0.5 + 2.1.1 + 2.1.1 + 2.0.2 + 2.0.2 + 2.1.2 + 2.0.1 + 3.1.9 + 3.1.9 + 1.7-fiji4 + 1.1.4 + 1.1.4 + 2.0.1 + 2.1.1 + 2.1.0 + 25.0.2 + 25.0.2 + 2.0.1 + 2.0.1 + 3.1.4 + 0.1.2 + 1.2.5 + 1.4.0 + 1.2.1 + 3.2.0 + 2.0.1 + 1.2.1 + 1.3.1 + 7.11.1 + 3.3.4 + 1.3.10 + 1.3.10 + 2.0.4 + 2.2.0 + 3.0.4 + 3.0.4 + 2.0.3 + 1.0.3 + 2.0.3 + 2.0.1 + 2.5.0 + 2.5.0 + 2.0.3 + 2.01.4 + <_3D_Blob_Segmentation.version>3.0.2 + <_3D_Objects_Counter.version>2.0.1 + <_3D_Viewer.version>4.0.5 + 1.2.7 + com.google.inject.*,javax.xml.namespace.QName,jnr.ffi.*,org.apache.hadoop.yarn.*.package-info,org.apache.spark.unused.UnusedStubClass,org.eclipse.aether.*,org.hibernate.stat.ConcurrentStatisticsImpl,org.junit.runner.Runner,org.jzy3d.plot3d.pipelines.* + 1.10.14 + 1.10.14 + 3.5.3 + 2.7.7 + 3.5.3 + 2.7.7 + 3.5.3 + 4.11.1 + 4.11.1 + 2.26.0 + 2.33 + 2.33 + 9.6 + 9.6 + 9.6 + 9.6 + 9.6 + 1.10.4 + 1.10.4 + 3.3.1 + ${package-guess} + 1.12.667 + 1.12.667 + 1.12.667 + 2.6.13 + 2.6.13 + 0.4.2 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 10.4.13 + 3.1.2 + 1.0.0-beta-34 + 6.2.4 + 9.1.0 + 9.1.0 + 1.0.0 + 7.2.0 + 7.2.0 + 7.2.0 + 2.1.4 + 2.1.4 + 7.0.18 + 7.0.18 + 7.0.18 + 7.0.18 + 7.0.18 + 7.0.18 + 0.7.0 + 3.5.0 + 3.2.0 + 2.0.SP1 + 3.3.0 + 3.3.0 + 1.2.12 + 1.2.12 + 1.2.25 + 3.42.0 + 19.04.1 + 2.2.10 + 2.5.0.1 + 1.8.1.1 + 2.3.0.4 + 2.5.1.4 + 2.5.3.1 + 1.9.0.1 + 0.32.1.1 + 0.32.2.0 + 2.7 + 1.12.667 + 1.12.667 + 5.6.0 + 1.3.1 + 1.11.9 + 2.16.1 + 2.16.1 + 2.16.1 + 2.16.1 + 2.16.1 + 3.3.1 + 3.3.0 + 3.4.0 + 2.304 + 3.4 + 1.3.13 + 0.10.4 + 2.2.16 + 3.1.19 + 1.5.5-11 + 0.12.0 + 4.2.2 + 2.3.0 + 2.3.0 + 2.3.0 + 2.3.0 + 2.3.0 + 2.3.0 + 2.3.0 + 2.3.0 + 2.26.0 + 2.43.0 + 2.43.0 + 2.43.0 + 2.34.0 + 1.29.0 + 1.23.0 + 1.23.0 + 1.23.0 + 1.10.4 + 1.10.4 + 2.33.0 + 2.33.0 + 0.127.13 + 1.38.0 + 2.34.0 + 2.10.1 + 2.25.0 + 33.0.0-jre + 1.44.1 + 1.44.1 + 1.44.1 + 1.44.1 + 1.44.1 + 1.44.1 + 2.8 + 3.23.0 + 3.23.0 + 3.23.0 + 1.7 + 5.5.13.3 + 0.1.55 + 1.1.3 + 5.3 + 5.3 + 5.3 + 0.7.0 + 5.9 + 4.12.0 + 3.8.0 + 1.1.3 + 3.6.5 + 3.6.5 + 1.9.4 + 1.9.4 + 1.6.0 + 1.6.0 + 1.16.1 + 1.16.1 + 3.2.2 + 3.2.2 + 4.4 + 1.26.0 + 1.10.0 + 2.15.1 + 2.15.1 + 2.6 + 2.6 + 3.14.0 + 1.3.0 + 1.3.0 + 3.6.1 + 2.12.0 + 1.11.0 + 0.4.8 + 26 + 26 + 1.9.10 + 11.1.0 + 11.1.0 + 11.1.0 + 11.1.0 + 4.3 + 20151125 + 0.41 + 2.25.0 + 2.25.0 + 3.2.0 + + 0.12.0 + 1.7.0 + 6.1.1-1.5.10 + 2.1.3 + 2.15.0 + 2.304 + 3.4 + 7.2.0 + 7.2.0 + 7.2.0 + 2.23.0 + 1.6.2 + 2.43.0 + 2.43.0 + 2.43.0 + 3.6.5 + 2.5.0 + 2.5.0 + 2.3.0 + 2.3.0 + 2.3.0 + 2.3.0 + 2.3.0 + 2.3.0 + 2.3.0 + 2.3.0 + 1.23.0 + 1.23.0 + 1.23.0 + 1.23.0 + 2.33.0 + 2.33.0 + 0.127.13 + 1.38.0 + 2.34.0 + 1.44.1 + 1.44.1 + 1.44.1 + 1.44.1 + 1.44.1 + 1.44.1 + 1.0.3 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 1.5 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 1.62.2 + 1.62.2 + 2.10.1 + 33.0.0-jre + 1.14.3-1.5.10 + 1.8.0.10 + 1.8.0.10 + 4.5.14 + 4.4.16 + 4.5.14 + 0.3.0 + 0.3.0 + 3.6.5 + 1.54h + 1.2.6 + 2.0.4 + 0.2.0 + 6.0.2 + 1.2.1 + 0.7.5 + 0.1.2 + 0.8.1 + 0.7.1 + 1.0.0-5.6 + 1.0.0-5.6 + 0.1.3 + 2.0.0 + 0.1.1 + 0.8.1 + 0.3.1 + 0.3.2 + 0.3.3 + 0.8.4 + 0.2.0 + 1.1.7 + 0.3.1 + 1.0.1 + 1.0.1 + 2.15.0 + 1.54h + 2.15.0 + 0.2.1 + 0.3.1 + 0.14.0 + 1.0.0-beta-17 + 2.0.1 + 2.0.0 + 0.12.0 + 4.0.1 + 0.14.1 + 1.0.0 + 6.3.0 + 1.9.0 + 4.7.5 + 1.62.2 + 0.3.0 + 4.1.1 + 0.6.1 + 0.2.2 + 1.1.1 + 0.3.1 + 0.9.0 + 0.17.1 + 0.46.0 + 5.5.13.3 + 2.5.2 + 2.8 + 1.6.0-scijava-2 + 1.6.0-scijava-2 + 2.21.22 + 2.16.1 + 2.16.1 + 2.16.1 + 2.16.1 + 2.16.1 + 2.16.1 + 0.8.11 + 1.1.3 + 1.1.3 + 1.1.3 + 1.0.3 + 1.7.2 + 1.7.2 + 1.6.0-scijava-2 + 1.5.10 + 1.5.10 + - + 8.8.3 + 3.30.2-GA + 2.0.SP1 + 1.1.3 + 1.0.1 + 1.7.36 + 1.0.58 + 2.0.6.1 + 2.4.2 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 1.3.13 + 1.5.4 + 3.4.3 + 1.4.0 + 1.4.0 + 1.4.0 + 1.4.0 + 1.4.0 + 1.4.0 + 1.4.0 + 4.2.2 + 19.04.1 + 0.14 + 3.0.4 + 3.0.4 + 3.25.1 + 3.25.1 + 3.25.1 + 3.25.1 + 3.25.1 + 3.25.1 + 3.25.1 + 3.25.1 + 2.14.6 + 2.14.6 + 2.14.6 + 3.25.1 + 1.37 + 1.37 + 1.37 + 1.49 + 5.14.0 + 5.14.0 + 0.10.4 + 2.2.16 + 3.1.19 + 2.5.0 + 2.0.5 + 2.12.7 + 2.12.7 + 1.7.2 + 2.5.0 + 2.5.0 + 2.5.0 + 1.10.5 + 2.2.1 + 2.80b11 + 2.80b11 + 0.2.1 + 0.1.55 + 1.4 + 20240205 + 0.7.4-scijava + 5.10.2 + 5.10.2 + 5.10.2 + 5.10.2 + 5.10.2 + 5.10.2 + 4.13.2 + 4.13.2 + 0.2.4 + 0.2.4 + 2.7.3 + 2.7.3 + 1.1.3 + 2.2.1 + 2.2.1 + 2.2.1 + 2.2.1 + 2.2.1 + 2.2.1 + 2.2.1 + 2.2.1 + 2.2.1 + 2.2.1 + 1.9.22 + 1.9.22 + 1.9.22 + 1.9.22 + 1.9.22 + 1.9.22 + 1.9.22 + 1.9.22 + 1.9.22 + 1.9.22 + 1.9.22 + 1.9.22 + 1.9.22 + 1.8.0 + 1.8.0 + 1.8.0 + 5.6.0 + 0.1.17 + 0.3.11 + 3.3.0 + 1.1.10 + 1.84.1-1.5.10 + 1.0.2 + 1.12.0 + 1.12.0 + 1.12.0 + 2.4.0 + N/A + **/script_templates/** + N/A + This POM provides a parent from which participating projects can declare their build configurations. It ensures that projects all use a compatible build environment, including Java version, as well as versions of dependencies and plugins. + 2.20.0 + 2.20.0 + 2.20.0 + 1.2.12 + 1.2.12 + 1.2.12 + 1.8.0 + + 3.1.0 + 3.1.0 + 0.13.1 + 3.6.0 + 3.3.2 + 3.3.2 + 3.8.1 + 3.9.6 + 3.6.1 + 3.1.1 + 3.4.1 + 3.2.5 + 3.1.0 + 1.45 + 3.4.0 + 3.1.1 + 3.6.0 + 3.3.0 + 3.6.3 + 3.11.0 + 3.11.0 + 3.5.0 + 3.0.1 + 3.3.1 + 3.5.2 + 3.12.1 + 3.3.0 + 3.2.5 + yyyy-MM-dd'T'HH:mm:ssZ + 8 + 8 + 8 + 8 + 8 + false + 5.3.6 + 5.3 + 5.3 + 5.3 + 5.3 + 20151125 + 2.2.2 + 1.3.1 + 2.19.0 + 2.19.0 + 1.5.0 + 1.5.0 + 1.5.0 + 1.5.0 + 3.2.7 + 0.2.0 + 4.0.2 + 1.1.1 + 4.0.0 + 2.1.0 + 4.0.2 + 7.0.0 + 1.3.2 + 6.0.1 + 1.2.1 + 1.0.2 + 3.1.3 + 2.5.0 + 1.2.7 + 0.4.8 + 2.2.10 + 2.5.0.1 + 1.8.1.1 + 2.3.0.4 + 2.5.1.4 + 2.5.3.1 + 1.9.0.1 + 0.32.1.1 + 0.32.2.0 + 1.54h + 1.2.6 + 2.0.4 + 0.2.0 + 6.0.2 + 1.2.1 + 0.7.5 + 0.1.2 + 0.8.1 + 0.7.1 + 1.0.0-5.6 + 1.0.0-5.6 + 0.1.3 + 2.0.0 + 0.1.1 + 0.8.1 + 0.3.1 + 0.3.2 + 0.3.3 + 0.8.4 + 0.2.0 + 1.1.7 + 0.3.1 + 1.0.1 + 1.0.1 + 2.15.0 + 0.1.4 + 0.2.1 + 0.3.1 + 0.14.0 + 1.0.0-beta-17 + 2.0.1 + 2.0.0 + 0.12.0 + 4.0.1 + 0.14.1 + 1.0.0 + 6.3.0 + 5.14.0 + 5.14.0 + 1.2.10 + 3.2.7 + 0.2.0 + 3.0.3 + 1.6.13 + 3.9.6 + 3.3 + 45.1.1 + 4.12.0 + 3.8.0 + 1.0.1 + 6.0.21 + 5.3.8 + 6.3.4 + 7.2.0 + 7.2.0 + 7.2.0 + 7.2.0 + 7.2.0 + 0.2.4 + 5.7.2 + 5.6.4 + 5.5.2 + 5.9.0 + 5.6.13 + 5.5.15 + 5.7.5 + 5.6.10 + 0.1.4 + 0.3.26-1.5.10 + 5.9 + 4.9.0-1.5.10 + 4.3.4 + 3.5.3 + 3.5.3 + 4.11.1 + 4.11.1 + 1.10.14 + 1.10.14 + 4.4 + 1.26.0 + 1.10.0 + 3.14.0 + 3.6.1 + 2.12.0 + 1.11.0 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.0.18 + 4.5.14 + 4.4.16 + 4.5.14 + 2.5.2 + 2.21.22 + 2.20.0 + 2.20.0 + 3.9.6 + 3.11.0 + 0.13.1 + 3.3.2 + 5.2.5 + 5.2.5 + 5.2.5 + 5.2.5 + 5.2.5 + 5.2.5 + 2.4.8 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 1.17 + 2.9 + 7.0.18 + 7.0.18 + 7.0.18 + 7.0.18 + 7.0.18 + 6.1.1-1.5.10 + 1.14.3-1.5.10 + 1.5.10 + 1.5.10 + 1.84.1-1.5.10 + 0.3.26-1.5.10 + 4.9.0-1.5.10 + 5.3.4-1.5.10 + 3.42.0 + 2.2.0 + 4.0.0 + 11.1.0 + 11.1.0 + 11.1.0 + 11.1.0 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 9.4.54.v20240208 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 4.3 + 0.41 + 1.1.5 + 1.0.2 + 4.0.2 + 1.1.1 + 4.0.0 + 2.1.0 + 4.0.2 + 7.0.0 + 1.3.2 + 6.0.1 + 1.2.1 + 3.1.3 + 3.30.2-GA + 2.0.6.1 + 1.9.22 + 1.9.22 + 1.9.22 + 1.9.22 + 1.9.22 + 1.9.22 + 1.9.22 + 1.9.22 + 1.9.22 + 1.9.22 + 1.9.22 + 1.9.22 + 1.8.0 + 1.8.0 + 1.5.4 + 3.4.3 + 1.4.0 + 1.4.0 + 1.4.0 + 1.4.0 + 1.4.0 + 1.4.0 + 0.14 + 3.25.1 + 3.25.1 + 3.25.1 + 3.25.1 + 3.25.1 + 3.25.1 + 3.25.1 + 3.25.1 + 1.49 + 2.0.5 + 2.5.0 + 2.5.0 + 1.7.2 + 1.7.2 + 1.7.2 + 2.5.0 + 2.5.0 + 2.5.0 + 2.5.0 + 1.10.5 + 2.80b11 + 1.0.58 + 2.2.1 + 20240205 + 5.10.2 + 5.10.2 + 5.10.2 + 5.10.2 + 5.10.2 + 5.10.2 + 2.2.1 + 2.2.1 + 2.2.1 + 2.2.1 + 2.2.1 + 2.2.1 + 2.2.1 + 2.2.1 + 2.2.1 + 1.0.1 + 1.8.0 + 3.1.0 + 2.19.0 + 4.2.1 + 3.3 + 45.1.1 + 1.37 + 1.37 + 5.3.6 + 1.0.1 + 6.0.21 + 5.3.8 + 6.3.4 + 5.7.2 + 5.6.4 + 5.5.2 + 5.9.0 + 5.6.13 + 5.5.15 + 5.7.5 + 5.6.10 + 9.6 + 9.6 + 9.6 + 9.6 + 9.6 + 42.7.2 + 2.7.3 + 0.4.2 + 1.6.0-scijava-2 + 1.6.0-scijava-2 + 2.4.2 + 0.7.4-scijava + 2.2.2 + 2.5.0 + 3.1.0 + 0.1.2 + 2.98.0 + 2.0.3 + 0.1.2 + 0.3.0 + 0.1.0 + 1.0.0-beta-3 + 1.0.6 + 1.0.1 + 0.2.0 + 0.2.4 + 0.3.1 + 0.1.3 + 0.1.4 + 2.0.4 + 1.0.2 + 0.1.7 + 1.0.1 + 1.1.0 + 0.2.1 + 1.0.0 + 0.4.1 + 0.1.6 + 1.0.0 + 0.4.1 + 1.0.0 + 0.3.1 + 1.0.1 + 0.2.1 + 0.5.3 + 0.3.0 + 0.2.3 + 0.3.2 + 1.0.2 + 2.0.8 + 1.6.0-scijava-2 + 1.7.36 + 1.7.36 + 1.7.36 + 1.7.36 + 1.7.36 + 1.7.36 + 1.7.36 + 0.2.1 + 2.7 + 2.6.0 + 2.6.0 + 3.2.9.RELEASE + 3.2.9.RELEASE + 3.2.9.RELEASE + 1.12.0 + 1.12.0 + 1.12.0 + 1.12.0 + 1.12.0 + 1.6.8 + 1.9 + 2.2 + ${package-guess} + 2.0.1 + 3.0.2 + 3.0.2 + 3.1.0 + 4.7.5 + 2.2.0 + 4.0.0 + 5.2.5 + 5.2.5 + 5.2.5 + 5.2.5 + 5.2.5 + 5.2.5 + 42.7.2 + + UTF-8 + UTF-8 + 2.34.0 + 1.29.0 + 1.12.0 + 3.23.0 + 3.23.0 + 3.23.0 + 3.23.0 + 1.7 + 1.11.9 + 3.0.8 + 2.0.1 + sonatype-oss-release + 1.2.25 + 0.28.1 + 0.15.0 + 3.4.0 + 3.0.2 + 2.0.1 + 4.0.5 + 3.4.2 + 2.0.1 + 0.5.4 + 2.0.2 + 1.11.0 + 1.18.0 + 3.0.1 + 3.0.1 + 2.1.1 + 2.0.2 + 2.0.1 + 3.0.0 + 3.0.6 + 2.0.7 + 2.5.0 + 3.0.3 + 2.1.0 + 1.0.6 + 2.1.8 + 2.1.2 + 2.3.0 + 2.0.4 + 2.0.3 + 2.0.1 + 2.0.8 + 2.1.1 + 3.1.3 + 2.0.1 + 2.0.1 + 1.0.2 + 2.3.5 + 1.1.1 + 2.0.2 + 2.0.1 + 4.2.2 + 2.0.2 + 3.0.1 + 3.0.1 + 2.0.1 + 2.0.0 + 2.0.1 + 3.0.0 + 4.1.2 + 4.1.2 + 2.0.2 + 2.0.1 + 5.0.0 + 5.0.0 + 2.0.1 + 2.0.1 + 7.1.1 + 2.1.1 + 3.0.1 + 2.0.0 + 2.0.0 + 1.1.2 + 2.0.2 + 2.0.5 + 2.0.2 + 5.0.25 + 2.0.3 + 2.0.1 + 3.1.10 + 1.0.5 + 2.1.1 + 2.0.2 + 2.1.2 + 2.0.1 + 3.1.9 + 1.7-fiji4 + 1.1.4 + 1.1.4 + 2.0.1 + 2.1.1 + 2.1.0 + 25.0.2 + 2.0.1 + 3.1.4 + 0.1.2 + 1.2.5 + 1.4.0 + 1.2.1 + 3.2.0 + 2.0.1 + 1.2.1 + 1.3.1 + 7.11.1 + 3.3.4 + 1.3.10 + 2.0.4 + 2.2.0 + 3.0.4 + 2.0.3 + 1.0.3 + 2.0.3 + 2.0.1 + 2.5.0 + 2.0.3 + 2.01.4 + 2.6.13 + 10.4.13 + 3.1.2 + 1.0.0-beta-34 + 6.2.4 + 9.1.0 + 1.0.0 + 2.1.4 + 2.1.3 + 2.15.0 + 0.1.17 + 0.3.11 + 1.1.10 + 1.0.2 + 2.0.1 + 3.0.2 + 3.0.8 + 2.0.1 + 2.2.7 + 1.0.1 + 2.0.0 + 2.1.1 + 1.1.2 + 4.1.1 + 0.6.1 + 0.2.2 + 1.1.1 + 0.3.1 + 0.9.0 + 0.17.1 + 0.46.0 + 0.1.2 + 2.1.1 + 2.98.0 + 2.0.3 + 0.1.2 + 0.3.0 + 0.1.0 + 1.0.0-beta-3 + 1.0.6 + 3.0.0 + 1.0.1 + 0.2.0 + 0.2.4 + 0.3.1 + 0.1.3 + 0.1.4 + 2.0.4 + 1.0.2 + 0.1.7 + 1.0.1 + com.google.inject.*,javax.xml.namespace.QName,jnr.ffi.*,org.apache.hadoop.yarn.*.package-info,org.apache.spark.unused.UnusedStubClass,org.eclipse.aether.*,org.hibernate.stat.ConcurrentStatisticsImpl,org.junit.runner.Runner,org.jzy3d.plot3d.pipelines.* + scijava + **/script_templates/** + java + org.scijava,net.imagej,net.imglib2,io.scif,sc.fiji + https://javadoc.scijava.org/Java8/ + https://javadoc.scijava.org/JavaFX8/ + [1.8.0-101,) + 8 + 8 + 3.6.3 + natives-linux_64 + linux-x86_64 + natives-linux-amd64 + linux-x86_64 + linux-x86_64 + natives-linux-amd64 + natives-linux-amd64 + natives-linux-amd64 + natives-linux-amd64 + linux-x86_64 + linux-x86_64 + linux-x86_64 + linux-x86_64 + 64 + x86_64 + amd64 + linux + linux + linux + linux + + founder,lead,developer,debugger,reviewer,support,maintainer + 1.1.0 + 0.2.1 + 1.0.0 + 0.4.1 + 0.1.6 + 1.0.0 + 0.4.1 + 1.0.0 + 0.3.1 + 1.0.1 + 0.2.1 + 0.5.3 + 0.3.0 + 0.2.3 + 0.3.2 + 2.6.0 + 2.6.0 + 1.7.36 + 1.7.36 + 1.7.36 + 1.7.36 + 1.7.36 + 1.7.36 + 1.7.36 + 2.7 + 2.2 + 3.10.0.2594 + https://s01.oss.sonatype.org + 2.4.8 + 2.4.8 + 2.2.7 + 3.2.9.RELEASE + 3.2.9.RELEASE + 3.2.9.RELEASE + 3.2.9.RELEASE + 1.0.2 + 1.12.0 + 5.3.4-1.5.10 + 0.12.0 + 1.6.8 + 1.2.0 + 1.0.1 + 2.0.0 + 3.0.3 + all + 2.0.8 + 1.6.0-scijava-2 + 1.7 + 2.16.2 + 1.0 + 2.1.1 + 3.9.6 + 3.9.6 + 2.9 + 1.9 + 1.1.2 + 1.5.5-11 + + + + + org.scijava + batch-processor + 0.4.2 + + + org.scijava + minimaven + 2.2.2 + + + org.scijava + native-lib-loader + 2.5.0 + + + org.scijava + parsington + 3.1.0 + + + org.scijava + scijava-cache + 0.1.2 + + + org.scijava + scijava-common + 2.98.0 + + + org.scijava + scijava-config + 2.0.3 + + + org.scijava + scijava-grab + 0.1.2 + + + org.scijava + scijava-io-http + 0.3.0 + + + org.scijava + scijava-java3d + 0.1.0 + + + org.scijava + scijava-listeners + 1.0.0-beta-3 + + + org.scijava + scijava-log-slf4j + 1.0.6 + + + org.scijava + scijava-optional + 1.0.1 + + + org.scijava + scijava-plot + 0.2.0 + + + org.scijava + scijava-plugins-commands + 0.2.4 + + + org.scijava + scijava-plugins-platforms + 0.3.1 + + + org.scijava + scijava-plugins-text-markdown + 0.1.3 + + + org.scijava + scijava-plugins-text-plain + 0.1.4 + + + org.scijava + scijava-search + 2.0.4 + + + org.scijava + scijava-table + 1.0.2 + + + org.scijava + scijava-ui-awt + 0.1.7 + + + org.scijava + scijava-ui-swing + 1.0.1 + + + org.scijava + script-editor + 1.0.0 + + + org.scijava + script-editor-jython + 1.1.0 + + + org.scijava + script-editor-scala + 0.2.1 + + + org.scijava + scripting-beanshell + 0.4.1 + + + org.scijava + scripting-clojure + 0.1.6 + + + org.scijava + scripting-groovy + 1.0.0 + + + org.scijava + scripting-java + 0.4.1 + + + org.scijava + scripting-javascript + 1.0.0 + + + org.scijava + scripting-jruby + 0.3.1 + + + org.scijava + scripting-jython + 1.0.1 + + + org.scijava + scripting-kotlin + 0.2.1 + + + org.scijava + scripting-matlab + 0.5.3 + + + org.scijava + scripting-python + 0.3.0 + + + org.scijava + scripting-renjin + 0.2.3 + + + org.scijava + scripting-scala + 0.3.2 + + + org.scijava + swing-checkbox-tree + 1.0.2 + + + org.scijava + ui-behaviour + 2.0.8 + + + net.imagej + imagej + 2.15.0 + + + net.imagej + ij + 1.54h + + + com.sun + tools + + + + + net.imagej + ij1-patcher + 1.2.6 + + + net.imagej + imagej-common + 2.0.4 + + + net.imagej + imagej-deprecated + 0.2.0 + + + net.imagej + imagej-launcher + 6.0.2 + + + net.imagej + imagej-legacy + 1.2.1 + + + net.imagej + imagej-matlab + 0.7.5 + + + net.imagej + imagej-mesh + 0.8.1 + + + net.imagej + imagej-mesh-io + 0.1.2 + + + net.imagej + imagej-notebook + 0.7.1 + + + net.imagej + imagej-omero + 1.0.0-5.6 + + + net.imagej + imagej-omero-legacy + 1.0.0-5.6 + + + net.imagej + imagej-opencv + 0.1.3 + + + net.imagej + imagej-ops + 2.0.0 + + + net.imagej + imagej-plugins-batch + 0.1.1 + + + net.imagej + imagej-plugins-commands + 0.8.1 + + + net.imagej + imagej-plugins-tools + 0.3.1 + + + net.imagej + imagej-plugins-uploader-ssh + 0.3.2 + + + net.imagej + imagej-plugins-uploader-webdav + 0.3.3 + + + net.imagej + imagej-scripting + 0.8.4 + + + net.imagej + imagej-server + 0.2.0 + + + net.imagej + imagej-tensorflow + 1.1.7 + + + net.imagej + imagej-ui-awt + 0.3.1 + + + net.imagej + imagej-ui-swing + 1.0.1 + + + net.imagej + imagej-updater + 1.0.1 + + + net.imagej + op-finder + 0.1.4 + + + net.imglib2 + imglib2 + 6.3.0 + + + net.imglib2 + imglib2-algorithm + 0.14.0 + + + net.imglib2 + imglib2-algorithm-fft + 0.2.1 + + + net.imglib2 + imglib2-algorithm-gpl + 0.3.1 + + + net.imglib2 + imglib2-cache + 1.0.0-beta-17 + + + net.imglib2 + imglib2-ij + 2.0.1 + + + net.imglib2 + imglib2-imglyb + 2.0.0 + + + net.imglib2 + imglib2-realtransform + 4.0.1 + + + net.imglib2 + imglib2-roi + 0.14.1 + + + net.imglib2 + imglib2-unsafe + 1.0.0 + + + io.scif + scifio + 0.46.0 + + + io.scif + scifio-bf-compat + 4.1.1 + + + io.scif + scifio-cli + 0.6.1 + + + io.scif + scifio-hdf5 + 0.2.2 + + + io.scif + scifio-jai-imageio + 1.1.1 + + + io.scif + scifio-labeling + 0.3.1 + + + io.scif + scifio-lifesci + 0.9.0 + + + io.scif + scifio-ome-xml + 0.17.1 + + + sc.fiji + fiji + 2.15.0 + + + sc.fiji + 3D_Blob_Segmentation + 3.0.2 + + + sc.fiji + 3D_Objects_Counter + 2.0.1 + + + sc.fiji + 3D_Viewer + 4.0.5 + + + sc.fiji + AnalyzeSkeleton_ + 3.4.2 + + + sc.fiji + Anisotropic_Diffusion_2D + 2.0.1 + + + sc.fiji + Archipelago_Plugins + 0.5.4 + + + sc.fiji + Arrow_ + 2.0.2 + + + sc.fiji + Auto_Local_Threshold + 1.11.0 + + + sc.fiji + Auto_Threshold + 1.18.0 + + + sc.fiji + BalloonSegmentation_ + 3.0.1 + + + sc.fiji + Bug_Submitter + 2.1.1 + + + sc.fiji + CPU_Meter + 2.0.2 + + + sc.fiji + Calculator_Plus + 2.0.1 + + + sc.fiji + Cell_Counter + 3.0.0 + + + sc.fiji + Colocalisation_Analysis + 3.0.6 + + + sc.fiji + Color_Histogram + 2.0.7 + + + sc.fiji + Color_Inspector_3D + 2.5.0 + + + sc.fiji + Colour_Deconvolution + 3.0.3 + + + sc.fiji + CorrectBleach_ + 2.1.0 + + + sc.fiji + Correct_3D_Drift + 1.0.6 + + + sc.fiji + Descriptor_based_registration + 2.1.8 + + + sc.fiji + Dichromacy_ + 2.1.2 + + + sc.fiji + Directionality_ + 2.3.0 + + + sc.fiji + FS_Align_TrakEM2 + 2.0.4 + + + sc.fiji + Feature_Detection + 2.0.3 + + + sc.fiji + Fiji_Archipelago + 2.0.1 + + + sc.fiji + Fiji_Developer + 2.0.8 + + + sc.fiji + Fiji_Package_Maker + 2.1.1 + + + sc.fiji + Fiji_Plugins + 3.1.3 + + + sc.fiji + FilamentDetector + 2.0.1 + + + sc.fiji + FlowJ_ + 2.0.1 + + + sc.fiji + Graph_Cut + 1.0.2 + + + sc.fiji + Gray_Morphology + 2.3.5 + + + org.janelia + H5J_Loader_Plugin + 1.1.5 + + + sc.fiji + HDF5_Vibez + 1.1.1 + + + sc.fiji + Helmholtz_Analysis + 2.0.2 + + + sc.fiji + IJ_Robot + 2.0.1 + + + sc.fiji + IO_ + 4.2.2 + + + sc.fiji + Image_5D + 2.0.2 + + + sc.fiji + Image_Expression_Parser + 3.0.1 + + + sc.fiji + Interactive_3D_Surface_Plot + 3.0.1 + + + sc.fiji + IsoData_Classifier + 2.0.1 + + + sc.fiji + Kappa + 2.0.0 + + + sc.fiji + Kuwahara_Filter + 2.0.1 + + + sc.fiji + KymographBuilder + 3.0.0 + + + sc.fiji + LSM_Reader + 4.1.2 + + + sc.fiji + LSM_Toolbox + 4.1.2 + + + sc.fiji + Lasso_and_Blow_Tool + 2.0.2 + + + sc.fiji + Linear_Kuwahara + 2.0.1 + + + sc.fiji + LocalThickness_ + 5.0.0 + + + sc.fiji + MTrack2_ + 2.0.1 + + + sc.fiji + M_I_P + 2.0.1 + + + sc.fiji + Manual_Tracking + 2.1.1 + + + sc.fiji + Multi_Kymograph + 3.0.1 + + + sc.fiji + OMEVisual + 2.0.0 + + + sc.fiji + PIV_analyser + 2.0.0 + + + sc.fiji + QuickPALM_ + 1.1.2 + + + sc.fiji + RATS_ + 2.0.2 + + + sc.fiji + Reconstruct_Reader + 2.0.5 + + + sc.fiji + SPIM_Opener + 2.0.2 + + + sc.fiji + SPIM_Registration + 5.0.25 + + + sc.fiji + Samples_ + 2.0.3 + + + sc.fiji + Series_Labeler + 2.0.1 + + + sc.fiji + Siox_Segmentation + 1.0.5 + + + sc.fiji + Skeletonize3D_ + 2.1.1 + + + sc.fiji + SplineDeformationGenerator_ + 2.0.2 + + + sc.fiji + Stack_Manipulation + 2.1.2 + + + sc.fiji + Statistical_Region_Merging + 2.0.1 + + + sc.fiji + Stitching_ + 3.1.9 + + + sc.fiji + Sync_Win + 1.7-fiji4 + + + sc.fiji + Thread_Killer + 2.0.1 + + + sc.fiji + Time_Lapse + 2.1.1 + + + sc.fiji + Time_Stamper + 2.1.0 + + + sc.fiji + ToAST_ + 25.0.2 + + + sc.fiji + TopoJ_ + 2.0.1 + + + sc.fiji + Trainable_Segmentation + 3.3.4 + + + sc.fiji + TrakEM2_Archipelago + 2.0.4 + + + sc.fiji + VIB-lib + 2.2.0 + + + sc.fiji + VIB_ + 3.0.4 + + + sc.fiji + Vaa3d_Reader + 2.0.3 + + + sc.fiji + Vaa3d_Writer + 1.0.3 + + + sc.fiji + Video_Editing + 2.0.1 + + + sc.fiji + View5D_ + 2.5.0 + + + sc.fiji + Volume_Calculator + 2.0.3 + + + sc.fiji + Volume_Viewer + 2.01.4 + + + sc.fiji + bUnwarpJ_ + 2.6.13 + + + sc.fiji + bij + 1.0.0 + + + sc.fiji + blockmatching_ + 2.1.4 + + + sc.fiji + fiji-lib + 2.1.3 + + + sc.fiji + legacy-imglib1 + 1.1.10 + + + sc.fiji + level_sets + 1.0.2 + + + sc.fiji + pal-optimization + 2.0.1 + + + sc.fiji + panorama_ + 3.0.2 + + + sc.fiji + register_virtual_stack_slices + 3.0.8 + + + sc.fiji + registration_3d + 2.0.1 + + + sc.fiji + weave_jy2java + 2.1.1 + + + jitk + jitk-tps + 3.0.4 + + + sc.fiji + bigwarp_fiji + 9.1.0 + + + com.googlecode.efficient-java-matrix-library + ejml + + + + + mpicbg + mpicbg + 1.5.0 + + + mpicbg + mpicbg_ + 1.5.0 + + + sc.fiji + trakem2_tps + 2.0.0 + + + sc.fiji + z_spacing + 1.1.2 + + + sc.fiji + bigdataviewer-core + 10.4.13 + + + sc.fiji + bigdataviewer-server + 3.1.2 + + + sc.fiji + bigdataviewer-vistools + 1.0.0-beta-34 + + + sc.fiji + bigdataviewer_fiji + 6.2.4 + + + sc.fiji + spim_data + 2.2.7 + + + sc.fiji + TrackMate + 7.11.1 + + + sc.fiji + TrackMate-Cellpose + 0.1.2 + + + sc.fiji + TrackMate-CSVImporter + 3.1.4 + + + sc.fiji + TrackMate-ExTrack + 1.2.5 + + + sc.fiji + TrackMate-Ilastik + 1.4.0 + + + sc.fiji + TrackMate-MorphoLibJ + 1.2.1 + + + sc.fiji + TrackMate-Oneat + 3.2.0 + + + sc.fiji + TrackMate-Skeleton + 2.0.1 + + + sc.fiji + TrackMate-StarDist + 1.2.1 + + + sc.fiji + TrackMate-Weka + 1.3.1 + + + sc.fiji + T2-NIT + 1.1.4 + + + sc.fiji + T2-TreelineGraph + 1.1.4 + + + sc.fiji + TrakEM2_ + 1.3.10 + + + sc.fiji + VectorString + 2.0.3 + + + sc.fiji + trakem2-transform + 1.0.1 + + + net.imglib2 + imglib2-label-multisets + 0.12.0 + + + org.janelia.saalfeldlab + n5 + 3.1.3 + + + org.janelia.saalfeldlab + n5-aws-s3 + 4.0.2 + + + org.janelia.saalfeldlab + n5-blosc + 1.1.1 + + + org.janelia.saalfeldlab + n5-google-cloud + 4.0.0 + + + org.janelia.saalfeldlab + n5-hdf5 + 2.1.0 + + + org.janelia.saalfeldlab + n5-ij + 4.0.2 + + + org.janelia.saalfeldlab + n5-imglib2 + 7.0.0 + + + org.janelia.saalfeldlab + n5-universe + 1.3.2 + + + org.janelia.saalfeldlab + n5-viewer_fiji + 6.0.1 + + + org.janelia.saalfeldlab + n5-zarr + 1.2.1 + + + fr.inra.ijpb + MorphoLibJ_ + 1.6.2 + + + net.haesleinhuepf + clij_ + 1.9.0.1 + + + net.haesleinhuepf + clij-core + 1.8.1.1 + + + net.haesleinhuepf + clij-coremem + 2.3.0.4 + + + net.haesleinhuepf + clij-clearcl + 2.5.0.1 + + + net.haesleinhuepf + clij2_ + 2.5.3.1 + + + net.haesleinhuepf + clij2-assistant_ + 2.5.1.4 + + + net.haesleinhuepf + clijx_ + 0.32.2.0 + + + net.haesleinhuepf + clijx-weka_ + 0.32.1.1 + + + net.preibisch + BigStitcher + 1.2.10 + + + net.preibisch + multiview-reconstruction + 3.2.7 + + + net.preibisch + multiview-simulation + 0.2.0 + + + org.bonej + bonej-plugins + 7.0.18 + + + org.bonej + bonej-ops + 7.0.18 + + + org.bonej + bonej-legacy-plugins_ + 7.0.18 + + + org.bonej + bonej-legacy-util_ + 7.0.18 + + + org.bonej + bonej-utilities + 7.0.18 + + + org.morphonets + SNT + 4.2.1 + + + org.jzy3d + jzy3d-emul-gl + + + org.jzy3d + jGL + + + + + sc.fiji + MaMuT + 7.1.1 + + + sc.fiji + labkit-pixel-classification + 0.1.17 + + + sc.fiji + labkit-ui + 0.3.11 + + + com.zeroc + glacier2 + 3.6.5 + + + com.zeroc + ice + 3.6.5 + + + org.openmicroscopy + metakit + 5.3.6 + + + ch.qos.logback + logback-classic + + + + + org.openmicroscopy + ome-codecs + 1.0.1 + + + org.openmicroscopy + ome-common + 6.0.21 + + + ch.qos.logback + logback-classic + + + xalan + serializer + + + xalan + xalan + + + + + org.openmicroscopy + ome-poi + 5.3.8 + + + org.openmicroscopy + ome-xml + 6.3.4 + + + ome + jxrlib-all + 0.2.4 + + + ome + bio-formats-tools + 7.2.0 + + + xalan + serializer + + + xalan + xalan + + + + + ome + bio-formats_plugins + 7.2.0 + + + ch.qos.logback + logback-classic + + + + + ome + formats-api + 7.2.0 + + + xalan + serializer + + + xalan + xalan + + + + + ome + formats-bsd + 7.2.0 + + + xalan + serializer + + + xalan + xalan + + + + + ome + formats-gpl + 7.2.0 + + + org.openmicroscopy + omero-blitz + 5.7.2 + + + com.sun.activation + javax.activation + + + org.apache.xmlgraphics + batik-all + + + + + org.openmicroscopy + omero-common + 5.6.4 + + + ch.qos.logback + logback-classic + + + + + org.openmicroscopy + omero-dsl-plugin + 5.5.2 + + + org.openmicroscopy + omero-gateway + 5.9.0 + + + org.openmicroscopy + omero-model + 5.6.13 + + + javax.transaction + jta + + + org.apache.solr + solr-commons-csv + + + + + org.openmicroscopy + omero-renderer + 5.5.15 + + + c3p0 + c3p0 + + + + + org.openmicroscopy + omero-romio + 5.7.5 + + + org.openmicroscopy + omero-server + 5.6.10 + + + c3p0 + c3p0 + + + com.sun.mail + javax.mail + + + javax.activation + activation + + + org.apache.xmlgraphics + batik-all + + + + + net.clearcontrol + coremem + 0.4.8 + + + com.google.android.tools + dx + + + + + net.clearvolume + cleargl + 2.2.10 + + + org.jogamp.gluegen + gluegen-rt-main + + + org.jogamp.jogl + jogl-all-main + + + + + net.algart + algart-tiff + 1.2.7 + + + com.amazonaws + aws-java-sdk-core + 1.12.667 + + + com.amazonaws + aws-java-sdk-s3 + 1.12.667 + + + antlr + antlr + 2.7.7 + + + org.antlr + ST4 + 4.3.4 + + + org.antlr + antlr + 3.5.3 + + + org.antlr + antlr-runtime + 3.5.3 + + + org.apache.ant + ant + 1.10.14 + + + org.apache.ant + ant-launcher + 1.10.14 + + + org.apache.groovy + groovy + 4.0.18 + + + org.apache.groovy + groovy-ant + 4.0.18 + + + org.apache.groovy + groovy-astbuilder + 4.0.18 + + + org.apache.groovy + groovy-cli-commons + 4.0.18 + + + org.apache.groovy + groovy-cli-picocli + 4.0.18 + + + org.apache.groovy + groovy-console + 4.0.18 + + + org.apache.groovy + groovy-contracts + 4.0.18 + + + org.apache.groovy + groovy-datetime + 4.0.18 + + + org.apache.groovy + groovy-dateutil + 4.0.18 + + + org.apache.groovy + groovy-docgenerator + 4.0.18 + + + org.apache.groovy + groovy-ginq + 4.0.18 + + + org.apache.groovy + groovy-groovydoc + 4.0.18 + + + org.apache.groovy + groovy-groovysh + 4.0.18 + + + org.apache.groovy + groovy-jmx + 4.0.18 + + + org.apache.groovy + groovy-json + 4.0.18 + + + org.apache.groovy + groovy-jsr223 + 4.0.18 + + + org.apache.groovy + groovy-macro + 4.0.18 + + + org.apache.groovy + groovy-macro-library + 4.0.18 + + + org.apache.groovy + groovy-nio + 4.0.18 + + + org.apache.groovy + groovy-servlet + 4.0.18 + + + org.apache.groovy + groovy-sql + 4.0.18 + + + org.apache.groovy + groovy-swing + 4.0.18 + + + org.apache.groovy + groovy-templates + 4.0.18 + + + org.apache.groovy + groovy-test + 4.0.18 + + + org.apache.groovy + groovy-test-junit5 + 4.0.18 + + + org.apache.groovy + groovy-testng + 4.0.18 + + + org.apache.groovy + groovy-toml + 4.0.18 + + + org.apache.groovy + groovy-typecheckers + 4.0.18 + + + org.apache.groovy + groovy-xml + 4.0.18 + + + org.apache.groovy + groovy-yaml + 4.0.18 + + + org.apache.ivy + ivy + 2.5.2 + + + org.apache.logging.log4j + log4j-api + 2.20.0 + + + org.apache.logging.log4j + log4j-core + 2.20.0 + + + org.apache.maven.shared + maven-artifact-transfer + 0.13.1 + + + org.apache.maven.shared + maven-common-artifact-filters + 3.3.2 + + + org.apache.maven + maven-core + 3.9.6 + + + org.apache.maven.plugin-tools + maven-plugin-tools-api + 3.11.0 + + + org.codehaus.plexus + plexus-component-annotations + 2.2.0 + + + org.codehaus.plexus + plexus-utils + 4.0.0 + + + org.sonatype.sisu + sisu-inject-bean + 2.6.0 + + + org.sonatype.sisu + sisu-inject-plexus + 2.6.0 + + + org.apache.poi + poi + 5.2.5 + + + org.apache.poi + poi-examples + 5.2.5 + + + org.apache.poi + poi-excelant + 5.2.5 + + + org.apache.poi + poi-ooxml + 5.2.5 + + + org.apache.poi + poi-ooxml-lite + 5.2.5 + + + org.apache.poi + poi-scratchpad + 5.2.5 + + + org.apache.spark + spark-core_2.11 + 2.4.8 + + + com.sun.jersey + jersey-core + + + commons-beanutils + commons-beanutils-core + + + io.netty + netty-all + + + + + org.apache.httpcomponents + httpclient + 4.5.14 + + + org.apache.httpcomponents + httpcore + 4.4.16 + + + org.apache.httpcomponents + httpmime + 4.5.14 + + + args4j + args4j + 2.33 + + + org.ow2.asm + asm + 9.6 + + + org.ow2.asm + asm-analysis + 9.6 + + + org.ow2.asm + asm-commons + 9.6 + + + org.ow2.asm + asm-tree + 9.6 + + + org.ow2.asm + asm-util + 9.6 + + + org.apache.xmlgraphics + batik-anim + 1.17 + + + org.apache.xmlgraphics + batik-awt-util + 1.17 + + + org.apache.xmlgraphics + batik-bridge + 1.17 + + + xalan + xalan + + + + + org.apache.xmlgraphics + batik-codec + 1.17 + + + org.apache.xmlgraphics + batik-constants + 1.17 + + + org.apache.xmlgraphics + batik-css + 1.17 + + + org.apache.xmlgraphics + batik-dom + 1.17 + + + xalan + xalan + + + + + org.apache.xmlgraphics + batik-ext + 1.17 + + + org.apache.xmlgraphics + batik-extension + 1.17 + + + org.apache.xmlgraphics + batik-gui-util + 1.17 + + + org.apache.xmlgraphics + batik-gvt + 1.17 + + + org.apache.xmlgraphics + batik-i18n + 1.17 + + + org.apache.xmlgraphics + batik-parser + 1.17 + + + org.apache.xmlgraphics + batik-rasterizer + 1.17 + + + org.apache.xmlgraphics + batik-rasterizer-ext + 1.17 + + + org.apache.xmlgraphics + batik-extensions + + + + + org.apache.xmlgraphics + batik-script + 1.17 + + + org.apache.xmlgraphics + batik-slideshow + 1.17 + + + org.apache.xmlgraphics + batik-squiggle + 1.17 + + + org.apache.xmlgraphics + batik-squiggle-ext + 1.17 + + + org.apache.xmlgraphics + batik-extensions + + + + + org.apache.xmlgraphics + batik-svg-dom + 1.17 + + + org.apache.xmlgraphics + batik-svggen + 1.17 + + + org.apache.xmlgraphics + batik-svgpp + 1.17 + + + org.apache.xmlgraphics + batik-swing + 1.17 + + + org.apache.xmlgraphics + batik-transcoder + 1.17 + + + org.apache.xmlgraphics + batik-ttf2svg + 1.17 + + + org.apache.xmlgraphics + batik-util + 1.17 + + + org.apache.xmlgraphics + batik-xml + 1.17 + + + org.apache.xmlgraphics + xmlgraphics-commons + 2.9 + + + org.lasersonlab + jblosc + 1.0.1 + + + com.nativelibs4java + bridj + 0.7.0 + + + com.google.android.tools + dx + + + + + javax.enterprise + cdi-api + 2.0.SP1 + + + org.checkerframework + checker-qual + 3.42.0 + + + commons-beanutils + commons-beanutils + 1.9.4 + + + commons-cli + commons-cli + 1.6.0 + + + commons-codec + commons-codec + 1.16.1 + + + commons-collections + commons-collections + 3.2.2 + + + org.apache.commons + commons-collections4 + 4.4 + + + org.apache.commons + commons-compress + 1.26.0 + + + org.apache.commons + commons-csv + 1.10.0 + + + commons-io + commons-io + 2.15.1 + + + commons-lang + commons-lang + 2.6 + + + org.apache.commons + commons-lang3 + 3.14.0 + + + commons-logging + commons-logging + 1.3.0 + + + org.apache.commons + commons-math3 + 3.6.1 + + + org.apache.commons + commons-pool2 + 2.12.0 + + + org.apache.commons + commons-text + 1.11.0 + + + cglib + cglib + 3.3.0 + + + dev.dirs + directories + 26 + + + org.eclipse.collections + eclipse-collections + 11.1.0 + + + org.eclipse.collections + eclipse-collections-api + 11.1.0 + + + org.eclipse.collections + eclipse-collections-forkjoin + 11.1.0 + + + org.eclipse.collections + eclipse-collections-testutils + 11.1.0 + + + org.eclipse.swt + org.eclipse.swt.cocoa.macosx + 4.3 + + + org.eclipse.swt + org.eclipse.swt.cocoa.macosx.x86_64 + 4.3 + + + org.eclipse.swt + org.eclipse.swt.gtk.aix.ppc + 4.3 + + + org.eclipse.swt + org.eclipse.swt.gtk.aix.ppc64 + 4.3 + + + org.eclipse.swt + org.eclipse.swt.gtk.hpux.ia64 + 4.3 + + + org.eclipse.swt + org.eclipse.swt.gtk.linux.ppc + 4.3 + + + org.eclipse.swt + org.eclipse.swt.gtk.linux.ppc64 + 4.3 + + + org.eclipse.swt + org.eclipse.swt.gtk.linux.s390 + 4.3 + + + org.eclipse.swt + org.eclipse.swt.gtk.linux.s390x + 4.3 + + + org.eclipse.swt + org.eclipse.swt.gtk.linux.x86 + 4.3 + + + org.eclipse.swt + org.eclipse.swt.gtk.linux.x86_64 + 4.3 + + + org.eclipse.swt + org.eclipse.swt.gtk.solaris.sparc + 4.3 + + + org.eclipse.swt + org.eclipse.swt.gtk.solaris.x86 + 4.3 + + + org.eclipse.swt + org.eclipse.swt.win32.win32.x86 + 4.3 + + + org.eclipse.swt + org.eclipse.swt.win32.win32.x86_64 + 4.3 + + + org.ejml + ejml-all + 0.41 + + + com.google.errorprone + error_prone_annotations + 2.25.0 + + + com.formdev + flatlaf + 3.4 + + + com.formdev + flatlaf-fonts-jetbrains-mono + 2.304 + + + com.google.api-client + google-api-client + 2.3.0 + + + com.google.api-client + google-api-client-android + 2.3.0 + + + com.google.api-client + google-api-client-appengine + 2.3.0 + + + com.google.api-client + google-api-client-gson + 2.3.0 + + + com.google.api-client + google-api-client-jackson2 + 2.3.0 + + + com.google.api-client + google-api-client-protobuf + 2.3.0 + + + com.google.api-client + google-api-client-servlet + 2.3.0 + + + javax.servlet + servlet-api + + + + + com.google.api-client + google-api-client-xml + 2.3.0 + + + com.google.api + api-common + 2.26.0 + + + com.google.api + gax + 2.43.0 + + + com.google.api + gax-grpc + 2.43.0 + + + com.google.api + gax-httpjson + 2.43.0 + + + com.google.api.grpc + proto-google-common-protos + 2.34.0 + + + com.google.api.grpc + proto-google-iam-v1 + 1.29.0 + + + com.google.auth + google-auth-library-appengine + 1.23.0 + + + com.google.auth + google-auth-library-credentials + 1.23.0 + + + com.google.auth + google-auth-library-oauth2-http + 1.23.0 + + + com.google.auto.value + auto-value + 1.10.4 + + + com.google.auto.value + auto-value-annotations + 1.10.4 + + + com.google.cloud + google-cloud-core + 2.33.0 + + + com.google.cloud + google-cloud-core-http + 2.33.0 + + + com.google.cloud + google-cloud-nio + 0.127.13 + + + com.google.cloud + google-cloud-resourcemanager + 1.38.0 + + + com.google.cloud + google-cloud-storage + 2.34.0 + + + com.google.http-client + google-http-client + 1.44.1 + + + com.google.http-client + google-http-client-apache-v2 + 1.44.1 + + + com.google.http-client + google-http-client-appengine + 1.44.1 + + + com.google.http-client + google-http-client-gson + 1.44.1 + + + com.google.http-client + google-http-client-jackson2 + 1.44.1 + + + com.google.http-client + google-http-client-xml + 1.44.1 + + + io.grpc + grpc-context + 1.62.2 + + + com.google.code.gson + gson + 2.10.1 + + + com.google.guava + guava + 33.0.0-jre + + + io.humble + humble-video-all + 0.3.0 + + + hsqldb + hsqldb + 1.8.0.10 + + + com.itextpdf + itextpdf + 5.5.13.3 + + + com.google.j2objc + j2objc-annotations + 2.8 + + + org.apache.jackrabbit + jackrabbit-webdav + 2.21.22 + + + org.slf4j + jcl-over-slf4j + + + + + com.fasterxml.jackson.core + jackson-annotations + 2.16.1 + + + com.fasterxml.jackson.core + jackson-core + 2.16.1 + + + com.fasterxml.jackson.core + jackson-databind + 2.16.1 + + + com.fasterxml.jackson.dataformat + jackson-dataformat-cbor + 2.16.1 + + + com.fasterxml.jackson.dataformat + jackson-dataformat-yaml + 2.16.1 + + + com.sun.media + jai-codec + 1.1.3 + + + javax.media + jai-core + 1.1.3 + + + gov.nist.math + jama + 1.0.3 + + + org.scijava + j3dcore + 1.6.0-scijava-2 + + + org.scijava + j3dutils + 1.6.0-scijava-2 + + + org.scijava + vecmath + 1.6.0-scijava-2 + + + org.bytedeco + javacpp + 1.5.10 + + + org.bytedeco + javacv + 1.5.10 + + + org.bytedeco + ffmpeg + 6.1.1-1.5.10 + + + org.bytedeco + hdf5 + 1.14.3-1.5.10 + + + org.bytedeco + leptonica + 1.84.1-1.5.10 + + + org.bytedeco + openblas + 0.3.26-1.5.10 + + + org.bytedeco + opencv + 4.9.0-1.5.10 + + + org.bytedeco + tesseract + 5.3.4-1.5.10 + + + org.bytedeco + ffmpeg + 6.1.1-1.5.10 + linux-x86_64 + + + org.bytedeco + hdf5 + 1.14.3-1.5.10 + linux-x86_64 + + + org.bytedeco + leptonica + 1.84.1-1.5.10 + linux-x86_64 + + + org.bytedeco + openblas + 0.3.26-1.5.10 + linux-x86_64 + + + org.bytedeco + opencv + 4.9.0-1.5.10 + linux-x86_64 + + + org.bytedeco + tesseract + 5.3.4-1.5.10 + linux-x86_64 + + + org.javassist + javassist + 3.30.2-GA + + + org.jruby.jcodings + jcodings + 1.0.58 + + + org.jdom + jdom2 + 2.0.6.1 + + + org.scijava + jep + 2.4.2 + + + org.eclipse.jetty + jetty-annotations + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-client + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-continuation + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-deploy + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-http + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-http-spi + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-io + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-jaspi + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-jmx + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-jndi + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-nosql + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-plus + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-proxy + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-rewrite + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-security + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-server + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-servlet + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-servlets + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-spring + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-start + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-util + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-util-ajax + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-webapp + 9.4.54.v20240208 + + + org.eclipse.jetty + jetty-xml + 9.4.54.v20240208 + + + org.jfree + jfreechart + 1.5.4 + + + org.jfree + jfreesvg + 3.4.3 + + + org.jgrapht + jgrapht-core + 1.4.0 + + + org.jgrapht + jgrapht-demo + 1.4.0 + + + org.jgrapht + jgrapht-ext + 1.4.0 + + + org.jgrapht + jgrapht-guava + 1.4.0 + + + org.jgrapht + jgrapht-io + 1.4.0 + + + org.jgrapht + jgrapht-opt + 1.4.0 + + + it.unimi.dsi + fastutil + + + + + com.github.vlsi.mxgraph + jgraphx + 4.2.2 + + + cisd + jhdf5 + 19.04.1 + + + org.jheaps + jheaps + 0.14 + + + jline + jline + 2.14.6 + + + org.jline + jline-builtins + 3.25.1 + + + org.jline + jline-console + 3.25.1 + + + org.jline + jline-reader + 3.25.1 + + + org.jline + jline-remote-ssh + 3.25.1 + + + org.jline + jline-remote-telnet + 3.25.1 + + + org.jline + jline-style + 3.25.1 + + + org.jline + jline-terminal + 3.25.1 + + + org.jline + jline-terminal-jna + 3.25.1 + + + net.java.dev.jna + jna + 5.14.0 + + + net.java.dev.jna + jna-platform + 5.14.0 + + + com.github.jnr + jffi + 1.3.13 + + + com.github.jnr + jffi + 1.3.13 + native + + + com.github.jnr + jnr-constants + 0.10.4 + + + com.github.jnr + jnr-ffi + 2.2.16 + + + com.github.jnr + jnr-posix + 3.1.19 + + + joda-time + joda-time + 2.12.7 + + + org.jocl + jocl + 2.0.5 + + + org.jogamp.gluegen + gluegen + 2.5.0 + + + org.jogamp.gluegen + gluegen-rt + 2.5.0 + + + org.jogamp.joal + joal + 2.5.0 + + + org.jogamp.jocl + jocl + 2.5.0 + + + org.jogamp.jogl + jogl-all + 2.5.0 + + + org.jogamp.jogl + jogl-all-noawt + 2.5.0 + + + org.jogamp.gluegen + gluegen-rt + 2.5.0 + natives-android-aarch64 + + + org.jogamp.gluegen + gluegen-rt + 2.5.0 + natives-linux-aarch64 + + + org.jogamp.gluegen + gluegen-rt + 2.5.0 + natives-linux-amd64 + + + org.jogamp.gluegen + gluegen-rt + 2.5.0 + natives-linux-armv6hf + + + org.jogamp.gluegen + gluegen-rt + 2.5.0 + natives-macosx-universal + + + org.jogamp.gluegen + gluegen-rt + 2.5.0 + natives-windows-amd64 + + + org.jogamp.joal + joal + 2.5.0 + natives-android-aarch64 + + + org.jogamp.joal + joal + 2.5.0 + natives-linux-aarch64 + + + org.jogamp.joal + joal + 2.5.0 + natives-linux-amd64 + + + org.jogamp.joal + joal + 2.5.0 + natives-linux-armv6hf + + + org.jogamp.joal + joal + 2.5.0 + natives-macosx-universal + + + org.jogamp.joal + joal + 2.5.0 + natives-windows-amd64 + + + org.jogamp.jocl + jocl + 2.5.0 + natives-android-aarch64 + + + org.jogamp.jocl + jocl + 2.5.0 + natives-linux-aarch64 + + + org.jogamp.jocl + jocl + 2.5.0 + natives-linux-amd64 + + + org.jogamp.jocl + jocl + 2.5.0 + natives-linux-armv6hf + + + org.jogamp.jocl + jocl + 2.5.0 + natives-macosx-universal + + + org.jogamp.jocl + jocl + 2.5.0 + natives-windows-amd64 + + + org.jogamp.jogl + jogl-all + 2.5.0 + natives-android-aarch64 + + + org.jogamp.jogl + jogl-all + 2.5.0 + natives-linux-aarch64 + + + org.jogamp.jogl + jogl-all + 2.5.0 + natives-linux-amd64 + + + org.jogamp.jogl + jogl-all + 2.5.0 + natives-linux-armv6hf + + + org.jogamp.jogl + jogl-all + 2.5.0 + natives-macosx-universal + + + org.jogamp.jogl + jogl-all + 2.5.0 + natives-windows-amd64 + + + org.jogamp.jogl + jogl-all-noawt + 2.5.0 + natives-android-aarch64 + + + org.jogamp.jogl + jogl-all-noawt + 2.5.0 + natives-linux-aarch64 + + + org.jogamp.jogl + jogl-all-noawt + 2.5.0 + natives-linux-amd64 + + + org.jogamp.jogl + jogl-all-noawt + 2.5.0 + natives-linux-armv6hf + + + org.jogamp.jogl + jogl-all-noawt + 2.5.0 + natives-macosx-universal + + + org.jogamp.jogl + jogl-all-noawt + 2.5.0 + natives-windows-amd64 + + + org.jogamp.java3d + java3d-core + 1.7.2 + + + org.jogamp.java3d + java3d-utils + 1.7.2 + + + org.jogamp.java3d + vecmath + 1.7.2 + + + org.joml + joml + 1.10.5 + + + org.jruby.joni + joni + 2.2.1 + + + org.jpedal + jpedalSTD + 2.80b11 + + + org.smurn + jply + 0.2.1 + + + com.jcraft + jsch + 0.1.55 + + + org.json + json + 20240205 + + + org.python + jython-slim + 2.7.3 + + + com.jcraft + jzlib + 1.1.3 + + + org.jzy3d + jzy3d-core + 2.2.1 + + + org.jzy3d + jzy3d-core-awt + 2.2.1 + + + org.jzy3d + jzy3d-emul-gl-awt + 2.2.1 + + + org.jzy3d + jzy3d-jGL-awt + 2.2.1 + + + org.jzy3d + jzy3d-jdt-core + 2.2.1 + + + org.jzy3d + jzy3d-native-jogl-awt + 2.2.1 + + + org.jogamp.gluegen + gluegen-rt-natives-macosx-universal + + + org.jogamp.gluegen + gluegen-rt-natives-linux-aarch64 + + + org.jogamp.gluegen + gluegen-rt-natives-linux-amd64 + + + org.jogamp.gluegen + gluegen-rt-natives-linux-armv6hf + + + org.jogamp.gluegen + gluegen-rt-natives-linux-i586 + + + org.jogamp.gluegen + gluegen-rt-natives-macosx-universal + + + org.jogamp.gluegen + gluegen-rt-natives-windows-amd64 + + + org.jogamp.gluegen + gluegen-rt-natives-windows-i586 + + + org.jogamp.jogl + jogl-all-natives-linux-aarch64 + + + org.jogamp.jogl + jogl-all-natives-linux-amd64 + + + org.jogamp.jogl + jogl-all-natives-linux-armv6hf + + + org.jogamp.jogl + jogl-all-natives-linux-i586 + + + org.jogamp.jogl + jogl-all-natives-macosx-universal + + + org.jogamp.jogl + jogl-all-natives-windows-amd64 + + + org.jogamp.jogl + jogl-all-natives-windows-i586 + + + + + org.jzy3d + jzy3d-native-jogl-core + 2.2.1 + + + org.jogamp.gluegen + gluegen-rt-natives-macosx-universal + + + org.jogamp.gluegen + gluegen-rt-natives-linux-aarch64 + + + org.jogamp.gluegen + gluegen-rt-natives-linux-amd64 + + + org.jogamp.gluegen + gluegen-rt-natives-linux-armv6hf + + + org.jogamp.gluegen + gluegen-rt-natives-linux-i586 + + + org.jogamp.gluegen + gluegen-rt-natives-macosx-universal + + + org.jogamp.gluegen + gluegen-rt-natives-windows-amd64 + + + org.jogamp.gluegen + gluegen-rt-natives-windows-i586 + + + org.jogamp.jogl + jogl-all-natives-linux-aarch64 + + + org.jogamp.jogl + jogl-all-natives-linux-amd64 + + + org.jogamp.jogl + jogl-all-natives-linux-armv6hf + + + org.jogamp.jogl + jogl-all-natives-linux-i586 + + + org.jogamp.jogl + jogl-all-natives-macosx-universal + + + org.jogamp.jogl + jogl-all-natives-windows-amd64 + + + org.jogamp.jogl + jogl-all-natives-windows-i586 + + + + + org.jzy3d + jzy3d-native-jogl-swing + 2.2.1 + + + com.miglayout + miglayout + + + + + org.jzy3d + jzy3d-tester + 2.2.1 + + + org.jetbrains.kotlin + kotlin-compiler-embeddable + 1.9.22 + + + org.jetbrains.kotlin + kotlin-daemon-embeddable + 1.9.22 + + + org.jetbrains.kotlin + kotlin-reflect + 1.9.22 + + + org.jetbrains.kotlin + kotlin-script-runtime + 1.9.22 + + + org.jetbrains.kotlin + kotlin-scripting-common + 1.9.22 + + + org.jetbrains.kotlin + kotlin-scripting-compiler-embeddable + 1.9.22 + + + org.jetbrains.kotlin + kotlin-scripting-jsr223 + 1.9.22 + + + org.jetbrains.kotlin + kotlin-scripting-jvm + 1.9.22 + + + org.jetbrains.kotlin + kotlin-stdlib + 1.9.22 + + + org.jetbrains.kotlin + kotlin-stdlib-common + 1.9.22 + + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + 1.9.22 + + + org.jetbrains.kotlinx + kotlinx-coroutines-core + 1.8.0 + + + org.jetbrains.kotlinx + kotlinx-coroutines-core-jvm + 1.8.0 + + + com.esotericsoftware + kryo + 5.6.0 + + + com.esotericsoftware + minlog + 1.3.1 + + + com.esotericsoftware + reflectasm + 1.11.9 + + + ch.qos.logback + logback-classic + 1.2.12 + + + javax.activation + activation + + + + + ch.qos.logback + logback-core + 1.2.12 + + + org.lz4 + lz4-java + 1.8.0 + + + org.mapdb + mapdb + 3.1.0 + + + net.jpountz.lz4 + lz4 + + + + + com.miglayout + miglayout-core + 5.3 + + + com.miglayout + miglayout-swing + 5.3 + + + com.miglayout + miglayout-swt + 5.3 + + + edu.mines + mines-jtk + 20151125 + + + org.objenesis + objenesis + 3.3 + + + com.squareup.okhttp3 + okhttp + 4.12.0 + + + com.squareup.okio + okio + 3.8.0 + + + org.ojalgo + ojalgo + 45.1.1 + + + com.opencsv + opencsv + 5.9 + + + info.picocli + picocli + 4.7.5 + + + org.postgresql + postgresql + 42.7.2 + + + com.google.protobuf + protobuf-java + 3.23.0 + + + com.google.protobuf + protobuf-java-util + 3.23.0 + + + com.google.protobuf + protobuf-kotlin + 3.23.0 + + + com.google.re2j + re2j + 1.7 + + + ch.qos.reload4j + reload4j + 1.2.25 + + + com.fifesoft + rsyntaxtextarea + 3.4.0 + + + com.fifesoft + autocomplete + 3.3.1 + + + com.fifesoft + languagesupport + 3.3.0 + + + org.slf4j + slf4j-api + 1.7.36 + + + org.slf4j + slf4j-ext + 1.7.36 + + + org.slf4j + slf4j-jcl + 1.7.36 + + + org.slf4j + slf4j-jdk14 + 1.7.36 + + + org.slf4j + slf4j-nop + 1.7.36 + + + org.slf4j + slf4j-simple + 1.7.36 + + + org.slf4j + jcl-over-slf4j + 1.7.36 + + + org.yaml + snakeyaml + 2.2 + + + org.snakeyaml + snakeyaml-engine + 2.7 + + + org.springframework + spring-aop + 3.2.9.RELEASE + + + org.springframework + spring-beans + 3.2.9.RELEASE + + + org.springframework + spring-core + 3.2.9.RELEASE + + + org.tensorflow + tensorflow + 1.12.0 + + + org.tensorflow + libtensorflow + 1.12.0 + + + org.tensorflow + libtensorflow_jni + 1.12.0 + + + org.tensorflow + libtensorflow_jni_gpu + 1.12.0 + + + org.tensorflow + proto + 1.12.0 + + + org.threeten + threetenbp + 1.6.8 + + + net.sf.trove4j + trove4j + 3.0.3 + + + nz.ac.waikato.cms.weka + weka-dev + 3.9.6 + + + com.github.fommil.netlib + all + + + com.github.vbmacher + java-cup-runtime + + + com.googlecode.netlib-java + netlib-java + + + com.sun.activation + jakarta.activation + + + nz.ac.waikato.cms.weka.thirdparty + java-cup-11b + + + nz.ac.waikato.cms.weka.thirdparty + java-cup-11b-runtime + + + net.sourceforge.f2j + arpack_combined_all + + + + + org.tukaani + xz + 1.9 + + + com.github.luben + zstd-jni + 1.5.5-11 + + + org.scijava + scijava-common + 2.98.0 + tests + test + + + net.imagej + imagej-legacy + 1.2.1 + tests + test + + + net.imagej + imagej-ops + 2.0.0 + tests + test + + + net.imagej + imagej-updater + 1.0.1 + tests + test + + + net.imglib2 + imglib2 + 6.3.0 + tests + test + + + org.janelia.saalfeldlab + n5 + 3.1.3 + tests + test + + + junit + junit + 4.13.2 + test + + + org.junit.jupiter + junit-jupiter-api + 5.10.2 + test + + + org.junit.jupiter + junit-jupiter-engine + 5.10.2 + test + + + org.junit.jupiter + junit-jupiter-migrationsupport + 5.10.2 + test + + + org.junit.jupiter + junit-jupiter-params + 5.10.2 + test + + + org.junit.vintage + junit-vintage-engine + 5.10.2 + test + + + org.scijava + junit-benchmarks + 0.7.4-scijava + test + + + org.jmockit + jmockit + 1.49 + test + + + org.mockito + mockito-core + 2.19.0 + test + + + org.openjdk.jmh + jmh-core + 1.37 + test + + + org.openjdk.jmh + jmh-generator-annprocess + 1.37 + test + + + + + + + false + + central + Central Repository + https://repo.maven.apache.org/maven2 + + + + + + never + + + false + + central + Central Repository + https://repo.maven.apache.org/maven2 + + + + /home/elect/IdeaProjects/pom-scijava/src/main/java + /home/elect/IdeaProjects/pom-scijava/src/main/scripts + /home/elect/IdeaProjects/pom-scijava/src/test/java + /home/elect/IdeaProjects/pom-scijava/target/classes + /home/elect/IdeaProjects/pom-scijava/target/test-classes + + + org.apache.maven.wagon + wagon-webdav-jackrabbit + 1.0 + + + install + + + /home/elect/IdeaProjects/pom-scijava/src/main/resources + + + + + /home/elect/IdeaProjects/pom-scijava/src/test/resources + + + /home/elect/IdeaProjects/pom-scijava/target + pom-scijava-38.0.0-SNAPSHOT + + + + maven-antrun-plugin + 3.1.0 + + + maven-assembly-plugin + 3.6.0 + + + maven-clean-plugin + 3.3.2 + + + maven-compiler-plugin + 3.8.1 + + + maven-dependency-plugin + 3.6.1 + + + maven-deploy-plugin + 3.1.1 + + + maven-enforcer-plugin + 3.4.1 + + + org.codehaus.mojo + extra-enforcer-rules + 1.7.0 + compile + + + org.scijava + scijava-maven-plugin + 3.0.0 + compile + + + + + maven-failsafe-plugin + 3.2.5 + + + + integration-test + verify + + + + + + maven-gpg-plugin + 3.1.0 + + + sign-artifacts + verify + + sign + + + true + + + + + true + + + + maven-help-plugin + 3.4.0 + + + maven-install-plugin + 3.1.1 + + + maven-jar-plugin + 3.3.0 + + + + test-jar + + + + + true + true + true + + ${package-guess} + + + + ${buildNumber} + 2024-03-03T16:51:20+0000 + ${package-guess} + + + true + + + + + + + true + true + true + + ${package-guess} + + + + ${buildNumber} + 2024-03-03T16:51:20+0000 + ${package-guess} + + + true + + + + maven-javadoc-plugin + 3.6.3 + + 1024m + + https://javadoc.scijava.org/Java8/ + https://javadoc.scijava.org/JavaFX8/ + https://javadoc.scijava.org/SciJava/ + https://javadoc.scijava.org/Alida/ + https://javadoc.scijava.org/Bio-Formats/ + https://javadoc.scijava.org/FLIMLib/ + https://javadoc.scijava.org/Fiji/ + https://javadoc.scijava.org/Icy/ + https://javadoc.scijava.org/ImageJ/ + https://javadoc.scijava.org/ImageJ1/ + https://javadoc.scijava.org/ImgLib2/ + https://javadoc.scijava.org/Java3D/ + https://javadoc.scijava.org/KNIME/ + https://javadoc.scijava.org/LOCI/ + https://javadoc.scijava.org/MiToBo/ + https://javadoc.scijava.org/Micro-Manager-Core/ + https://javadoc.scijava.org/Micro-Manager-Studio/ + https://javadoc.scijava.org/MorphoLibJ/ + https://javadoc.scijava.org/OMERO/ + https://javadoc.scijava.org/SCIFIO/ + https://javadoc.scijava.org/Apache-Commons-IO/ + https://javadoc.scijava.org/Apache-Commons-Lang/ + https://javadoc.scijava.org/Apache-Commons-Math/ + https://javadoc.scijava.org/Apache-Commons-Text/ + https://javadoc.scijava.org/BoneJ/ + https://javadoc.scijava.org/Eclipse/ + https://javadoc.scijava.org/Guava/ + https://javadoc.scijava.org/JAMA/ + https://javadoc.scijava.org/JFreeChart/ + https://javadoc.scijava.org/JGraphT/ + https://javadoc.scijava.org/JHotDraw/ + https://javadoc.scijava.org/JOML/ + https://javadoc.scijava.org/Javassist/ + https://javadoc.scijava.org/MigLayout/ + https://javadoc.scijava.org/NetBeans/ + https://javadoc.scijava.org/Pivot/ + https://javadoc.scijava.org/VisAD/ + https://javadoc.scijava.org/Weka/ + https://javadoc.scijava.org/ojAlgo/ + + + + + maven-plugin-plugin + 3.11.0 + + + maven-project-info-reports-plugin + 3.5.0 + + + maven-release-plugin + 3.0.1 + + + maven-resources-plugin + 3.3.1 + + + maven-shade-plugin + 3.5.2 + + + maven-site-plugin + 3.12.1 + + + maven-source-plugin + 3.3.0 + + + attach-sources + none + + + attach-sources-jar + + jar + + + + + + maven-surefire-plugin + 3.2.5 + + @{argLine} -Xms512m -Xmx512m -Dapple.awt.UIElement=true + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.5.0 + + + sanitize-version + + regex-property + + + sanitizedVersion + 38.0.0-SNAPSHOT + ^([0-9]+)\.([0-9]+)\.([0-9]+).*$ + $1.$2.$3 + false + + + + guess-package + + regex-property + + + package-guess + org.scijava.pom-scijava + [^a-z0-9_.]+ + _ + false + + + + + + org.codehaus.mojo + buildnumber-maven-plugin + 3.2.0 + + + validate + + create + + + true + UNKNOWN + + + + + + net.java.dev.jna + platform + 3.5.2 + compile + + + + true + UNKNOWN + + + + org.codehaus.mojo + cobertura-maven-plugin + 2.7 + + + html + xml + + + + + org.codehaus.mojo + exec-maven-plugin + 3.2.0 + + + org.codehaus.mojo + license-maven-plugin + 2.4.0 + + false + true + true + + java + properties + java + + + + + org.codehaus.mojo + tidy-maven-plugin + 1.2.0 + + + org.codehaus.mojo + versions-maven-plugin + 2.16.2 + + + org.scijava + scijava-maven-plugin + 3.0.0 + + + set-rootdir + validate + + set-rootdir + + + + + + com.zenjava + javafx-maven-plugin + 8.8.3 + + SciJava Parent POM + SciJava Parent POM + SciJava Parent POM.jar + + ${sanitizedVersion} + true + + + + net.revelc.code + impsort-maven-plugin + 1.9.0 + + + none + + java.,javax.,com.,net.,org. + java,* + true + + + + + java.,javax.,com.,net.,org. + java,* + true + + + + net.revelc.code.formatter + formatter-maven-plugin + 2.23.0 + + + org.scijava + scijava-coding-style + 2.1.1 + compile + + + + eclipse-formatter-settings/scijava-coding-style.xml + + + + org.fusesource.mvnplugins + maven-graph-plugin + 1.45 + + provided,runtime,system,test + true + + /home/elect/IdeaProjects/pom-scijava/target/dependency-graph.dot + + + + org.honton.chas + exists-maven-plugin + 0.12.0 + + + + remote + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.11 + + + jacoco-initialize + + prepare-agent + + + + jacoco-site + package + + report + + + + + + org.revapi + revapi-maven-plugin + 0.15.0 + + + org.revapi + revapi-java + 0.28.1 + + + + + org.sonarsource.scanner.maven + sonar-maven-plugin + 3.10.0.2594 + + + + + + maven-enforcer-plugin + 3.4.1 + + + enforce-rules + + enforce + + + + + 3.6.3 + + + Plugins need to be versioned! + + + [1.8.0-101,) + + + No Duplicate Classes Allowed! +- For duplicate transitive dependencies, add dependency exclusions. +- For duplications between direct dependencies, resolve or add + ignored classes to this rule's configuration. + true + com.google.inject.*,javax.xml.namespace.QName,jnr.ffi.*,org.apache.hadoop.yarn.*.package-info,org.apache.spark.unused.UnusedStubClass,org.eclipse.aether.*,org.hibernate.stat.ConcurrentStatisticsImpl,org.junit.runner.Runner,org.jzy3d.plot3d.pipelines.* + + + founder,lead,developer,debugger,reviewer,support,maintainer + + + founder,lead,developer,debugger,reviewer,support,maintainer + + + 8 + + com.headius:invokebinder + com.sun:tools + + + module-info + + + test + + + + + name + description + url + inceptionYear + organization + licenses + developers + contributors + mailingLists + scm + issueManagement + ciManagement + properties//license.licenseName + properties//license.copyrightOwners + + + + org.scijava,net.imagej,net.imglib2,io.scif,sc.fiji + + + + + + + + org.codehaus.mojo + extra-enforcer-rules + 1.7.0 + compile + + + org.scijava + scijava-maven-plugin + 3.0.0 + compile + + + + + + 3.6.3 + + + Plugins need to be versioned! + + + [1.8.0-101,) + + + No Duplicate Classes Allowed! +- For duplicate transitive dependencies, add dependency exclusions. +- For duplications between direct dependencies, resolve or add + ignored classes to this rule's configuration. + true + com.google.inject.*,javax.xml.namespace.QName,jnr.ffi.*,org.apache.hadoop.yarn.*.package-info,org.apache.spark.unused.UnusedStubClass,org.eclipse.aether.*,org.hibernate.stat.ConcurrentStatisticsImpl,org.junit.runner.Runner,org.jzy3d.plot3d.pipelines.* + + + founder,lead,developer,debugger,reviewer,support,maintainer + + + founder,lead,developer,debugger,reviewer,support,maintainer + + + 8 + + com.headius:invokebinder + com.sun:tools + + + module-info + + + test + + + + + name + description + url + inceptionYear + organization + licenses + developers + contributors + mailingLists + scm + issueManagement + ciManagement + properties//license.licenseName + properties//license.copyrightOwners + + + + org.scijava,net.imagej,net.imglib2,io.scif,sc.fiji + + + + + + maven-failsafe-plugin + 3.2.5 + + + + integration-test + verify + + + + + + maven-source-plugin + 3.3.0 + + + attach-sources + none + + + attach-sources-jar + + jar + + + + + + maven-surefire-plugin + 3.2.5 + + @{argLine} -Xms512m -Xmx512m -Dapple.awt.UIElement=true + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.5.0 + + + sanitize-version + + regex-property + + + sanitizedVersion + 38.0.0-SNAPSHOT + ^([0-9]+)\.([0-9]+)\.([0-9]+).*$ + $1.$2.$3 + false + + + + guess-package + + regex-property + + + package-guess + org.scijava.pom-scijava + [^a-z0-9_.]+ + _ + false + + + + + + org.codehaus.mojo + buildnumber-maven-plugin + 3.2.0 + + + validate + + create + + + true + UNKNOWN + + + + + + net.java.dev.jna + platform + 3.5.2 + compile + + + + true + UNKNOWN + + + + org.scijava + scijava-maven-plugin + 3.0.0 + + + set-rootdir + validate + + set-rootdir + + + older + + + + populate-app + install + + populate-app + + + older + + + + + older + + + + com.zenjava + javafx-maven-plugin + 8.8.3 + + SciJava Parent POM + SciJava Parent POM + SciJava Parent POM.jar + + ${sanitizedVersion} + true + + + + net.revelc.code + impsort-maven-plugin + 1.9.0 + + + none + + java.,javax.,com.,net.,org. + java,* + true + + + + + java.,javax.,com.,net.,org. + java,* + true + + + + net.revelc.code.formatter + formatter-maven-plugin + 2.23.0 + + + org.scijava + scijava-coding-style + 2.1.1 + compile + + + + eclipse-formatter-settings/scijava-coding-style.xml + + + + org.fusesource.mvnplugins + maven-graph-plugin + 1.45 + + provided,runtime,system,test + true + + /home/elect/IdeaProjects/pom-scijava/target/dependency-graph.dot + + + + org.jacoco + jacoco-maven-plugin + 0.8.11 + + + jacoco-initialize + + prepare-agent + + + + jacoco-site + package + + report + + + + + + maven-javadoc-plugin + 3.6.3 + + /usr/lib/jvm/jdk-19/bin/javadoc + 1024m + + https://javadoc.scijava.org/Java8/ + https://javadoc.scijava.org/JavaFX8/ + https://javadoc.scijava.org/SciJava/ + https://javadoc.scijava.org/Alida/ + https://javadoc.scijava.org/Bio-Formats/ + https://javadoc.scijava.org/FLIMLib/ + https://javadoc.scijava.org/Fiji/ + https://javadoc.scijava.org/Icy/ + https://javadoc.scijava.org/ImageJ/ + https://javadoc.scijava.org/ImageJ1/ + https://javadoc.scijava.org/ImgLib2/ + https://javadoc.scijava.org/Java3D/ + https://javadoc.scijava.org/KNIME/ + https://javadoc.scijava.org/LOCI/ + https://javadoc.scijava.org/MiToBo/ + https://javadoc.scijava.org/Micro-Manager-Core/ + https://javadoc.scijava.org/Micro-Manager-Studio/ + https://javadoc.scijava.org/MorphoLibJ/ + https://javadoc.scijava.org/OMERO/ + https://javadoc.scijava.org/SCIFIO/ + https://javadoc.scijava.org/Apache-Commons-IO/ + https://javadoc.scijava.org/Apache-Commons-Lang/ + https://javadoc.scijava.org/Apache-Commons-Math/ + https://javadoc.scijava.org/Apache-Commons-Text/ + https://javadoc.scijava.org/BoneJ/ + https://javadoc.scijava.org/Eclipse/ + https://javadoc.scijava.org/Guava/ + https://javadoc.scijava.org/JAMA/ + https://javadoc.scijava.org/JFreeChart/ + https://javadoc.scijava.org/JGraphT/ + https://javadoc.scijava.org/JHotDraw/ + https://javadoc.scijava.org/JOML/ + https://javadoc.scijava.org/Javassist/ + https://javadoc.scijava.org/MigLayout/ + https://javadoc.scijava.org/NetBeans/ + https://javadoc.scijava.org/Pivot/ + https://javadoc.scijava.org/VisAD/ + https://javadoc.scijava.org/Weka/ + https://javadoc.scijava.org/ojAlgo/ + + + + + maven-clean-plugin + 3.3.2 + + + default-clean + clean + + clean + + + + + + maven-install-plugin + 3.1.1 + + + default-install + install + + install + + + + + + maven-deploy-plugin + 3.1.1 + + + default-deploy + deploy + + deploy + + + + + + maven-site-plugin + 3.12.1 + + + default-site + site + + site + + + /home/elect/IdeaProjects/pom-scijava/target/site + + + org.apache.maven.plugins + maven-javadoc-plugin + + + org.apache.maven.plugins + maven-project-info-reports-plugin + + + + + + default-deploy + site-deploy + + deploy + + + /home/elect/IdeaProjects/pom-scijava/target/site + + + org.apache.maven.plugins + maven-javadoc-plugin + + + org.apache.maven.plugins + maven-project-info-reports-plugin + + + + + + + /home/elect/IdeaProjects/pom-scijava/target/site + + + org.apache.maven.plugins + maven-javadoc-plugin + + + org.apache.maven.plugins + maven-project-info-reports-plugin + + + + + + + + /home/elect/IdeaProjects/pom-scijava/target/site + + + maven-javadoc-plugin + + + + diff --git a/gradle/catalog/settings.gradle.kts b/gradle/catalog/settings.gradle.kts new file mode 100644 index 0000000..8d99556 --- /dev/null +++ b/gradle/catalog/settings.gradle.kts @@ -0,0 +1,12 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * + * Detailed information about configuring a multi-project build in Gradle can be found + * in the user manual at https://docs.gradle.org/7.2/userguide/multi_project_builds.html + */ + +rootProject.name = "gradle-catalog" + +enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") \ No newline at end of file diff --git a/gradle/platform/build.gradle.kts b/gradle/platform/build.gradle.kts index f29fa93..71e2a05 100644 --- a/gradle/platform/build.gradle.kts +++ b/gradle/platform/build.gradle.kts @@ -1,21 +1,25 @@ import groovy.xml.XmlSlurper import groovy.xml.slurpersupport.GPathResult import groovy.xml.slurpersupport.NodeChild +import org.gradle.internal.impldep.org.junit.experimental.categories.Categories.CategoryFilter.exclude plugins { `java-platform` - `maven-publish` + publish } -tasks { - register("eff.xml") { - commandLine("bash", "-c", "mvn -B -f \"../../pom.xml\" help:effective-pom | grep -A9999999 '^' > eff.xml") - } -} +group = "org.scijava" +version = "0.1" //(effXml / "version").toString() operator fun GPathResult.div(child: String) = children().find { (it!! as NodeChild).name() == child } as GPathResult -val effXml = XmlSlurper().parse("platform/eff.xml") +val effXml = XmlSlurper().parse(projectDir.resolve("eff.xml")) + +javaPlatform { + allowDependencies() +} + +val runtimeDeps = listOf("xalan:serializer", "xalan:xalan") dependencies { @@ -26,112 +30,42 @@ dependencies { val g = node / "groupId" val a = node / "artifactId" val v = node / "version" - api("$g:$a:$v") + if ("$g:$a" in runtimeDeps) + runtime("$g:$a:$v") + else + api("$g:$a:$v") // println("$g:$a:$v") } } + // versionCatalogs.forEach { versionCatalog -> + // println("catalog ${versionCatalog.name}") + // versionCatalog.libraryAliases.forEach { + // println(versionCatalog.findLibrary(it).get().get()) + // } + // } + + api(platform("com.fasterxml.jackson:jackson-bom:" + libs.com.fasterxml.jackson.core.jacksonCore.get().version)) + // api(platform("com.google.api-client:google-api-client-bom:" + libs.com.google.api.client.googleApiClient.get().version)) + // api(platform("com.google.api:gax-bom:" + libs.com.google.api.gax.get().version)) + // api(platform("com.google.api:gapic-generator-java-bom:" + libs.com.google.api.grpc.protoGoogleCommonProtos.get().version)) + // api(platform("com.google.auth:google-auth-library-bom:" + libs.com.google.auth.googleAuthLibraryAppengine.get().version)) + // // no google auto-value bom + // api(platform("com.google.cloud:google-cloud-core-bom:" + libs.com.google.cloud.googleCloudCore.get().version)) } -publishing { - publications { - repositories { - maven("to fill") - } - create("sciJavaPlatform") { - groupId = "org.scijava" - artifactId = "pom-scijava" - version = (effXml / "version").toString() - from(components["javaPlatform"]) - pom { - name = "SciJava Parent POM" - description = "This POM provides a parent from which participating projects can declare their build configurations. It ensures that projects all use a compatible build environment, including Java version, as well as versions of dependencies and plugins." - url = "https://scijava.org/" - inceptionYear = "2011" - organization { - name = "SciJava" - url = "https://scijava.org/" - } - licenses { - license { - name = "Unlicense" - url = "https://unlicense.org/" - distribution = "repo" - } - } - developers { - developer { - id = "ctrueden" - name = "Curtis Rueden" - url = "https://imagej.net/people/ctrueden" - roles.addAll("founder", "lead", "developer", "debugger", "reviewer", "support", "maintainer") - } - } - contributors { - operator fun String.invoke(id: String) = contributor { - name = this@invoke - url = "https://imagej.net/people/$id" - properties = mapOf("id" to id) - } - "Mark Hiner"("hinerm") - "Johannes Schindelin"("dscho") - "Sébastien Besson"("sbesson") - "John Bogovic"("bogovicj") - "Nicolas Chiaruttini"("NicoKiaru") - "Barry DeZonia"("bdezonia") - "Richard Domander"("rimadoma") - "Karl Duderstadt"("karlduderstadt") - "Jan Eglinger"("imagejan") - "Gabriel Einsdorf"("gab1one") - "Tiago Ferreira"("tferr") - contributor { - name = "David Gault" - properties = mapOf("id" to "dgault") - } - "Ulrik Günther"("skalarproduktraum") - "Philipp Hanslovsky"("hanslovsky") - "Stefan Helfrich"("stelfrich") - "Cameron Lloyd"("camlloyd") - "Hadrien Mary"("hadim") - "Tobias Pietzsch"("tpietzsch") - "Stephan Preibisch"("StephanPreibisch") - "Stephan Saalfeld"("axtimwalde") - "Deborah Schmidt"("frauzufall") - "Lorenzo Scianatico"("LoreScianatico") - "Jean - Yves Tinevez"("tinevez") - "Christian Tischer"("tischi") - "Gabriella Turek"("turekg") - contributor { - name = "Giuseppe Barbieri" - properties = mapOf("id" to "elect") - } - } - mailingLists { - mailingList { - name = "SciJava" - subscribe = "https://groups.google.com/group/scijava" - unsubscribe = subscribe - post = "scijava@googlegroups.com" - archive = "https://groups.google.com/group/scijava" - } - } - scm { - connection = "scm:git:https://github.com/scijava/pom-scijava" - developerConnection = "scm:git:git@github.com:scijava/pom-scijava" - tag = "HEAD" - url = "https://github.com/scijava/pom-scijava" - } - issueManagement { - system = "GitHub Issues" - url = "https://github.com/scijava/pom-scijava/issues" - } - ciManagement { - system = "GitHub Actions" - url = "https: //github.com/scijava/pom-scijava/actions" - } - } - } - } -} +tasks { + // named("generatePomFileForSciJavaPlatformPublication") { + // pom.withXml { + // asNode().appendNode("parent").apply { + // appendNode("groupId", group) + // appendNode("artifactId", project.name) + // appendNode("version", version) + // appendNode("relativePath") + // } + // println(asNode().name()) + // } + // } +} \ No newline at end of file diff --git a/gradle/platform/buildSrc/build.gradle.kts b/gradle/platform/buildSrc/build.gradle.kts new file mode 100644 index 0000000..790460f --- /dev/null +++ b/gradle/platform/buildSrc/build.gradle.kts @@ -0,0 +1,13 @@ + +plugins { + `kotlin-dsl` +} + +repositories { + mavenCentral() +// gradlePluginPortal() +} + +//dependencies { +// implementation("org.jetbrains.dokka:dokka-gradle-plugin:1.9.10") +//} \ No newline at end of file diff --git a/gradle/platform/buildSrc/settings.gradle.kts b/gradle/platform/buildSrc/settings.gradle.kts new file mode 100644 index 0000000..8ae9b3a --- /dev/null +++ b/gradle/platform/buildSrc/settings.gradle.kts @@ -0,0 +1,4 @@ +// This is an empty umbrella build including all the component builds. +// This build is not necessarily needed. The component builds work independently. + +rootProject.name = "buildSrc" \ No newline at end of file diff --git a/gradle/platform/buildSrc/src/main/kotlin/publish.gradle.kts b/gradle/platform/buildSrc/src/main/kotlin/publish.gradle.kts new file mode 100644 index 0000000..8dd418e --- /dev/null +++ b/gradle/platform/buildSrc/src/main/kotlin/publish.gradle.kts @@ -0,0 +1,235 @@ +import groovy.util.Node +import groovy.util.NodeList +import java.util.* + +plugins { + `maven-publish` +} + +publishing { + publications { + repositories { + maven { + name = "sciJava" + credentials(PasswordCredentials::class) + url = uri("https://maven.scijava.org/content/repositories/releases") + } + } + create("sciJavaPlatform") { + from(components["javaPlatform"]) + /*pom.withXml { + val nodes = Stack() + + nodes += asNode() + fun parent() = nodes.peek() + // Definition of `groupId` is redundant, because it's inherited from the parent + run { + val list = parent().children() as NodeList + require(list.removeIf { (it as Node).name().toString().substringAfter("{http://maven.apache.org/POM/4.0.0}") == "groupId" }) + } + + var i = 1 // 4.0.0 is first + + operator fun String.invoke(vararg values: Any?) { + for (value in values) { + val node = when (value) { + null -> parent().appendNode(this) + else -> parent().appendNode(this, value) + } + if (nodes.size == 1) { // only at `project` level + val list = parent().value() as NodeList + list.removeLast() + list.add(i++, node) + } + } + } + + // operator fun String.compareTo(value: Any): Int { + // return 0 + // } + + operator fun String.invoke(block: () -> Unit) { + val node = parent() + nodes += node.appendNode(this) + block() + if (nodes.size == 2) { // only as `project` child + val list = node.value() as NodeList + list.removeLast() + list.add(i++, parent()) + } + nodes.pop() + } + + // fun comment(text: String) { + // val builder = asString() + // builder.insert(builder.lastIndex - "".length, text.trimMargin()) + // } + + "parent" { + "groupId"(group) + "artifactId"(project.name) + "version"(version) + "relativePath"() + } + // + // + // + i += 3 + "name"("SciJava Parent POM") + "description"("This POM provides a parent from which participating projects can declare their build configurations. It ensures that projects all use a compatible build environment, including Java version, as well as versions of dependencies and plugins.") + "url"("https://scijava.org/") + "inceptionYear"("2011") + "organization" { + "name"("SciJava") + "url"("https://scijava.org/") + } + "licenses" { + "license" { + "name"("Unlicense") + "url"("https://unlicense.org/") + "distribution"("repo") + } + } + "developers" { + "developer" { + "id"("ctrueden") + "name"("Curtis Rueden") + "url"("https://imagej.net/people/ctrueden") + "roles" { + "role"("founder", "lead", "developer", "debugger", "reviewer", "support", "maintainer") + } + } + } + "contributors" { + operator fun String.minus(id: String) = "contributor" { + "name"(this) + "url"("https://imagej.net/people/$id") + "properties" { "id"(id) } + } + "Mark Hiner" - "hinerm" + "Johannes Schindelin" - "dscho" + "Sébastien Besson" - "sbesson" + "John Bogovic" - "bogovicj" + "Nicolas Chiaruttini" - "NicoKiaru" + "Barry DeZonia" - "bdezonia" + "Richard Domander" - "rimadoma" + "Karl Duderstadt" - "karlduderstadt" + "Jan Eglinger" - "imagejan" + "Gabriel Einsdorf" - "gab1one" + "Tiago Ferreira" - "tferr" + "contributor" { + "name"("David Gault") + "properties" { "id"("dgault") } + } + "Ulrik Günther" - "skalarproduktraum" + "Philipp Hanslovsky" - "hanslovsky" + "Stefan Helfrich" - "stelfrich" + "Cameron Lloyd" - "camlloyd" + "Hadrien Mary" - "hadim" + "Tobias Pietzsch" - "tpietzsch" + "Stephan Preibisch" - "StephanPreibisch" + "Stephan Saalfeld" - "axtimwalde" + "Deborah Schmidt" - "frauzufall" + "Lorenzo Scianatico" - "LoreScianatico" + "Jean - Yves Tinevez" - "tinevez" + "Christian Tischer" - "tischi" + "Gabriella Turek" - "turekg" + "contributor" { + "name"("Giuseppe Barbieri") + "properties" { "id"("elect") } + } + } + "mailingLists" { + "mailingList" { + "name"("SciJava") + "subscribe"("https://groups.google.com/group/scijava") + "unsubscribe"("https://groups.google.com/group/scijava") + "post"("scijava@googlegroups.com") + "archive"("https://groups.google.com/group/scijava") + } + } + "scm" { + "connection"("scm:git:https://github.com/scijava/pom-scijava") + "developerConnection"("scm:git:git@github.com:scijava/pom-scijava") + "tag"("HEAD") + "url"("https://github.com/scijava/pom-scijava") + } + "issueManagement" { + "system"("GitHub Issues") + "url"("https://github.com/scijava/pom-scijava/issues") + } + "ciManagement" { + "system"("GitHub Actions") + "url"("https: //github.com/scijava/pom-scijava/actions") + } + "properties" { + // HACK: The following list of allowed-to-be-duplicated classes + // facilitates intended combinations of artifacts: + // == + // Classes: com.google.inject.* + // Part of: com.google.inject:guice:no_aop + // Also in: org.sonatype.sisu:sisu-guice + // Enables: + // org.apache.maven:maven-core (guice) + + // org.apache.maven.shared:maven-common-artifact-filters (sisu-guice) + // == + // Class: javax.xml.namespace.QName + // Part of: Java Runtime Environment + // Also in: xml-apis:xml-apis, xpp3:xpp3 + // Enables: xml-apis:xml-apis + xpp3:xpp3 + // == + // TEMP: Until scijava/scripting-jruby#5 is resolved. + // Classes: jnr.ffi.* + // Part of: com.github.jnr:jnr-ffi + // Also in: org.jruby:jruby-core + // Enables: org.jruby:jruby-core + org.python:jython-slim (jnr-ffi) + // == + // Classes: org.apache.hadoop.yarn.*.package-info + // Part of: org.apache.hadoop:hadoop-yarn-* + // Enables: + // org.apache.hadoop:hadoop-yarn- + + // org.apache.hadoop:hadoop-yarn- + // == + // Classes: org.apache.spark.unused.UnusedStubClass + // Part of: org.apache.spark:spark-* + // Enables: org.apache.spark:spark-core_2.11 (spark-*) + // == + // Classes: org.eclipse.aether.* + // Part of: + // org.apache.maven.resolver:maven-resolver-api + // org.apache.maven.resolver:maven-resolver-util + // org.apache.maven.shared:maven-artifact-transfer + // org.eclipse.aether:aether-api + // org.eclipse.aether:aether-util + // Enables: dependence on Apache Maven libraries + // == + // Classes: org.hibernate.stat.ConcurrentStatisticsImpl + // Part of: org.hibernate:hibernate-core + // Also in: org.openmicroscopy:omero-blitz + // Enables: + // org.openmicroscopy:omero-blitz + + // org.openmicroscopy:omero-model (hibernate-core) + // == + // Classes: org.junit.runner.Runner + // Part of: junit:junit + // Also in: org.jmockit:jmockit + // Enables: junit:junit + org.jmockit:jmockit + // == + // Classes: org.jzy3d.plot3d.pipelines.* + // Part of: org.jzy3d:jzy3d-core, org.jzy3d:jzy3d-native-jogl-awt + // Enables: org.jzy3d:jzy3d-core + org.jzy3d:jzy3d-native-jogl-awt + "scijava.allowedDuplicateClasses"("com.google.inject.*,javax.xml.namespace.QName,jnr.ffi.*,org.apache.hadoop.yarn.*.package-info,org.apache.spark.unused.UnusedStubClass,org.eclipse.aether.*,org.hibernate.stat.ConcurrentStatisticsImpl,org.junit.runner.Runner,org.jzy3d.plot3d.pipelines.*") + // NB: The scijava.allowedDuplicateClasses property above makes it easier to + // append to the list of allowed duplicate classes in downstream projects. + // Simply override the property in your POM with something like this: + // "allowedDuplicateClasses"("\${scijava.allowedDuplicateClasses},com.example.AnotherDuplicate") + "allowedDuplicateClasses"("\${scijava.allowedDuplicateClasses}") + // NB: We override these properties to make the enforcer happy. + // You will need to override them in your POM, too... to valid values. + "license.licenseName"("N/A") + "license.copyrightOwners"("N/A") + } + }*/ + } + } +} \ No newline at end of file diff --git a/gradle/platform/settings.gradle.kts b/gradle/platform/settings.gradle.kts new file mode 100644 index 0000000..5b39349 --- /dev/null +++ b/gradle/platform/settings.gradle.kts @@ -0,0 +1,25 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * + * Detailed information about configuring a multi-project build in Gradle can be found + * in the user manual at https://docs.gradle.org/7.2/userguide/multi_project_builds.html + */ + +rootProject.name = "gradle-platform" + +dependencyResolutionManagement { + + // repositories { .. } + versionCatalogs { + create("libs").from("org.scijava:gradle-catalog") + + // fails with "Could not resolve all artifacts for configuration 'incomingCatalogForLibs0'." +// create("libs").from(files("../catalog/build/version-catalog/libs.versions.toml")) + } + + includeBuild("../catalog") +} + +enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") \ No newline at end of file diff --git a/gradle/playground/build.gradle.kts b/gradle/playground/build.gradle.kts new file mode 100644 index 0000000..a5cdfd0 --- /dev/null +++ b/gradle/playground/build.gradle.kts @@ -0,0 +1,228 @@ +plugins { + embeddedKotlin("jvm") +} + +repositories { + mavenCentral() + maven("https://maven.scijava.org/content/repositories/releases") + maven("https://maven.scijava.org/content/groups/public") +} + +//configurations.filter { it.isCanBeResolved }.map { println(it) } + +dependencies { + api(libs.imagej.ij) + + // Activate the "ScijavaCapability" rule +// components.all() +} + +open class ConflictCapability(val group: String, + val artifact: String = group, + val modules: List, + val reason: String? = null) { + val ga get() = "$group:$artifact" +} + +class ResolutionCapability(group: String, artifact: String = group, modules: List, reason: String? = null) : ConflictCapability(group, artifact, modules, reason) + +// the right module to select will be always the last in the list +val resolutions = listOf( + ResolutionCapability("jzy3d", "emul-gl", listOf("org.jzy3d:jzy3d-emul-gl", "org.jzy3d:jzy3d-emul-gl-awt"), "Replaced by org.jzy3d:jzy3d-emul-gl-awt"), + ResolutionCapability("jzy3d", "jGL", listOf("org.jzy3d:jGL", "jzy3d-jGL-awt"), "Replaced by org.jzy3d:jzy3d-jGL-awt"), + ResolutionCapability("javax", "transaction", listOf("javax.transaction:jta", "jzy3d-jGL-awt"), "Replaced by org.jzy3d:jzy3d-jGL-awt"), + ResolutionCapability("javax", "servlet", listOf("javax.servlet:servlet-api", "javax.servlet:javax.servlet-api"))) +val conflicts = listOf( + ConflictCapability("slf4j", modules = listOf("ch.qos.logback:logback-classic", "org.slf4j:slf4j-simple")), + ConflictCapability("jcl", modules = listOf("commons-logging:commons-logging", "org.slf4j:jcl-over-slf4j")), + ConflictCapability("jakarta", "activation", + listOf("jakarta.activation:jakarta.activation-api", "com.sun.activation:javax.activation", "javax.activation:activation"), + "See: https://wiki.eclipse.org/Jakarta_EE_Maven_Coordinates"), + ConflictCapability("javax" , "transaction", listOf("javax.transaction:javax.transaction-api", "javax.transaction:jta")), + ConflictCapability("apache", "commonsCsv", listOf("org.apache.commons:commons-csv", "org.apache.solr:solr-commons-csv")), + ConflictCapability("c3p0", modules = listOf("com.mchange:c3p0", "com.mchange:mchange-commons-java", "c3p0:c3p0")), + ConflictCapability("javax", "mail", listOf("javax.mail:mail", "com.sun.mail:javax.mail")), + ConflictCapability("jersey", "core", listOf("javax.ws.rs:javax.ws.rs-api", "com.sun.jersey:jersey-core")), + ConflictCapability("commons", "beanutils", listOf("commons-beanutils:commons-beanutils", "commons-collections:commons-collections", "commons-beanutils:commons-beanutils-core"))) + +// TODO + +// Uber-JAR of all batik components +// org.apache.xmlgraphics:batik-all + +// Conflicts with junit:junit. We don't need Android here. +// com.google.android.tools:dx + +// Brings in all gluegen-rt native classifiers. +// org.jogamp.gluegen:gluegen-rt-main + +// Brings in all jogl-all native classifiers. +// org.jogamp.jogl:jogl-all-main + +// Uber-JAR of all netty components +// io.netty:netty-all + +/* + org.jzy3d + jzy3d-native-jogl-awt + ${org.jzy3d.jzy3d-native-jogl-awt.version} + + + + org.jogamp.gluegen + gluegen-rt-natives-macosx-universal + + + org.jogamp.gluegen + gluegen-rt-natives-linux-aarch64 + + + org.jogamp.gluegen + gluegen-rt-natives-linux-amd64 + + + org.jogamp.gluegen + gluegen-rt-natives-linux-armv6hf + + + org.jogamp.gluegen + gluegen-rt-natives-linux-i586 + + + org.jogamp.gluegen + gluegen-rt-natives-macosx-universal + + + org.jogamp.gluegen + gluegen-rt-natives-windows-amd64 + + + org.jogamp.gluegen + gluegen-rt-natives-windows-i586 + + + org.jogamp.jogl + jogl-all-natives-linux-aarch64 + + + org.jogamp.jogl + jogl-all-natives-linux-amd64 + + + org.jogamp.jogl + jogl-all-natives-linux-armv6hf + + + org.jogamp.jogl + jogl-all-natives-linux-i586 + + + org.jogamp.jogl + jogl-all-natives-macosx-universal + + + org.jogamp.jogl + jogl-all-natives-windows-amd64 + + + org.jogamp.jogl + jogl-all-natives-windows-i586 + + + + org.jzy3d + jzy3d-native-jogl-core + ${org.jzy3d.jzy3d-native-jogl-core.version} + + + + org.jogamp.gluegen + gluegen-rt-natives-macosx-universal + + + org.jogamp.gluegen + gluegen-rt-natives-linux-aarch64 + + + org.jogamp.gluegen + gluegen-rt-natives-linux-amd64 + + + org.jogamp.gluegen + gluegen-rt-natives-linux-armv6hf + + + org.jogamp.gluegen + gluegen-rt-natives-linux-i586 + + + org.jogamp.gluegen + gluegen-rt-natives-macosx-universal + + + org.jogamp.gluegen + gluegen-rt-natives-windows-amd64 + + + org.jogamp.gluegen + gluegen-rt-natives-windows-i586 + + + org.jogamp.jogl + jogl-all-natives-linux-aarch64 + + + org.jogamp.jogl + jogl-all-natives-linux-amd64 + + + org.jogamp.jogl + jogl-all-natives-linux-armv6hf + + + org.jogamp.jogl + jogl-all-natives-linux-i586 + + + org.jogamp.jogl + jogl-all-natives-macosx-universal + + + org.jogamp.jogl + jogl-all-natives-windows-amd64 + + + org.jogamp.jogl + jogl-all-natives-windows-i586 + +*/ + +class ScijavaCapability : ComponentMetadataRule { + override + fun execute(context: ComponentMetadataContext) = context.details.run { + for (res in resolutions + conflicts) { + if (id.module.toString() in res.modules) + allVariants { + withCapabilities { + // Declare that all of them provide the same capability + addCapability(res.group, res.artifact, id.version) + } + } + } + } +} + +configurations.all { +// dependencies.forEach { it. } + resolutionStrategy.capabilitiesResolution { + for (res in resolutions) + withCapability(res.ga) { + for (cand in candidates) { + val id = cand.id + if (id is ModuleComponentIdentifier && id.moduleIdentifier.toString() == res.modules.last()) + select(cand) + } + res.reason?.let(::because) + } + } +} \ No newline at end of file diff --git a/gradle/playground/settings.gradle.kts b/gradle/playground/settings.gradle.kts new file mode 100644 index 0000000..de47784 --- /dev/null +++ b/gradle/playground/settings.gradle.kts @@ -0,0 +1,25 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * + * Detailed information about configuring a multi-project build in Gradle can be found + * in the user manual at https://docs.gradle.org/7.2/userguide/multi_project_builds.html + */ + +rootProject.name = "gradle-playground" + +dependencyResolutionManagement { + + // repositories { .. } + versionCatalogs { + create("libs").from("org.scijava:gradle-catalog") + + // fails with "Could not resolve all artifacts for configuration 'incomingCatalogForLibs0'." +// create("libs").from(files("../catalog/build/version-catalog/libs.versions.toml")) + } + + includeBuild("../catalog") +} + +enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") \ No newline at end of file diff --git a/gradle/settings.gradle.kts b/gradle/settings.gradle.kts index d8d6285..5fa82c4 100644 --- a/gradle/settings.gradle.kts +++ b/gradle/settings.gradle.kts @@ -1,12 +1,10 @@ -/* - * This file was generated by the Gradle 'init' task. - * - * The settings file is used to specify which projects to include in your build. - * - * Detailed information about configuring a multi-project build in Gradle can be found - * in the user manual at https://docs.gradle.org/7.2/userguide/multi_project_builds.html - */ +// This is an empty umbrella build including all the component builds. +// This build is not necessarily needed. The component builds work independently. rootProject.name = "gradle" -include("platform") \ No newline at end of file +includeBuild("catalog") +includeBuild("platform") +includeBuild("playground") + +enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") \ No newline at end of file From 34b499651c62fc19388c29e042c89356580af368 Mon Sep 17 00:00:00 2001 From: Giuseppe Barbieri Date: Thu, 14 Mar 2024 11:30:57 +0100 Subject: [PATCH 017/294] switch exclusions to `Rule`s, best efficiency --- gradle/catalog/build.gradle.kts | 9 +- gradle/platform/build.gradle.kts | 3 + .../src/main/kotlin/publish.gradle.kts | 4 - gradle/playground/build.gradle.kts | 259 ++++-------------- gradle/playground/settings.gradle.kts | 2 + 5 files changed, 65 insertions(+), 212 deletions(-) diff --git a/gradle/catalog/build.gradle.kts b/gradle/catalog/build.gradle.kts index 7cf6db1..66103ca 100644 --- a/gradle/catalog/build.gradle.kts +++ b/gradle/catalog/build.gradle.kts @@ -48,13 +48,20 @@ catalog.versionCatalog { else -> "$g.$camel" } - println("$alias($gav)") +// println("$alias($gav)") library(alias, gav) } for ((alias, aliases) in bundles) bundle(alias, aliases) + +// jakarta() } +//fun VersionCatalogBuilder.jakarta() { +// val bom = URL.of("https://repo1.maven.org/maven2/jakarta/platform/jakarta.jakartaee-bom/10.0.0/jakarta.jakartaee-bom-10.0.0.pom") +// library("jakarta.json", "jakarta.json:jakarta.json-api:") +//} + publishing.publications { repositories.maven { name = "sciJava" diff --git a/gradle/platform/build.gradle.kts b/gradle/platform/build.gradle.kts index 71e2a05..722bdc2 100644 --- a/gradle/platform/build.gradle.kts +++ b/gradle/platform/build.gradle.kts @@ -6,6 +6,8 @@ import org.gradle.internal.impldep.org.junit.experimental.categories.Categories. plugins { `java-platform` publish +// id("org.gradlex.java-ecosystem-capabilities-base") // only rules +// id("org.gradlex.logging-capabilities") // logging extension } group = "org.scijava" @@ -45,6 +47,7 @@ dependencies { // } api(platform("com.fasterxml.jackson:jackson-bom:" + libs.com.fasterxml.jackson.core.jacksonCore.get().version)) + api(platform("jakarta.platform:jakarta.jakartaee-bom:10.0.0")) // api(platform("com.google.api-client:google-api-client-bom:" + libs.com.google.api.client.googleApiClient.get().version)) // api(platform("com.google.api:gax-bom:" + libs.com.google.api.gax.get().version)) // api(platform("com.google.api:gapic-generator-java-bom:" + libs.com.google.api.grpc.protoGoogleCommonProtos.get().version)) diff --git a/gradle/platform/buildSrc/src/main/kotlin/publish.gradle.kts b/gradle/platform/buildSrc/src/main/kotlin/publish.gradle.kts index 8dd418e..457bf5e 100644 --- a/gradle/platform/buildSrc/src/main/kotlin/publish.gradle.kts +++ b/gradle/platform/buildSrc/src/main/kotlin/publish.gradle.kts @@ -1,7 +1,3 @@ -import groovy.util.Node -import groovy.util.NodeList -import java.util.* - plugins { `maven-publish` } diff --git a/gradle/playground/build.gradle.kts b/gradle/playground/build.gradle.kts index a5cdfd0..8d9fdc2 100644 --- a/gradle/playground/build.gradle.kts +++ b/gradle/playground/build.gradle.kts @@ -1,5 +1,6 @@ plugins { embeddedKotlin("jvm") + id("org.gradlex.java-ecosystem-capabilities-base") } repositories { @@ -8,221 +9,65 @@ repositories { maven("https://maven.scijava.org/content/groups/public") } -//configurations.filter { it.isCanBeResolved }.map { println(it) } - -dependencies { - api(libs.imagej.ij) - - // Activate the "ScijavaCapability" rule -// components.all() +// it will appear as this was the original downloaded metadata of the dependency +// @CacheableRule is more verbose but more efficient, because the rule will be applied before the dependency get cached, +inline fun ComponentMetadataHandler.withModules(vararg modules: String) { + for (module in modules) withModule(module) } - -open class ConflictCapability(val group: String, - val artifact: String = group, - val modules: List, - val reason: String? = null) { - val ga get() = "$group:$artifact" +abstract class Rule : ComponentMetadataRule { + fun ComponentMetadataContext.remove(vararg modules: String) = details.allVariants { withDependencies { removeIf { it.module.toString() in modules } } } } +dependencies { + components { + @CacheableRule open class NoXalan : Rule() { + override fun execute(context: ComponentMetadataContext) = context.remove("xalan:serializer", "xalan:xalan") + } + withModules("org.openmicroscopy:ome-common", "ome:bio-formats-tools", "ome:formats-api", "ome:formats-bsd", + "org.apache.xmlgraphics:batik-bridge", "org.apache.xmlgraphics:batik-dom") -class ResolutionCapability(group: String, artifact: String = group, modules: List, reason: String? = null) : ConflictCapability(group, artifact, modules, reason) - -// the right module to select will be always the last in the list -val resolutions = listOf( - ResolutionCapability("jzy3d", "emul-gl", listOf("org.jzy3d:jzy3d-emul-gl", "org.jzy3d:jzy3d-emul-gl-awt"), "Replaced by org.jzy3d:jzy3d-emul-gl-awt"), - ResolutionCapability("jzy3d", "jGL", listOf("org.jzy3d:jGL", "jzy3d-jGL-awt"), "Replaced by org.jzy3d:jzy3d-jGL-awt"), - ResolutionCapability("javax", "transaction", listOf("javax.transaction:jta", "jzy3d-jGL-awt"), "Replaced by org.jzy3d:jzy3d-jGL-awt"), - ResolutionCapability("javax", "servlet", listOf("javax.servlet:servlet-api", "javax.servlet:javax.servlet-api"))) -val conflicts = listOf( - ConflictCapability("slf4j", modules = listOf("ch.qos.logback:logback-classic", "org.slf4j:slf4j-simple")), - ConflictCapability("jcl", modules = listOf("commons-logging:commons-logging", "org.slf4j:jcl-over-slf4j")), - ConflictCapability("jakarta", "activation", - listOf("jakarta.activation:jakarta.activation-api", "com.sun.activation:javax.activation", "javax.activation:activation"), - "See: https://wiki.eclipse.org/Jakarta_EE_Maven_Coordinates"), - ConflictCapability("javax" , "transaction", listOf("javax.transaction:javax.transaction-api", "javax.transaction:jta")), - ConflictCapability("apache", "commonsCsv", listOf("org.apache.commons:commons-csv", "org.apache.solr:solr-commons-csv")), - ConflictCapability("c3p0", modules = listOf("com.mchange:c3p0", "com.mchange:mchange-commons-java", "c3p0:c3p0")), - ConflictCapability("javax", "mail", listOf("javax.mail:mail", "com.sun.mail:javax.mail")), - ConflictCapability("jersey", "core", listOf("javax.ws.rs:javax.ws.rs-api", "com.sun.jersey:jersey-core")), - ConflictCapability("commons", "beanutils", listOf("commons-beanutils:commons-beanutils", "commons-collections:commons-collections", "commons-beanutils:commons-beanutils-core"))) - -// TODO - -// Uber-JAR of all batik components -// org.apache.xmlgraphics:batik-all - -// Conflicts with junit:junit. We don't need Android here. -// com.google.android.tools:dx - -// Brings in all gluegen-rt native classifiers. -// org.jogamp.gluegen:gluegen-rt-main - -// Brings in all jogl-all native classifiers. -// org.jogamp.jogl:jogl-all-main - -// Uber-JAR of all netty components -// io.netty:netty-all - -/* - org.jzy3d - jzy3d-native-jogl-awt - ${org.jzy3d.jzy3d-native-jogl-awt.version} - - - - org.jogamp.gluegen - gluegen-rt-natives-macosx-universal - - - org.jogamp.gluegen - gluegen-rt-natives-linux-aarch64 - - - org.jogamp.gluegen - gluegen-rt-natives-linux-amd64 - - - org.jogamp.gluegen - gluegen-rt-natives-linux-armv6hf - - - org.jogamp.gluegen - gluegen-rt-natives-linux-i586 - - - org.jogamp.gluegen - gluegen-rt-natives-macosx-universal - - - org.jogamp.gluegen - gluegen-rt-natives-windows-amd64 - - - org.jogamp.gluegen - gluegen-rt-natives-windows-i586 - - - org.jogamp.jogl - jogl-all-natives-linux-aarch64 - - - org.jogamp.jogl - jogl-all-natives-linux-amd64 - - - org.jogamp.jogl - jogl-all-natives-linux-armv6hf - - - org.jogamp.jogl - jogl-all-natives-linux-i586 - - - org.jogamp.jogl - jogl-all-natives-macosx-universal - - - org.jogamp.jogl - jogl-all-natives-windows-amd64 - - - org.jogamp.jogl - jogl-all-natives-windows-i586 - + @CacheableRule open class NoUeberJars : Rule() { + override fun execute(context: ComponentMetadataContext) = context.remove("org.apache.xmlgraphics:batik-all", "it.unimi.dsi:fastutil") + } + withModules("org.openmicroscopy:omero-blitz", "org.openmicroscopy:omero-server") + @CacheableRule open class NoAndroid : Rule() { + override fun execute(context: ComponentMetadataContext) = context.remove("com.google.android.tools:dx") + } + withModules("net.clearcontrol:coremem", "com.nativelibs4java:bridj") - org.jzy3d - jzy3d-native-jogl-core - ${org.jzy3d.jzy3d-native-jogl-core.version} - - - - org.jogamp.gluegen - gluegen-rt-natives-macosx-universal - - - org.jogamp.gluegen - gluegen-rt-natives-linux-aarch64 - - - org.jogamp.gluegen - gluegen-rt-natives-linux-amd64 - - - org.jogamp.gluegen - gluegen-rt-natives-linux-armv6hf - - - org.jogamp.gluegen - gluegen-rt-natives-linux-i586 - - - org.jogamp.gluegen - gluegen-rt-natives-macosx-universal - - - org.jogamp.gluegen - gluegen-rt-natives-windows-amd64 - - - org.jogamp.gluegen - gluegen-rt-natives-windows-i586 - - - org.jogamp.jogl - jogl-all-natives-linux-aarch64 - - - org.jogamp.jogl - jogl-all-natives-linux-amd64 - - - org.jogamp.jogl - jogl-all-natives-linux-armv6hf - - - org.jogamp.jogl - jogl-all-natives-linux-i586 - - - org.jogamp.jogl - jogl-all-natives-macosx-universal - - - org.jogamp.jogl - jogl-all-natives-windows-amd64 - - - org.jogamp.jogl - jogl-all-natives-windows-i586 - -*/ + @CacheableRule open class ClearGl : Rule() { + override fun execute(context: ComponentMetadataContext) = context.remove("org.jogamp.gluegen:gluegen-rt-main", "org.jogamp.jogl:jogl-all-main") + } + withModule("net.clearvolume:cleargl") -class ScijavaCapability : ComponentMetadataRule { - override - fun execute(context: ComponentMetadataContext) = context.details.run { - for (res in resolutions + conflicts) { - if (id.module.toString() in res.modules) - allVariants { - withCapabilities { - // Declare that all of them provide the same capability - addCapability(res.group, res.artifact, id.version) - } - } + @CacheableRule open class SparkCore211 : Rule() { + override fun execute(context: ComponentMetadataContext) = context.remove("io.netty:netty-all") } - } -} + withModule("org.apache.spark:spark-core_2.11") -configurations.all { -// dependencies.forEach { it. } - resolutionStrategy.capabilitiesResolution { - for (res in resolutions) - withCapability(res.ga) { - for (cand in candidates) { - val id = cand.id - if (id is ModuleComponentIdentifier && id.moduleIdentifier.toString() == res.modules.last()) - select(cand) - } - res.reason?.let(::because) + @CacheableRule open class NoBatikExtensions : Rule() { + override fun execute(context: ComponentMetadataContext) = context.remove("org.apache.xmlgraphics:batik-extensions") + } + withModules("org.apache.xmlgraphics:batik-rasterizer-ext", "org.apache.xmlgraphics:batik-squiggle-ext") + + @CacheableRule open class NoJogampNatives : Rule() { + override fun execute(context: ComponentMetadataContext) { + // Conflicts with properly packaged jogamp native classifiers. + val libs = listOf("gluegen:gluegen-rt", "jogl:jogl-all") + val modules = listOf("linux-aarch64", "linux-amd64", "linux-armv6hf", "linux-i586", "macosx-universal", "windows-amd64", "windows-i586") + .flatMap { p -> libs.map { "org.jogamp.$it-natives-$p" } }.toTypedArray() + context.remove(*modules) } + } + withModules("org.jzy3d:jzy3d-native-jogl-awt", "org.jzy3d:jzy3d-native-jogl-core") + + @CacheableRule open class Weka : Rule() { + override fun execute(context: ComponentMetadataContext) = context.remove( + "com.github.fommil.netlib:all", "com.googlecode.netlib-java:netlib-java", "net.sourceforge.f2j:arpack_combined_all", + "nz.ac.waikato.cms.weka.thirdparty:java-cup-11b", "nz.ac.waikato.cms.weka.thirdparty:java-cup-11b-runtime") + } + withModule("nz.ac.waikato.cms.weka:weka-dev") } + implementation(libs.org.morphonets.snt) + implementation("org.jzy3d:jzy3d-emul-gl-awt:2.1.0") } \ No newline at end of file diff --git a/gradle/playground/settings.gradle.kts b/gradle/playground/settings.gradle.kts index de47784..6c09f84 100644 --- a/gradle/playground/settings.gradle.kts +++ b/gradle/playground/settings.gradle.kts @@ -20,6 +20,8 @@ dependencyResolutionManagement { } includeBuild("../catalog") + // java-ecosystem-capabilities + includeBuild("../../../java-ecosystem-capabilities") } enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") \ No newline at end of file From 9cc0b9f23f9d566761c5755ff2bdd7069779b1d2 Mon Sep 17 00:00:00 2001 From: Giuseppe Barbieri Date: Mon, 18 Mar 2024 03:54:16 +0100 Subject: [PATCH 018/294] shelve --- gradle/catalog/build.gradle.kts | 39 ++++++++----- gradle/enforcer/settings.gradle.kts | 9 +++ gradle/platform/build.gradle.kts | 15 ++--- .../src/main/kotlin/publish.gradle.kts | 6 ++ gradle/platform/settings.gradle.kts | 2 + gradle/playground/build.gradle.kts | 58 +++++++++++++++++-- gradle/playground/settings.gradle.kts | 10 +++- gradle/settings.gradle.kts | 1 + 8 files changed, 110 insertions(+), 30 deletions(-) create mode 100644 gradle/enforcer/settings.gradle.kts diff --git a/gradle/catalog/build.gradle.kts b/gradle/catalog/build.gradle.kts index 66103ca..0fe05f5 100644 --- a/gradle/catalog/build.gradle.kts +++ b/gradle/catalog/build.gradle.kts @@ -8,7 +8,7 @@ plugins { } group = "org.scijava" -version = "0.1" +version = "0.11" catalog.versionCatalog { @@ -36,11 +36,14 @@ catalog.versionCatalog { .joinToString("") { if (it.isEmpty()) "" else it[0].uppercase() + it.substring(1).lowercase() } .replaceFirstChar { it.lowercase() } - fun getAlias(group: String = "$g".substringAfterLast('.')) = - "$group." + when { + fun getAlias(group: String = "$g".substringAfterLast('.')): String { + val alias = "$group." + when { camel.startsWith(group) -> camel.substringAfter(group).replaceFirstChar { it.lowercase() }.ifEmpty { group } else -> camel - }.also { bundles.getOrPut(group, ::ArrayList) += it } + } + bundles.getOrPut(group, ::ArrayList) += alias + return alias + } val alias = when ("$g") { in listOf("org.scijava", "net.imagej", "net.imglib2", "sc.fiji", "org.janelia.saalfeldlab") -> getAlias() @@ -48,13 +51,17 @@ catalog.versionCatalog { else -> "$g.$camel" } -// println("$alias($gav)") + // println("$alias($gav)") library(alias, gav) } + for ((alias, aliases) in bundles) bundle(alias, aliases) -// jakarta() + // jakarta() + + // version("groovy", "3.0.5") + // library("groovy-core", "org.codehaus.groovy", "groovy").versionRef("groovy") } //fun VersionCatalogBuilder.jakarta() { @@ -62,13 +69,17 @@ catalog.versionCatalog { // library("jakarta.json", "jakarta.json:jakarta.json-api:") //} -publishing.publications { - repositories.maven { - name = "sciJava" - credentials(PasswordCredentials::class) - url = uri("https://maven.scijava.org/content/repositories/releases") - } - create("sciJavaCatalog") { - from(components["versionCatalog"]) +publishing { + publications { + repositories { + maven { + name = "sciJava" + credentials(PasswordCredentials::class) + url = uri("https://maven.scijava.org/content/repositories/releases") + } + } + create("sciJavaCatalog") { + from(components["versionCatalog"]) + } } } \ No newline at end of file diff --git a/gradle/enforcer/settings.gradle.kts b/gradle/enforcer/settings.gradle.kts new file mode 100644 index 0000000..562e10e --- /dev/null +++ b/gradle/enforcer/settings.gradle.kts @@ -0,0 +1,9 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.6/userguide/multi_project_builds.html in the Gradle documentation. + * This project uses @Incubating APIs which are subject to change. + */ + +rootProject.name = "gradle-enforcer" diff --git a/gradle/platform/build.gradle.kts b/gradle/platform/build.gradle.kts index 722bdc2..8f58774 100644 --- a/gradle/platform/build.gradle.kts +++ b/gradle/platform/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "org.scijava" -version = "0.1" //(effXml / "version").toString() +version = "0.13" //(effXml / "version").toString() operator fun GPathResult.div(child: String) = children().find { (it!! as NodeChild).name() == child } as GPathResult @@ -39,13 +39,14 @@ dependencies { // println("$g:$a:$v") } } - // versionCatalogs.forEach { versionCatalog -> - // println("catalog ${versionCatalog.name}") - // versionCatalog.libraryAliases.forEach { - // println(versionCatalog.findLibrary(it).get().get()) - // } - // } +// versionCatalogs.forEach { versionCatalog -> +// println("catalog ${versionCatalog.name}") +// versionCatalog.libraryAliases.forEach { +// println(versionCatalog.findLibrary(it).get().get()) +// } +// } +// println(libs.groovy.core.get()) api(platform("com.fasterxml.jackson:jackson-bom:" + libs.com.fasterxml.jackson.core.jacksonCore.get().version)) api(platform("jakarta.platform:jakarta.jakartaee-bom:10.0.0")) // api(platform("com.google.api-client:google-api-client-bom:" + libs.com.google.api.client.googleApiClient.get().version)) diff --git a/gradle/platform/buildSrc/src/main/kotlin/publish.gradle.kts b/gradle/platform/buildSrc/src/main/kotlin/publish.gradle.kts index 457bf5e..1ae16b3 100644 --- a/gradle/platform/buildSrc/src/main/kotlin/publish.gradle.kts +++ b/gradle/platform/buildSrc/src/main/kotlin/publish.gradle.kts @@ -13,6 +13,12 @@ publishing { } create("sciJavaPlatform") { from(components["javaPlatform"]) + groupId = "org.scijava" + println(groupId) + artifactId = "gradle-platform" + println(artifactId) + version = "0.13" + println(version) /*pom.withXml { val nodes = Stack() diff --git a/gradle/platform/settings.gradle.kts b/gradle/platform/settings.gradle.kts index 5b39349..162f20a 100644 --- a/gradle/platform/settings.gradle.kts +++ b/gradle/platform/settings.gradle.kts @@ -14,6 +14,8 @@ dependencyResolutionManagement { // repositories { .. } versionCatalogs { create("libs").from("org.scijava:gradle-catalog") +// maybeCreate("libs").version("groovy", "3.0.9") +// maybeCreate("libs").library("groovy-core", "org.codehaus.groovy:groovy:2.4.15") // fails with "Could not resolve all artifacts for configuration 'incomingCatalogForLibs0'." // create("libs").from(files("../catalog/build/version-catalog/libs.versions.toml")) diff --git a/gradle/playground/build.gradle.kts b/gradle/playground/build.gradle.kts index 8d9fdc2..b40c122 100644 --- a/gradle/playground/build.gradle.kts +++ b/gradle/playground/build.gradle.kts @@ -1,6 +1,11 @@ +import org.gradle.api.publish.maven.internal.publication.DefaultMavenPom + plugins { embeddedKotlin("jvm") - id("org.gradlex.java-ecosystem-capabilities-base") + id("org.gradlex.java-ecosystem-capabilities") version "1.5.2.00" + id("dev.jacomet.logging-capabilities") version "0.11.1" + id("io.fuchs.gradle.classpath-collision-detector") version "0.3" + `maven-publish` } repositories { @@ -9,11 +14,13 @@ repositories { maven("https://maven.scijava.org/content/groups/public") } -// it will appear as this was the original downloaded metadata of the dependency -// @CacheableRule is more verbose but more efficient, because the rule will be applied before the dependency get cached, +// @CacheableRule is more verbose but more efficient, because the rule will be applied before the dependency get cached +// in Gradle, it will appear as this was the original downloaded metadata of the given dependency + inline fun ComponentMetadataHandler.withModules(vararg modules: String) { for (module in modules) withModule(module) } + abstract class Rule : ComponentMetadataRule { fun ComponentMetadataContext.remove(vararg modules: String) = details.allVariants { withDependencies { removeIf { it.module.toString() in modules } } } } @@ -62,12 +69,51 @@ dependencies { withModules("org.jzy3d:jzy3d-native-jogl-awt", "org.jzy3d:jzy3d-native-jogl-core") @CacheableRule open class Weka : Rule() { - override fun execute(context: ComponentMetadataContext) = context.remove( + val exclusions = listOf( "com.github.fommil.netlib:all", "com.googlecode.netlib-java:netlib-java", "net.sourceforge.f2j:arpack_combined_all", "nz.ac.waikato.cms.weka.thirdparty:java-cup-11b", "nz.ac.waikato.cms.weka.thirdparty:java-cup-11b-runtime") + + override fun execute(context: ComponentMetadataContext) { + context.details.allVariants { + withDependencies { + removeIf { it.module.toString() in exclusions } + add("runtimeClasspath", "com.github.vbmacher:java-cup-runtime") + } + } + } } withModule("nz.ac.waikato.cms.weka:weka-dev") } - implementation(libs.org.morphonets.snt) - implementation("org.jzy3d:jzy3d-emul-gl-awt:2.1.0") + // implementation("org.jzy3d:jzy3d-emul-gl:+") + // implementation("org.jzy3d:jzy3d-emul-gl-awt:+") + + implementation("junit:junit:4.4") + // implementation("org.hamcrest:hamcrest-core:1.2") +} + +tasks.detectCollisions { + // detectCollisions() // to detect on configuration time + // configurations.from(project.configurations.testRuntimeClasspath) +} + +publishing { + publications.register("maven") { + pom { + this as DefaultMavenPom + println(name.orNull) + println(licenses) + this.licenses { + license { + this.name = "Nich" + url = "URL" + comments = "com" + distribution = "dis" + } + } + println(licenses[0].name.orNull) + println(licenses[0].url.orNull) + println(licenses[0].comments.orNull) + println(licenses[0].distribution.orNull) + } + } } \ No newline at end of file diff --git a/gradle/playground/settings.gradle.kts b/gradle/playground/settings.gradle.kts index 6c09f84..b4fc304 100644 --- a/gradle/playground/settings.gradle.kts +++ b/gradle/playground/settings.gradle.kts @@ -9,6 +9,11 @@ rootProject.name = "gradle-playground" +pluginManagement.repositories { + gradlePluginPortal() + maven("https://maven.scijava.org/content/repositories/releases") +} + dependencyResolutionManagement { // repositories { .. } @@ -16,12 +21,11 @@ dependencyResolutionManagement { create("libs").from("org.scijava:gradle-catalog") // fails with "Could not resolve all artifacts for configuration 'incomingCatalogForLibs0'." -// create("libs").from(files("../catalog/build/version-catalog/libs.versions.toml")) + // create("libs").from(files("../catalog/build/version-catalog/libs.versions.toml")) } includeBuild("../catalog") - // java-ecosystem-capabilities - includeBuild("../../../java-ecosystem-capabilities") + // includeBuild("../../../java-ecosystem-capabilities") } enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") \ No newline at end of file diff --git a/gradle/settings.gradle.kts b/gradle/settings.gradle.kts index 5fa82c4..6a0ad4b 100644 --- a/gradle/settings.gradle.kts +++ b/gradle/settings.gradle.kts @@ -6,5 +6,6 @@ rootProject.name = "gradle" includeBuild("catalog") includeBuild("platform") includeBuild("playground") +includeBuild("enforcer") enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") \ No newline at end of file From df137524ce0c7b168b166dc06f91226e3c839c61 Mon Sep 17 00:00:00 2001 From: Giuseppe Barbieri Date: Thu, 25 Apr 2024 11:44:04 +0200 Subject: [PATCH 019/294] catalog and platform properly generated and the corresponding artifacts get added alongside the main publication --- .idea/.gitignore | 8 + .idea/codeStyles/codeStyleConfig.xml | 5 + .idea/compiler.xml | 36 + .idea/encodings.xml | 7 + .idea/gradle.xml | 42 + .idea/jarRepositories.xml | 35 + .idea/kotlinc.xml | 6 + .idea/misc.xml | 16 + .idea/modules.xml | 10 + .idea/vcs.xml | 6 + gradle/catalog/build.gradle.kts | 121 +- gradle/catalog/eff.xml | 6379 ----------------- .../catalog/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43462 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + gradle/catalog/gradlew | 249 + gradle/catalog/gradlew.bat | 92 + gradle/enforcer/.gitattributes | 9 + gradle/enforcer/.gitignore | 5 + gradle/enforcer/build.gradle.kts | 63 + gradle/enforcer/gradle.properties | 6 + gradle/enforcer/gradle/libs.versions.toml | 5 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43462 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + gradle/enforcer/gradlew | 249 + gradle/enforcer/gradlew.bat | 92 + .../example/EnforcerPluginFunctionalTest.kt | 43 + .../main/kotlin/org/example/EnforcerPlugin.kt | 22 + .../kotlin/org/example/EnforcerPluginTest.kt | 22 + gradle/gradle.properties | 6 + .../gradle/wrapper/gradle-wrapper.properties | 2 +- gradle/manifest-dependencies/build.gradle.kts | 65 + .../manifest-dependencies/settings.gradle.kts | 10 + .../example/GradleBasePluginFunctionalTest.kt | 43 + .../kotlin/org/example/GradleBasePlugin.kt | 37 + .../org/example/GradleBasePluginTest.kt | 22 + gradle/platform/build.gradle.kts | 81 +- .../src/main/kotlin/publish.gradle.kts | 8 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43462 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + gradle/platform/gradlew | 249 + gradle/platform/gradlew.bat | 92 + gradle/platform/settings.gradle.kts | 7 +- gradle/settings.gradle.kts | 5 +- pom.xml | 84 + 44 files changed, 1785 insertions(+), 6475 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/codeStyles/codeStyleConfig.xml create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/kotlinc.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml delete mode 100644 gradle/catalog/eff.xml create mode 100644 gradle/catalog/gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/catalog/gradle/wrapper/gradle-wrapper.properties create mode 100755 gradle/catalog/gradlew create mode 100644 gradle/catalog/gradlew.bat create mode 100644 gradle/enforcer/.gitattributes create mode 100644 gradle/enforcer/.gitignore create mode 100644 gradle/enforcer/build.gradle.kts create mode 100644 gradle/enforcer/gradle.properties create mode 100644 gradle/enforcer/gradle/libs.versions.toml create mode 100644 gradle/enforcer/gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/enforcer/gradle/wrapper/gradle-wrapper.properties create mode 100755 gradle/enforcer/gradlew create mode 100644 gradle/enforcer/gradlew.bat create mode 100644 gradle/enforcer/src/functionalTest/kotlin/org/example/EnforcerPluginFunctionalTest.kt create mode 100644 gradle/enforcer/src/main/kotlin/org/example/EnforcerPlugin.kt create mode 100644 gradle/enforcer/src/test/kotlin/org/example/EnforcerPluginTest.kt create mode 100644 gradle/gradle.properties create mode 100644 gradle/manifest-dependencies/build.gradle.kts create mode 100644 gradle/manifest-dependencies/settings.gradle.kts create mode 100644 gradle/manifest-dependencies/src/functionalTest/kotlin/org/example/GradleBasePluginFunctionalTest.kt create mode 100644 gradle/manifest-dependencies/src/main/kotlin/org/example/GradleBasePlugin.kt create mode 100644 gradle/manifest-dependencies/src/test/kotlin/org/example/GradleBasePluginTest.kt create mode 100644 gradle/platform/gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/platform/gradle/wrapper/gradle-wrapper.properties create mode 100755 gradle/platform/gradlew create mode 100644 gradle/platform/gradlew.bat diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..a55e7a1 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..34d4935 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..f2b130e --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,42 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..24f14f0 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml new file mode 100644 index 0000000..8d81632 --- /dev/null +++ b/.idea/kotlinc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..a4e60c8 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..c010932 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/gradle/catalog/build.gradle.kts b/gradle/catalog/build.gradle.kts index 0fe05f5..0c8dd02 100644 --- a/gradle/catalog/build.gradle.kts +++ b/gradle/catalog/build.gradle.kts @@ -1,6 +1,7 @@ import groovy.xml.XmlSlurper import groovy.xml.slurpersupport.GPathResult import groovy.xml.slurpersupport.NodeChild +import java.io.ByteArrayOutputStream plugins { `version-catalog` @@ -10,76 +11,82 @@ plugins { group = "org.scijava" version = "0.11" -catalog.versionCatalog { - - operator fun GPathResult.div(child: String) = children().find { (it!! as NodeChild).name() == child } as GPathResult - - val effXml = XmlSlurper().parse(projectDir.resolve("eff.xml")) - val deps = effXml / "dependencyManagement" / "dependencies" - val bundles = mutableMapOf>() - val skip = listOf("mpicbg" to "mpicbg_") - val cache = mutableSetOf() // skip duplicates, such as org.bytedeco:ffmpeg - for (dep in deps.children()) { - val node = dep as NodeChild - val g = node / "groupId" - val a = node / "artifactId" - val v = node / "version" - val gav = "$g:$a:$v" - - if (("$g" to "$a") in skip || gav in cache) - continue - - cache += gav - - // println(gav) - val camel = "$a".split('-', '_') - .joinToString("") { if (it.isEmpty()) "" else it[0].uppercase() + it.substring(1).lowercase() } - .replaceFirstChar { it.lowercase() } - - fun getAlias(group: String = "$g".substringAfterLast('.')): String { - val alias = "$group." + when { - camel.startsWith(group) -> camel.substringAfter(group).replaceFirstChar { it.lowercase() }.ifEmpty { group } - else -> camel +tasks { + + val generateCatalog by register("generateCatalog") { + + workingDir = projectDir.parentFile.parentFile + commandLine("sh", "-c", "mvn -B -f pom.xml help:effective-pom") + standardOutput = ByteArrayOutputStream() + + doLast { + var output = standardOutput.toString() + // clean output from dirty + output = output.substringAfter("\n\n").substringBefore("\n\n") + + catalog.versionCatalog { + + operator fun GPathResult.div(child: String) = children().find { (it!! as NodeChild).name() == child } as GPathResult + + val xml = XmlSlurper().parseText(output) + val deps = xml / "dependencyManagement" / "dependencies" + val bundles = mutableMapOf>() + val skip = listOf("mpicbg" to "mpicbg_") + val cache = mutableSetOf() // skip duplicates, such as org.bytedeco:ffmpeg + for (dep in deps.children()) { + val node = dep as NodeChild + val g = node / "groupId" + val a = node / "artifactId" + val v = node / "version" + val gav = "$g:$a:$v" + + if (("$g" to "$a") in skip || gav in cache) + continue + + cache += gav + + val camel = "$a".split('-', '_') + .joinToString("") { if (it.isEmpty()) "" else it[0].uppercase() + it.substring(1).lowercase() } + .replaceFirstChar { it.lowercase() } + + fun getAlias(group: String): String { + val alias = "$group." + when { + camel.startsWith(group) -> camel.substringAfter(group).replaceFirstChar { it.lowercase() }.ifEmpty { group } + else -> camel + } + bundles.getOrPut(group, ::ArrayList) += alias + return alias + } + + val lastWordAsGroup = listOf("org.scijava", "net.imagej", "net.imglib2", "sc.fiji", "org.janelia.saalfeldlab") + val alias = when ("$g") { + in lastWordAsGroup -> getAlias(g.toString().substringAfterLast('.')) + "io.scif" -> getAlias("scifio") + else -> "$g.$camel" + } + + library(alias, gav) + } + + for ((alias, aliases) in bundles) + bundle(alias, aliases) } - bundles.getOrPut(group, ::ArrayList) += alias - return alias - } - - val alias = when ("$g") { - in listOf("org.scijava", "net.imagej", "net.imglib2", "sc.fiji", "org.janelia.saalfeldlab") -> getAlias() - "io.scif" -> getAlias("scifio") - else -> "$g.$camel" } - - // println("$alias($gav)") - library(alias, gav) } - - for ((alias, aliases) in bundles) - bundle(alias, aliases) - - // jakarta() - - // version("groovy", "3.0.5") - // library("groovy-core", "org.codehaus.groovy", "groovy").versionRef("groovy") + // dependsOn runs only if the src is successful, finalizedBy not + generateCatalogAsToml { dependsOn(generateCatalog) } } -//fun VersionCatalogBuilder.jakarta() { -// val bom = URL.of("https://repo1.maven.org/maven2/jakarta/platform/jakarta.jakartaee-bom/10.0.0/jakarta.jakartaee-bom-10.0.0.pom") -// library("jakarta.json", "jakarta.json:jakarta.json-api:") -//} - publishing { publications { + create("sciJavaCatalog") { from(components["versionCatalog"]) } repositories { maven { name = "sciJava" credentials(PasswordCredentials::class) url = uri("https://maven.scijava.org/content/repositories/releases") + // url = uri("repo") } } - create("sciJavaCatalog") { - from(components["versionCatalog"]) - } } } \ No newline at end of file diff --git a/gradle/catalog/eff.xml b/gradle/catalog/eff.xml deleted file mode 100644 index 1bb3642..0000000 --- a/gradle/catalog/eff.xml +++ /dev/null @@ -1,6379 +0,0 @@ - - - - - - - - - - - - - - - 4.0.0 - - org.scijava - pom-scijava-base - 19.0.0 - - - org.scijava - pom-scijava - 38.0.0-SNAPSHOT - pom - SciJava Parent POM - This POM provides a parent from which participating projects can declare their build configurations. It ensures that projects all use a compatible build environment, including Java version, as well as versions of dependencies and plugins. - https://scijava.org/ - 2011 - - SciJava - https://scijava.org/ - - - - Unlicense - https://unlicense.org/ - repo - - - - - ctrueden - Curtis Rueden - https://imagej.net/people/ctrueden - - founder - lead - developer - debugger - reviewer - support - maintainer - - - - - - Mark Hiner - https://imagej.net/people/hinerm - - hinerm - - - - Johannes Schindelin - https://imagej.net/people/dscho - - dscho - - - - Sébastien Besson - https://imagej.net/people/sbesson - - sbesson - - - - John Bogovic - https://imagej.net/people/bogovicj - - bogovicj - - - - Nicolas Chiaruttini - https://imagej.net/people/NicoKiaru - - NicoKiaru - - - - Barry DeZonia - https://imagej.net/people/bdezonia - - bdezonia - - - - Richard Domander - https://imagej.net/people/rimadoma - - rimadoma - - - - Karl Duderstadt - https://imagej.net/people/karlduderstadt - - karlduderstadt - - - - Jan Eglinger - https://imagej.net/people/imagejan - - imagejan - - - - Gabriel Einsdorf - https://imagej.net/people/gab1one - - gab1one - - - - Tiago Ferreira - https://imagej.net/people/tferr - - tferr - - - - David Gault - - dgault - - - - Ulrik Günther - https://imagej.net/people/skalarproduktraum - - skalarproduktraum - - - - Philipp Hanslovsky - https://imagej.net/people/hanslovsky - - hanslovsky - - - - Stefan Helfrich - https://imagej.net/people/stelfrich - - stelfrich - - - - Cameron Lloyd - https://imagej.net/people/camlloyd - - camlloyd - - - - Hadrien Mary - https://imagej.net/people/hadim - - hadim - - - - Tobias Pietzsch - https://imagej.net/people/tpietzsch - - tpietzsch - - - - Stephan Preibisch - https://imagej.net/people/StephanPreibisch - - StephanPreibisch - - - - Stephan Saalfeld - https://imagej.net/people/axtimwalde - - axtimwalde - - - - Deborah Schmidt - https://imagej.net/people/frauzufall - - frauzufall - - - - Lorenzo Scianatico - https://imagej.net/people/LoreScianatico - - LoreScianatico - - - - Jean-Yves Tinevez - https://imagej.net/people/tinevez - - tinevez - - - - Christian Tischer - https://imagej.net/people/tischi - - tischi - - - - Gabriella Turek - https://imagej.net/people/turekg - - turekg - - - - - - SciJava - https://groups.google.com/group/scijava - https://groups.google.com/group/scijava - scijava@googlegroups.com - https://groups.google.com/group/scijava - - - - scm:git:https://github.com/scijava/pom-scijava - scm:git:git@github.com:scijava/pom-scijava - https://github.com/scijava/pom-scijava - - - GitHub Issues - https://github.com/scijava/pom-scijava/issues - - - GitHub Actions - https://github.com/scijava/pom-scijava/actions - - - 3.4.2 - 3.4.2 - 2.0.1 - 0.5.4 - 2.0.2 - 2.0.2 - 1.11.0 - 1.18.0 - 3.0.1 - 3.0.1 - 1.2.10 - 2.1.1 - 2.0.2 - 2.0.1 - 3.0.0 - 3.0.6 - 2.0.7 - 2.5.0 - 3.0.3 - 2.1.0 - 2.1.0 - 1.0.6 - 2.1.8 - 2.1.2 - 2.1.2 - 2.3.0 - 2.3.0 - 2.0.4 - 2.0.3 - 2.0.1 - 2.0.8 - 2.1.1 - 3.1.3 - 2.0.1 - 2.0.1 - 2.0.1 - 1.0.2 - 2.3.5 - 1.1.5 - 1.1.1 - 2.0.2 - 2.0.1 - 4.2.2 - 4.2.2 - 2.0.2 - 3.0.1 - 3.0.1 - 2.0.1 - 2.0.0 - 2.0.1 - 3.0.0 - 4.1.2 - 4.1.2 - 2.0.2 - 2.0.1 - 5.0.0 - 5.0.0 - 2.0.1 - 2.0.1 - 2.0.1 - 7.1.1 - 2.1.1 - 1.6.2 - 1.6.2 - 3.0.1 - 2.0.0 - 2.0.0 - 1.1.2 - 1.1.2 - 2.0.2 - 2.0.2 - 2.0.5 - 4.2.1 - 2.0.2 - 5.0.25 - 4.3.4 - 2.0.3 - 2.0.3 - 2.0.1 - 3.1.10 - 1.0.5 - 2.1.1 - 2.1.1 - 2.0.2 - 2.0.2 - 2.1.2 - 2.0.1 - 3.1.9 - 3.1.9 - 1.7-fiji4 - 1.1.4 - 1.1.4 - 2.0.1 - 2.1.1 - 2.1.0 - 25.0.2 - 25.0.2 - 2.0.1 - 2.0.1 - 3.1.4 - 0.1.2 - 1.2.5 - 1.4.0 - 1.2.1 - 3.2.0 - 2.0.1 - 1.2.1 - 1.3.1 - 7.11.1 - 3.3.4 - 1.3.10 - 1.3.10 - 2.0.4 - 2.2.0 - 3.0.4 - 3.0.4 - 2.0.3 - 1.0.3 - 2.0.3 - 2.0.1 - 2.5.0 - 2.5.0 - 2.0.3 - 2.01.4 - <_3D_Blob_Segmentation.version>3.0.2 - <_3D_Objects_Counter.version>2.0.1 - <_3D_Viewer.version>4.0.5 - 1.2.7 - com.google.inject.*,javax.xml.namespace.QName,jnr.ffi.*,org.apache.hadoop.yarn.*.package-info,org.apache.spark.unused.UnusedStubClass,org.eclipse.aether.*,org.hibernate.stat.ConcurrentStatisticsImpl,org.junit.runner.Runner,org.jzy3d.plot3d.pipelines.* - 1.10.14 - 1.10.14 - 3.5.3 - 2.7.7 - 3.5.3 - 2.7.7 - 3.5.3 - 4.11.1 - 4.11.1 - 2.26.0 - 2.33 - 2.33 - 9.6 - 9.6 - 9.6 - 9.6 - 9.6 - 1.10.4 - 1.10.4 - 3.3.1 - ${package-guess} - 1.12.667 - 1.12.667 - 1.12.667 - 2.6.13 - 2.6.13 - 0.4.2 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 10.4.13 - 3.1.2 - 1.0.0-beta-34 - 6.2.4 - 9.1.0 - 9.1.0 - 1.0.0 - 7.2.0 - 7.2.0 - 7.2.0 - 2.1.4 - 2.1.4 - 7.0.18 - 7.0.18 - 7.0.18 - 7.0.18 - 7.0.18 - 7.0.18 - 0.7.0 - 3.5.0 - 3.2.0 - 2.0.SP1 - 3.3.0 - 3.3.0 - 1.2.12 - 1.2.12 - 1.2.25 - 3.42.0 - 19.04.1 - 2.2.10 - 2.5.0.1 - 1.8.1.1 - 2.3.0.4 - 2.5.1.4 - 2.5.3.1 - 1.9.0.1 - 0.32.1.1 - 0.32.2.0 - 2.7 - 1.12.667 - 1.12.667 - 5.6.0 - 1.3.1 - 1.11.9 - 2.16.1 - 2.16.1 - 2.16.1 - 2.16.1 - 2.16.1 - 3.3.1 - 3.3.0 - 3.4.0 - 2.304 - 3.4 - 1.3.13 - 0.10.4 - 2.2.16 - 3.1.19 - 1.5.5-11 - 0.12.0 - 4.2.2 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.26.0 - 2.43.0 - 2.43.0 - 2.43.0 - 2.34.0 - 1.29.0 - 1.23.0 - 1.23.0 - 1.23.0 - 1.10.4 - 1.10.4 - 2.33.0 - 2.33.0 - 0.127.13 - 1.38.0 - 2.34.0 - 2.10.1 - 2.25.0 - 33.0.0-jre - 1.44.1 - 1.44.1 - 1.44.1 - 1.44.1 - 1.44.1 - 1.44.1 - 2.8 - 3.23.0 - 3.23.0 - 3.23.0 - 1.7 - 5.5.13.3 - 0.1.55 - 1.1.3 - 5.3 - 5.3 - 5.3 - 0.7.0 - 5.9 - 4.12.0 - 3.8.0 - 1.1.3 - 3.6.5 - 3.6.5 - 1.9.4 - 1.9.4 - 1.6.0 - 1.6.0 - 1.16.1 - 1.16.1 - 3.2.2 - 3.2.2 - 4.4 - 1.26.0 - 1.10.0 - 2.15.1 - 2.15.1 - 2.6 - 2.6 - 3.14.0 - 1.3.0 - 1.3.0 - 3.6.1 - 2.12.0 - 1.11.0 - 0.4.8 - 26 - 26 - 1.9.10 - 11.1.0 - 11.1.0 - 11.1.0 - 11.1.0 - 4.3 - 20151125 - 0.41 - 2.25.0 - 2.25.0 - 3.2.0 - - 0.12.0 - 1.7.0 - 6.1.1-1.5.10 - 2.1.3 - 2.15.0 - 2.304 - 3.4 - 7.2.0 - 7.2.0 - 7.2.0 - 2.23.0 - 1.6.2 - 2.43.0 - 2.43.0 - 2.43.0 - 3.6.5 - 2.5.0 - 2.5.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 1.23.0 - 1.23.0 - 1.23.0 - 1.23.0 - 2.33.0 - 2.33.0 - 0.127.13 - 1.38.0 - 2.34.0 - 1.44.1 - 1.44.1 - 1.44.1 - 1.44.1 - 1.44.1 - 1.44.1 - 1.0.3 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 1.5 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 1.62.2 - 1.62.2 - 2.10.1 - 33.0.0-jre - 1.14.3-1.5.10 - 1.8.0.10 - 1.8.0.10 - 4.5.14 - 4.4.16 - 4.5.14 - 0.3.0 - 0.3.0 - 3.6.5 - 1.54h - 1.2.6 - 2.0.4 - 0.2.0 - 6.0.2 - 1.2.1 - 0.7.5 - 0.1.2 - 0.8.1 - 0.7.1 - 1.0.0-5.6 - 1.0.0-5.6 - 0.1.3 - 2.0.0 - 0.1.1 - 0.8.1 - 0.3.1 - 0.3.2 - 0.3.3 - 0.8.4 - 0.2.0 - 1.1.7 - 0.3.1 - 1.0.1 - 1.0.1 - 2.15.0 - 1.54h - 2.15.0 - 0.2.1 - 0.3.1 - 0.14.0 - 1.0.0-beta-17 - 2.0.1 - 2.0.0 - 0.12.0 - 4.0.1 - 0.14.1 - 1.0.0 - 6.3.0 - 1.9.0 - 4.7.5 - 1.62.2 - 0.3.0 - 4.1.1 - 0.6.1 - 0.2.2 - 1.1.1 - 0.3.1 - 0.9.0 - 0.17.1 - 0.46.0 - 5.5.13.3 - 2.5.2 - 2.8 - 1.6.0-scijava-2 - 1.6.0-scijava-2 - 2.21.22 - 2.16.1 - 2.16.1 - 2.16.1 - 2.16.1 - 2.16.1 - 2.16.1 - 0.8.11 - 1.1.3 - 1.1.3 - 1.1.3 - 1.0.3 - 1.7.2 - 1.7.2 - 1.6.0-scijava-2 - 1.5.10 - 1.5.10 - - - 8.8.3 - 3.30.2-GA - 2.0.SP1 - 1.1.3 - 1.0.1 - 1.7.36 - 1.0.58 - 2.0.6.1 - 2.4.2 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 1.3.13 - 1.5.4 - 3.4.3 - 1.4.0 - 1.4.0 - 1.4.0 - 1.4.0 - 1.4.0 - 1.4.0 - 1.4.0 - 4.2.2 - 19.04.1 - 0.14 - 3.0.4 - 3.0.4 - 3.25.1 - 3.25.1 - 3.25.1 - 3.25.1 - 3.25.1 - 3.25.1 - 3.25.1 - 3.25.1 - 2.14.6 - 2.14.6 - 2.14.6 - 3.25.1 - 1.37 - 1.37 - 1.37 - 1.49 - 5.14.0 - 5.14.0 - 0.10.4 - 2.2.16 - 3.1.19 - 2.5.0 - 2.0.5 - 2.12.7 - 2.12.7 - 1.7.2 - 2.5.0 - 2.5.0 - 2.5.0 - 1.10.5 - 2.2.1 - 2.80b11 - 2.80b11 - 0.2.1 - 0.1.55 - 1.4 - 20240205 - 0.7.4-scijava - 5.10.2 - 5.10.2 - 5.10.2 - 5.10.2 - 5.10.2 - 5.10.2 - 4.13.2 - 4.13.2 - 0.2.4 - 0.2.4 - 2.7.3 - 2.7.3 - 1.1.3 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.8.0 - 1.8.0 - 1.8.0 - 5.6.0 - 0.1.17 - 0.3.11 - 3.3.0 - 1.1.10 - 1.84.1-1.5.10 - 1.0.2 - 1.12.0 - 1.12.0 - 1.12.0 - 2.4.0 - N/A - **/script_templates/** - N/A - This POM provides a parent from which participating projects can declare their build configurations. It ensures that projects all use a compatible build environment, including Java version, as well as versions of dependencies and plugins. - 2.20.0 - 2.20.0 - 2.20.0 - 1.2.12 - 1.2.12 - 1.2.12 - 1.8.0 - - 3.1.0 - 3.1.0 - 0.13.1 - 3.6.0 - 3.3.2 - 3.3.2 - 3.8.1 - 3.9.6 - 3.6.1 - 3.1.1 - 3.4.1 - 3.2.5 - 3.1.0 - 1.45 - 3.4.0 - 3.1.1 - 3.6.0 - 3.3.0 - 3.6.3 - 3.11.0 - 3.11.0 - 3.5.0 - 3.0.1 - 3.3.1 - 3.5.2 - 3.12.1 - 3.3.0 - 3.2.5 - yyyy-MM-dd'T'HH:mm:ssZ - 8 - 8 - 8 - 8 - 8 - false - 5.3.6 - 5.3 - 5.3 - 5.3 - 5.3 - 20151125 - 2.2.2 - 1.3.1 - 2.19.0 - 2.19.0 - 1.5.0 - 1.5.0 - 1.5.0 - 1.5.0 - 3.2.7 - 0.2.0 - 4.0.2 - 1.1.1 - 4.0.0 - 2.1.0 - 4.0.2 - 7.0.0 - 1.3.2 - 6.0.1 - 1.2.1 - 1.0.2 - 3.1.3 - 2.5.0 - 1.2.7 - 0.4.8 - 2.2.10 - 2.5.0.1 - 1.8.1.1 - 2.3.0.4 - 2.5.1.4 - 2.5.3.1 - 1.9.0.1 - 0.32.1.1 - 0.32.2.0 - 1.54h - 1.2.6 - 2.0.4 - 0.2.0 - 6.0.2 - 1.2.1 - 0.7.5 - 0.1.2 - 0.8.1 - 0.7.1 - 1.0.0-5.6 - 1.0.0-5.6 - 0.1.3 - 2.0.0 - 0.1.1 - 0.8.1 - 0.3.1 - 0.3.2 - 0.3.3 - 0.8.4 - 0.2.0 - 1.1.7 - 0.3.1 - 1.0.1 - 1.0.1 - 2.15.0 - 0.1.4 - 0.2.1 - 0.3.1 - 0.14.0 - 1.0.0-beta-17 - 2.0.1 - 2.0.0 - 0.12.0 - 4.0.1 - 0.14.1 - 1.0.0 - 6.3.0 - 5.14.0 - 5.14.0 - 1.2.10 - 3.2.7 - 0.2.0 - 3.0.3 - 1.6.13 - 3.9.6 - 3.3 - 45.1.1 - 4.12.0 - 3.8.0 - 1.0.1 - 6.0.21 - 5.3.8 - 6.3.4 - 7.2.0 - 7.2.0 - 7.2.0 - 7.2.0 - 7.2.0 - 0.2.4 - 5.7.2 - 5.6.4 - 5.5.2 - 5.9.0 - 5.6.13 - 5.5.15 - 5.7.5 - 5.6.10 - 0.1.4 - 0.3.26-1.5.10 - 5.9 - 4.9.0-1.5.10 - 4.3.4 - 3.5.3 - 3.5.3 - 4.11.1 - 4.11.1 - 1.10.14 - 1.10.14 - 4.4 - 1.26.0 - 1.10.0 - 3.14.0 - 3.6.1 - 2.12.0 - 1.11.0 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.5.14 - 4.4.16 - 4.5.14 - 2.5.2 - 2.21.22 - 2.20.0 - 2.20.0 - 3.9.6 - 3.11.0 - 0.13.1 - 3.3.2 - 5.2.5 - 5.2.5 - 5.2.5 - 5.2.5 - 5.2.5 - 5.2.5 - 2.4.8 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 2.9 - 7.0.18 - 7.0.18 - 7.0.18 - 7.0.18 - 7.0.18 - 6.1.1-1.5.10 - 1.14.3-1.5.10 - 1.5.10 - 1.5.10 - 1.84.1-1.5.10 - 0.3.26-1.5.10 - 4.9.0-1.5.10 - 5.3.4-1.5.10 - 3.42.0 - 2.2.0 - 4.0.0 - 11.1.0 - 11.1.0 - 11.1.0 - 11.1.0 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 0.41 - 1.1.5 - 1.0.2 - 4.0.2 - 1.1.1 - 4.0.0 - 2.1.0 - 4.0.2 - 7.0.0 - 1.3.2 - 6.0.1 - 1.2.1 - 3.1.3 - 3.30.2-GA - 2.0.6.1 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.8.0 - 1.8.0 - 1.5.4 - 3.4.3 - 1.4.0 - 1.4.0 - 1.4.0 - 1.4.0 - 1.4.0 - 1.4.0 - 0.14 - 3.25.1 - 3.25.1 - 3.25.1 - 3.25.1 - 3.25.1 - 3.25.1 - 3.25.1 - 3.25.1 - 1.49 - 2.0.5 - 2.5.0 - 2.5.0 - 1.7.2 - 1.7.2 - 1.7.2 - 2.5.0 - 2.5.0 - 2.5.0 - 2.5.0 - 1.10.5 - 2.80b11 - 1.0.58 - 2.2.1 - 20240205 - 5.10.2 - 5.10.2 - 5.10.2 - 5.10.2 - 5.10.2 - 5.10.2 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 1.0.1 - 1.8.0 - 3.1.0 - 2.19.0 - 4.2.1 - 3.3 - 45.1.1 - 1.37 - 1.37 - 5.3.6 - 1.0.1 - 6.0.21 - 5.3.8 - 6.3.4 - 5.7.2 - 5.6.4 - 5.5.2 - 5.9.0 - 5.6.13 - 5.5.15 - 5.7.5 - 5.6.10 - 9.6 - 9.6 - 9.6 - 9.6 - 9.6 - 42.7.2 - 2.7.3 - 0.4.2 - 1.6.0-scijava-2 - 1.6.0-scijava-2 - 2.4.2 - 0.7.4-scijava - 2.2.2 - 2.5.0 - 3.1.0 - 0.1.2 - 2.98.0 - 2.0.3 - 0.1.2 - 0.3.0 - 0.1.0 - 1.0.0-beta-3 - 1.0.6 - 1.0.1 - 0.2.0 - 0.2.4 - 0.3.1 - 0.1.3 - 0.1.4 - 2.0.4 - 1.0.2 - 0.1.7 - 1.0.1 - 1.1.0 - 0.2.1 - 1.0.0 - 0.4.1 - 0.1.6 - 1.0.0 - 0.4.1 - 1.0.0 - 0.3.1 - 1.0.1 - 0.2.1 - 0.5.3 - 0.3.0 - 0.2.3 - 0.3.2 - 1.0.2 - 2.0.8 - 1.6.0-scijava-2 - 1.7.36 - 1.7.36 - 1.7.36 - 1.7.36 - 1.7.36 - 1.7.36 - 1.7.36 - 0.2.1 - 2.7 - 2.6.0 - 2.6.0 - 3.2.9.RELEASE - 3.2.9.RELEASE - 3.2.9.RELEASE - 1.12.0 - 1.12.0 - 1.12.0 - 1.12.0 - 1.12.0 - 1.6.8 - 1.9 - 2.2 - ${package-guess} - 2.0.1 - 3.0.2 - 3.0.2 - 3.1.0 - 4.7.5 - 2.2.0 - 4.0.0 - 5.2.5 - 5.2.5 - 5.2.5 - 5.2.5 - 5.2.5 - 5.2.5 - 42.7.2 - - UTF-8 - UTF-8 - 2.34.0 - 1.29.0 - 1.12.0 - 3.23.0 - 3.23.0 - 3.23.0 - 3.23.0 - 1.7 - 1.11.9 - 3.0.8 - 2.0.1 - sonatype-oss-release - 1.2.25 - 0.28.1 - 0.15.0 - 3.4.0 - 3.0.2 - 2.0.1 - 4.0.5 - 3.4.2 - 2.0.1 - 0.5.4 - 2.0.2 - 1.11.0 - 1.18.0 - 3.0.1 - 3.0.1 - 2.1.1 - 2.0.2 - 2.0.1 - 3.0.0 - 3.0.6 - 2.0.7 - 2.5.0 - 3.0.3 - 2.1.0 - 1.0.6 - 2.1.8 - 2.1.2 - 2.3.0 - 2.0.4 - 2.0.3 - 2.0.1 - 2.0.8 - 2.1.1 - 3.1.3 - 2.0.1 - 2.0.1 - 1.0.2 - 2.3.5 - 1.1.1 - 2.0.2 - 2.0.1 - 4.2.2 - 2.0.2 - 3.0.1 - 3.0.1 - 2.0.1 - 2.0.0 - 2.0.1 - 3.0.0 - 4.1.2 - 4.1.2 - 2.0.2 - 2.0.1 - 5.0.0 - 5.0.0 - 2.0.1 - 2.0.1 - 7.1.1 - 2.1.1 - 3.0.1 - 2.0.0 - 2.0.0 - 1.1.2 - 2.0.2 - 2.0.5 - 2.0.2 - 5.0.25 - 2.0.3 - 2.0.1 - 3.1.10 - 1.0.5 - 2.1.1 - 2.0.2 - 2.1.2 - 2.0.1 - 3.1.9 - 1.7-fiji4 - 1.1.4 - 1.1.4 - 2.0.1 - 2.1.1 - 2.1.0 - 25.0.2 - 2.0.1 - 3.1.4 - 0.1.2 - 1.2.5 - 1.4.0 - 1.2.1 - 3.2.0 - 2.0.1 - 1.2.1 - 1.3.1 - 7.11.1 - 3.3.4 - 1.3.10 - 2.0.4 - 2.2.0 - 3.0.4 - 2.0.3 - 1.0.3 - 2.0.3 - 2.0.1 - 2.5.0 - 2.0.3 - 2.01.4 - 2.6.13 - 10.4.13 - 3.1.2 - 1.0.0-beta-34 - 6.2.4 - 9.1.0 - 1.0.0 - 2.1.4 - 2.1.3 - 2.15.0 - 0.1.17 - 0.3.11 - 1.1.10 - 1.0.2 - 2.0.1 - 3.0.2 - 3.0.8 - 2.0.1 - 2.2.7 - 1.0.1 - 2.0.0 - 2.1.1 - 1.1.2 - 4.1.1 - 0.6.1 - 0.2.2 - 1.1.1 - 0.3.1 - 0.9.0 - 0.17.1 - 0.46.0 - 0.1.2 - 2.1.1 - 2.98.0 - 2.0.3 - 0.1.2 - 0.3.0 - 0.1.0 - 1.0.0-beta-3 - 1.0.6 - 3.0.0 - 1.0.1 - 0.2.0 - 0.2.4 - 0.3.1 - 0.1.3 - 0.1.4 - 2.0.4 - 1.0.2 - 0.1.7 - 1.0.1 - com.google.inject.*,javax.xml.namespace.QName,jnr.ffi.*,org.apache.hadoop.yarn.*.package-info,org.apache.spark.unused.UnusedStubClass,org.eclipse.aether.*,org.hibernate.stat.ConcurrentStatisticsImpl,org.junit.runner.Runner,org.jzy3d.plot3d.pipelines.* - scijava - **/script_templates/** - java - org.scijava,net.imagej,net.imglib2,io.scif,sc.fiji - https://javadoc.scijava.org/Java8/ - https://javadoc.scijava.org/JavaFX8/ - [1.8.0-101,) - 8 - 8 - 3.6.3 - natives-linux_64 - linux-x86_64 - natives-linux-amd64 - linux-x86_64 - linux-x86_64 - natives-linux-amd64 - natives-linux-amd64 - natives-linux-amd64 - natives-linux-amd64 - linux-x86_64 - linux-x86_64 - linux-x86_64 - linux-x86_64 - 64 - x86_64 - amd64 - linux - linux - linux - linux - - founder,lead,developer,debugger,reviewer,support,maintainer - 1.1.0 - 0.2.1 - 1.0.0 - 0.4.1 - 0.1.6 - 1.0.0 - 0.4.1 - 1.0.0 - 0.3.1 - 1.0.1 - 0.2.1 - 0.5.3 - 0.3.0 - 0.2.3 - 0.3.2 - 2.6.0 - 2.6.0 - 1.7.36 - 1.7.36 - 1.7.36 - 1.7.36 - 1.7.36 - 1.7.36 - 1.7.36 - 2.7 - 2.2 - 3.10.0.2594 - https://s01.oss.sonatype.org - 2.4.8 - 2.4.8 - 2.2.7 - 3.2.9.RELEASE - 3.2.9.RELEASE - 3.2.9.RELEASE - 3.2.9.RELEASE - 1.0.2 - 1.12.0 - 5.3.4-1.5.10 - 0.12.0 - 1.6.8 - 1.2.0 - 1.0.1 - 2.0.0 - 3.0.3 - all - 2.0.8 - 1.6.0-scijava-2 - 1.7 - 2.16.2 - 1.0 - 2.1.1 - 3.9.6 - 3.9.6 - 2.9 - 1.9 - 1.1.2 - 1.5.5-11 - - - - - org.scijava - batch-processor - 0.4.2 - - - org.scijava - minimaven - 2.2.2 - - - org.scijava - native-lib-loader - 2.5.0 - - - org.scijava - parsington - 3.1.0 - - - org.scijava - scijava-cache - 0.1.2 - - - org.scijava - scijava-common - 2.98.0 - - - org.scijava - scijava-config - 2.0.3 - - - org.scijava - scijava-grab - 0.1.2 - - - org.scijava - scijava-io-http - 0.3.0 - - - org.scijava - scijava-java3d - 0.1.0 - - - org.scijava - scijava-listeners - 1.0.0-beta-3 - - - org.scijava - scijava-log-slf4j - 1.0.6 - - - org.scijava - scijava-optional - 1.0.1 - - - org.scijava - scijava-plot - 0.2.0 - - - org.scijava - scijava-plugins-commands - 0.2.4 - - - org.scijava - scijava-plugins-platforms - 0.3.1 - - - org.scijava - scijava-plugins-text-markdown - 0.1.3 - - - org.scijava - scijava-plugins-text-plain - 0.1.4 - - - org.scijava - scijava-search - 2.0.4 - - - org.scijava - scijava-table - 1.0.2 - - - org.scijava - scijava-ui-awt - 0.1.7 - - - org.scijava - scijava-ui-swing - 1.0.1 - - - org.scijava - script-editor - 1.0.0 - - - org.scijava - script-editor-jython - 1.1.0 - - - org.scijava - script-editor-scala - 0.2.1 - - - org.scijava - scripting-beanshell - 0.4.1 - - - org.scijava - scripting-clojure - 0.1.6 - - - org.scijava - scripting-groovy - 1.0.0 - - - org.scijava - scripting-java - 0.4.1 - - - org.scijava - scripting-javascript - 1.0.0 - - - org.scijava - scripting-jruby - 0.3.1 - - - org.scijava - scripting-jython - 1.0.1 - - - org.scijava - scripting-kotlin - 0.2.1 - - - org.scijava - scripting-matlab - 0.5.3 - - - org.scijava - scripting-python - 0.3.0 - - - org.scijava - scripting-renjin - 0.2.3 - - - org.scijava - scripting-scala - 0.3.2 - - - org.scijava - swing-checkbox-tree - 1.0.2 - - - org.scijava - ui-behaviour - 2.0.8 - - - net.imagej - imagej - 2.15.0 - - - net.imagej - ij - 1.54h - - - com.sun - tools - - - - - net.imagej - ij1-patcher - 1.2.6 - - - net.imagej - imagej-common - 2.0.4 - - - net.imagej - imagej-deprecated - 0.2.0 - - - net.imagej - imagej-launcher - 6.0.2 - - - net.imagej - imagej-legacy - 1.2.1 - - - net.imagej - imagej-matlab - 0.7.5 - - - net.imagej - imagej-mesh - 0.8.1 - - - net.imagej - imagej-mesh-io - 0.1.2 - - - net.imagej - imagej-notebook - 0.7.1 - - - net.imagej - imagej-omero - 1.0.0-5.6 - - - net.imagej - imagej-omero-legacy - 1.0.0-5.6 - - - net.imagej - imagej-opencv - 0.1.3 - - - net.imagej - imagej-ops - 2.0.0 - - - net.imagej - imagej-plugins-batch - 0.1.1 - - - net.imagej - imagej-plugins-commands - 0.8.1 - - - net.imagej - imagej-plugins-tools - 0.3.1 - - - net.imagej - imagej-plugins-uploader-ssh - 0.3.2 - - - net.imagej - imagej-plugins-uploader-webdav - 0.3.3 - - - net.imagej - imagej-scripting - 0.8.4 - - - net.imagej - imagej-server - 0.2.0 - - - net.imagej - imagej-tensorflow - 1.1.7 - - - net.imagej - imagej-ui-awt - 0.3.1 - - - net.imagej - imagej-ui-swing - 1.0.1 - - - net.imagej - imagej-updater - 1.0.1 - - - net.imagej - op-finder - 0.1.4 - - - net.imglib2 - imglib2 - 6.3.0 - - - net.imglib2 - imglib2-algorithm - 0.14.0 - - - net.imglib2 - imglib2-algorithm-fft - 0.2.1 - - - net.imglib2 - imglib2-algorithm-gpl - 0.3.1 - - - net.imglib2 - imglib2-cache - 1.0.0-beta-17 - - - net.imglib2 - imglib2-ij - 2.0.1 - - - net.imglib2 - imglib2-imglyb - 2.0.0 - - - net.imglib2 - imglib2-realtransform - 4.0.1 - - - net.imglib2 - imglib2-roi - 0.14.1 - - - net.imglib2 - imglib2-unsafe - 1.0.0 - - - io.scif - scifio - 0.46.0 - - - io.scif - scifio-bf-compat - 4.1.1 - - - io.scif - scifio-cli - 0.6.1 - - - io.scif - scifio-hdf5 - 0.2.2 - - - io.scif - scifio-jai-imageio - 1.1.1 - - - io.scif - scifio-labeling - 0.3.1 - - - io.scif - scifio-lifesci - 0.9.0 - - - io.scif - scifio-ome-xml - 0.17.1 - - - sc.fiji - fiji - 2.15.0 - - - sc.fiji - 3D_Blob_Segmentation - 3.0.2 - - - sc.fiji - 3D_Objects_Counter - 2.0.1 - - - sc.fiji - 3D_Viewer - 4.0.5 - - - sc.fiji - AnalyzeSkeleton_ - 3.4.2 - - - sc.fiji - Anisotropic_Diffusion_2D - 2.0.1 - - - sc.fiji - Archipelago_Plugins - 0.5.4 - - - sc.fiji - Arrow_ - 2.0.2 - - - sc.fiji - Auto_Local_Threshold - 1.11.0 - - - sc.fiji - Auto_Threshold - 1.18.0 - - - sc.fiji - BalloonSegmentation_ - 3.0.1 - - - sc.fiji - Bug_Submitter - 2.1.1 - - - sc.fiji - CPU_Meter - 2.0.2 - - - sc.fiji - Calculator_Plus - 2.0.1 - - - sc.fiji - Cell_Counter - 3.0.0 - - - sc.fiji - Colocalisation_Analysis - 3.0.6 - - - sc.fiji - Color_Histogram - 2.0.7 - - - sc.fiji - Color_Inspector_3D - 2.5.0 - - - sc.fiji - Colour_Deconvolution - 3.0.3 - - - sc.fiji - CorrectBleach_ - 2.1.0 - - - sc.fiji - Correct_3D_Drift - 1.0.6 - - - sc.fiji - Descriptor_based_registration - 2.1.8 - - - sc.fiji - Dichromacy_ - 2.1.2 - - - sc.fiji - Directionality_ - 2.3.0 - - - sc.fiji - FS_Align_TrakEM2 - 2.0.4 - - - sc.fiji - Feature_Detection - 2.0.3 - - - sc.fiji - Fiji_Archipelago - 2.0.1 - - - sc.fiji - Fiji_Developer - 2.0.8 - - - sc.fiji - Fiji_Package_Maker - 2.1.1 - - - sc.fiji - Fiji_Plugins - 3.1.3 - - - sc.fiji - FilamentDetector - 2.0.1 - - - sc.fiji - FlowJ_ - 2.0.1 - - - sc.fiji - Graph_Cut - 1.0.2 - - - sc.fiji - Gray_Morphology - 2.3.5 - - - org.janelia - H5J_Loader_Plugin - 1.1.5 - - - sc.fiji - HDF5_Vibez - 1.1.1 - - - sc.fiji - Helmholtz_Analysis - 2.0.2 - - - sc.fiji - IJ_Robot - 2.0.1 - - - sc.fiji - IO_ - 4.2.2 - - - sc.fiji - Image_5D - 2.0.2 - - - sc.fiji - Image_Expression_Parser - 3.0.1 - - - sc.fiji - Interactive_3D_Surface_Plot - 3.0.1 - - - sc.fiji - IsoData_Classifier - 2.0.1 - - - sc.fiji - Kappa - 2.0.0 - - - sc.fiji - Kuwahara_Filter - 2.0.1 - - - sc.fiji - KymographBuilder - 3.0.0 - - - sc.fiji - LSM_Reader - 4.1.2 - - - sc.fiji - LSM_Toolbox - 4.1.2 - - - sc.fiji - Lasso_and_Blow_Tool - 2.0.2 - - - sc.fiji - Linear_Kuwahara - 2.0.1 - - - sc.fiji - LocalThickness_ - 5.0.0 - - - sc.fiji - MTrack2_ - 2.0.1 - - - sc.fiji - M_I_P - 2.0.1 - - - sc.fiji - Manual_Tracking - 2.1.1 - - - sc.fiji - Multi_Kymograph - 3.0.1 - - - sc.fiji - OMEVisual - 2.0.0 - - - sc.fiji - PIV_analyser - 2.0.0 - - - sc.fiji - QuickPALM_ - 1.1.2 - - - sc.fiji - RATS_ - 2.0.2 - - - sc.fiji - Reconstruct_Reader - 2.0.5 - - - sc.fiji - SPIM_Opener - 2.0.2 - - - sc.fiji - SPIM_Registration - 5.0.25 - - - sc.fiji - Samples_ - 2.0.3 - - - sc.fiji - Series_Labeler - 2.0.1 - - - sc.fiji - Siox_Segmentation - 1.0.5 - - - sc.fiji - Skeletonize3D_ - 2.1.1 - - - sc.fiji - SplineDeformationGenerator_ - 2.0.2 - - - sc.fiji - Stack_Manipulation - 2.1.2 - - - sc.fiji - Statistical_Region_Merging - 2.0.1 - - - sc.fiji - Stitching_ - 3.1.9 - - - sc.fiji - Sync_Win - 1.7-fiji4 - - - sc.fiji - Thread_Killer - 2.0.1 - - - sc.fiji - Time_Lapse - 2.1.1 - - - sc.fiji - Time_Stamper - 2.1.0 - - - sc.fiji - ToAST_ - 25.0.2 - - - sc.fiji - TopoJ_ - 2.0.1 - - - sc.fiji - Trainable_Segmentation - 3.3.4 - - - sc.fiji - TrakEM2_Archipelago - 2.0.4 - - - sc.fiji - VIB-lib - 2.2.0 - - - sc.fiji - VIB_ - 3.0.4 - - - sc.fiji - Vaa3d_Reader - 2.0.3 - - - sc.fiji - Vaa3d_Writer - 1.0.3 - - - sc.fiji - Video_Editing - 2.0.1 - - - sc.fiji - View5D_ - 2.5.0 - - - sc.fiji - Volume_Calculator - 2.0.3 - - - sc.fiji - Volume_Viewer - 2.01.4 - - - sc.fiji - bUnwarpJ_ - 2.6.13 - - - sc.fiji - bij - 1.0.0 - - - sc.fiji - blockmatching_ - 2.1.4 - - - sc.fiji - fiji-lib - 2.1.3 - - - sc.fiji - legacy-imglib1 - 1.1.10 - - - sc.fiji - level_sets - 1.0.2 - - - sc.fiji - pal-optimization - 2.0.1 - - - sc.fiji - panorama_ - 3.0.2 - - - sc.fiji - register_virtual_stack_slices - 3.0.8 - - - sc.fiji - registration_3d - 2.0.1 - - - sc.fiji - weave_jy2java - 2.1.1 - - - jitk - jitk-tps - 3.0.4 - - - sc.fiji - bigwarp_fiji - 9.1.0 - - - com.googlecode.efficient-java-matrix-library - ejml - - - - - mpicbg - mpicbg - 1.5.0 - - - mpicbg - mpicbg_ - 1.5.0 - - - sc.fiji - trakem2_tps - 2.0.0 - - - sc.fiji - z_spacing - 1.1.2 - - - sc.fiji - bigdataviewer-core - 10.4.13 - - - sc.fiji - bigdataviewer-server - 3.1.2 - - - sc.fiji - bigdataviewer-vistools - 1.0.0-beta-34 - - - sc.fiji - bigdataviewer_fiji - 6.2.4 - - - sc.fiji - spim_data - 2.2.7 - - - sc.fiji - TrackMate - 7.11.1 - - - sc.fiji - TrackMate-Cellpose - 0.1.2 - - - sc.fiji - TrackMate-CSVImporter - 3.1.4 - - - sc.fiji - TrackMate-ExTrack - 1.2.5 - - - sc.fiji - TrackMate-Ilastik - 1.4.0 - - - sc.fiji - TrackMate-MorphoLibJ - 1.2.1 - - - sc.fiji - TrackMate-Oneat - 3.2.0 - - - sc.fiji - TrackMate-Skeleton - 2.0.1 - - - sc.fiji - TrackMate-StarDist - 1.2.1 - - - sc.fiji - TrackMate-Weka - 1.3.1 - - - sc.fiji - T2-NIT - 1.1.4 - - - sc.fiji - T2-TreelineGraph - 1.1.4 - - - sc.fiji - TrakEM2_ - 1.3.10 - - - sc.fiji - VectorString - 2.0.3 - - - sc.fiji - trakem2-transform - 1.0.1 - - - net.imglib2 - imglib2-label-multisets - 0.12.0 - - - org.janelia.saalfeldlab - n5 - 3.1.3 - - - org.janelia.saalfeldlab - n5-aws-s3 - 4.0.2 - - - org.janelia.saalfeldlab - n5-blosc - 1.1.1 - - - org.janelia.saalfeldlab - n5-google-cloud - 4.0.0 - - - org.janelia.saalfeldlab - n5-hdf5 - 2.1.0 - - - org.janelia.saalfeldlab - n5-ij - 4.0.2 - - - org.janelia.saalfeldlab - n5-imglib2 - 7.0.0 - - - org.janelia.saalfeldlab - n5-universe - 1.3.2 - - - org.janelia.saalfeldlab - n5-viewer_fiji - 6.0.1 - - - org.janelia.saalfeldlab - n5-zarr - 1.2.1 - - - fr.inra.ijpb - MorphoLibJ_ - 1.6.2 - - - net.haesleinhuepf - clij_ - 1.9.0.1 - - - net.haesleinhuepf - clij-core - 1.8.1.1 - - - net.haesleinhuepf - clij-coremem - 2.3.0.4 - - - net.haesleinhuepf - clij-clearcl - 2.5.0.1 - - - net.haesleinhuepf - clij2_ - 2.5.3.1 - - - net.haesleinhuepf - clij2-assistant_ - 2.5.1.4 - - - net.haesleinhuepf - clijx_ - 0.32.2.0 - - - net.haesleinhuepf - clijx-weka_ - 0.32.1.1 - - - net.preibisch - BigStitcher - 1.2.10 - - - net.preibisch - multiview-reconstruction - 3.2.7 - - - net.preibisch - multiview-simulation - 0.2.0 - - - org.bonej - bonej-plugins - 7.0.18 - - - org.bonej - bonej-ops - 7.0.18 - - - org.bonej - bonej-legacy-plugins_ - 7.0.18 - - - org.bonej - bonej-legacy-util_ - 7.0.18 - - - org.bonej - bonej-utilities - 7.0.18 - - - org.morphonets - SNT - 4.2.1 - - - org.jzy3d - jzy3d-emul-gl - - - org.jzy3d - jGL - - - - - sc.fiji - MaMuT - 7.1.1 - - - sc.fiji - labkit-pixel-classification - 0.1.17 - - - sc.fiji - labkit-ui - 0.3.11 - - - com.zeroc - glacier2 - 3.6.5 - - - com.zeroc - ice - 3.6.5 - - - org.openmicroscopy - metakit - 5.3.6 - - - ch.qos.logback - logback-classic - - - - - org.openmicroscopy - ome-codecs - 1.0.1 - - - org.openmicroscopy - ome-common - 6.0.21 - - - ch.qos.logback - logback-classic - - - xalan - serializer - - - xalan - xalan - - - - - org.openmicroscopy - ome-poi - 5.3.8 - - - org.openmicroscopy - ome-xml - 6.3.4 - - - ome - jxrlib-all - 0.2.4 - - - ome - bio-formats-tools - 7.2.0 - - - xalan - serializer - - - xalan - xalan - - - - - ome - bio-formats_plugins - 7.2.0 - - - ch.qos.logback - logback-classic - - - - - ome - formats-api - 7.2.0 - - - xalan - serializer - - - xalan - xalan - - - - - ome - formats-bsd - 7.2.0 - - - xalan - serializer - - - xalan - xalan - - - - - ome - formats-gpl - 7.2.0 - - - org.openmicroscopy - omero-blitz - 5.7.2 - - - com.sun.activation - javax.activation - - - org.apache.xmlgraphics - batik-all - - - - - org.openmicroscopy - omero-common - 5.6.4 - - - ch.qos.logback - logback-classic - - - - - org.openmicroscopy - omero-dsl-plugin - 5.5.2 - - - org.openmicroscopy - omero-gateway - 5.9.0 - - - org.openmicroscopy - omero-model - 5.6.13 - - - javax.transaction - jta - - - org.apache.solr - solr-commons-csv - - - - - org.openmicroscopy - omero-renderer - 5.5.15 - - - c3p0 - c3p0 - - - - - org.openmicroscopy - omero-romio - 5.7.5 - - - org.openmicroscopy - omero-server - 5.6.10 - - - c3p0 - c3p0 - - - com.sun.mail - javax.mail - - - javax.activation - activation - - - org.apache.xmlgraphics - batik-all - - - - - net.clearcontrol - coremem - 0.4.8 - - - com.google.android.tools - dx - - - - - net.clearvolume - cleargl - 2.2.10 - - - org.jogamp.gluegen - gluegen-rt-main - - - org.jogamp.jogl - jogl-all-main - - - - - net.algart - algart-tiff - 1.2.7 - - - com.amazonaws - aws-java-sdk-core - 1.12.667 - - - com.amazonaws - aws-java-sdk-s3 - 1.12.667 - - - antlr - antlr - 2.7.7 - - - org.antlr - ST4 - 4.3.4 - - - org.antlr - antlr - 3.5.3 - - - org.antlr - antlr-runtime - 3.5.3 - - - org.apache.ant - ant - 1.10.14 - - - org.apache.ant - ant-launcher - 1.10.14 - - - org.apache.groovy - groovy - 4.0.18 - - - org.apache.groovy - groovy-ant - 4.0.18 - - - org.apache.groovy - groovy-astbuilder - 4.0.18 - - - org.apache.groovy - groovy-cli-commons - 4.0.18 - - - org.apache.groovy - groovy-cli-picocli - 4.0.18 - - - org.apache.groovy - groovy-console - 4.0.18 - - - org.apache.groovy - groovy-contracts - 4.0.18 - - - org.apache.groovy - groovy-datetime - 4.0.18 - - - org.apache.groovy - groovy-dateutil - 4.0.18 - - - org.apache.groovy - groovy-docgenerator - 4.0.18 - - - org.apache.groovy - groovy-ginq - 4.0.18 - - - org.apache.groovy - groovy-groovydoc - 4.0.18 - - - org.apache.groovy - groovy-groovysh - 4.0.18 - - - org.apache.groovy - groovy-jmx - 4.0.18 - - - org.apache.groovy - groovy-json - 4.0.18 - - - org.apache.groovy - groovy-jsr223 - 4.0.18 - - - org.apache.groovy - groovy-macro - 4.0.18 - - - org.apache.groovy - groovy-macro-library - 4.0.18 - - - org.apache.groovy - groovy-nio - 4.0.18 - - - org.apache.groovy - groovy-servlet - 4.0.18 - - - org.apache.groovy - groovy-sql - 4.0.18 - - - org.apache.groovy - groovy-swing - 4.0.18 - - - org.apache.groovy - groovy-templates - 4.0.18 - - - org.apache.groovy - groovy-test - 4.0.18 - - - org.apache.groovy - groovy-test-junit5 - 4.0.18 - - - org.apache.groovy - groovy-testng - 4.0.18 - - - org.apache.groovy - groovy-toml - 4.0.18 - - - org.apache.groovy - groovy-typecheckers - 4.0.18 - - - org.apache.groovy - groovy-xml - 4.0.18 - - - org.apache.groovy - groovy-yaml - 4.0.18 - - - org.apache.ivy - ivy - 2.5.2 - - - org.apache.logging.log4j - log4j-api - 2.20.0 - - - org.apache.logging.log4j - log4j-core - 2.20.0 - - - org.apache.maven.shared - maven-artifact-transfer - 0.13.1 - - - org.apache.maven.shared - maven-common-artifact-filters - 3.3.2 - - - org.apache.maven - maven-core - 3.9.6 - - - org.apache.maven.plugin-tools - maven-plugin-tools-api - 3.11.0 - - - org.codehaus.plexus - plexus-component-annotations - 2.2.0 - - - org.codehaus.plexus - plexus-utils - 4.0.0 - - - org.sonatype.sisu - sisu-inject-bean - 2.6.0 - - - org.sonatype.sisu - sisu-inject-plexus - 2.6.0 - - - org.apache.poi - poi - 5.2.5 - - - org.apache.poi - poi-examples - 5.2.5 - - - org.apache.poi - poi-excelant - 5.2.5 - - - org.apache.poi - poi-ooxml - 5.2.5 - - - org.apache.poi - poi-ooxml-lite - 5.2.5 - - - org.apache.poi - poi-scratchpad - 5.2.5 - - - org.apache.spark - spark-core_2.11 - 2.4.8 - - - com.sun.jersey - jersey-core - - - commons-beanutils - commons-beanutils-core - - - io.netty - netty-all - - - - - org.apache.httpcomponents - httpclient - 4.5.14 - - - org.apache.httpcomponents - httpcore - 4.4.16 - - - org.apache.httpcomponents - httpmime - 4.5.14 - - - args4j - args4j - 2.33 - - - org.ow2.asm - asm - 9.6 - - - org.ow2.asm - asm-analysis - 9.6 - - - org.ow2.asm - asm-commons - 9.6 - - - org.ow2.asm - asm-tree - 9.6 - - - org.ow2.asm - asm-util - 9.6 - - - org.apache.xmlgraphics - batik-anim - 1.17 - - - org.apache.xmlgraphics - batik-awt-util - 1.17 - - - org.apache.xmlgraphics - batik-bridge - 1.17 - - - xalan - xalan - - - - - org.apache.xmlgraphics - batik-codec - 1.17 - - - org.apache.xmlgraphics - batik-constants - 1.17 - - - org.apache.xmlgraphics - batik-css - 1.17 - - - org.apache.xmlgraphics - batik-dom - 1.17 - - - xalan - xalan - - - - - org.apache.xmlgraphics - batik-ext - 1.17 - - - org.apache.xmlgraphics - batik-extension - 1.17 - - - org.apache.xmlgraphics - batik-gui-util - 1.17 - - - org.apache.xmlgraphics - batik-gvt - 1.17 - - - org.apache.xmlgraphics - batik-i18n - 1.17 - - - org.apache.xmlgraphics - batik-parser - 1.17 - - - org.apache.xmlgraphics - batik-rasterizer - 1.17 - - - org.apache.xmlgraphics - batik-rasterizer-ext - 1.17 - - - org.apache.xmlgraphics - batik-extensions - - - - - org.apache.xmlgraphics - batik-script - 1.17 - - - org.apache.xmlgraphics - batik-slideshow - 1.17 - - - org.apache.xmlgraphics - batik-squiggle - 1.17 - - - org.apache.xmlgraphics - batik-squiggle-ext - 1.17 - - - org.apache.xmlgraphics - batik-extensions - - - - - org.apache.xmlgraphics - batik-svg-dom - 1.17 - - - org.apache.xmlgraphics - batik-svggen - 1.17 - - - org.apache.xmlgraphics - batik-svgpp - 1.17 - - - org.apache.xmlgraphics - batik-swing - 1.17 - - - org.apache.xmlgraphics - batik-transcoder - 1.17 - - - org.apache.xmlgraphics - batik-ttf2svg - 1.17 - - - org.apache.xmlgraphics - batik-util - 1.17 - - - org.apache.xmlgraphics - batik-xml - 1.17 - - - org.apache.xmlgraphics - xmlgraphics-commons - 2.9 - - - org.lasersonlab - jblosc - 1.0.1 - - - com.nativelibs4java - bridj - 0.7.0 - - - com.google.android.tools - dx - - - - - javax.enterprise - cdi-api - 2.0.SP1 - - - org.checkerframework - checker-qual - 3.42.0 - - - commons-beanutils - commons-beanutils - 1.9.4 - - - commons-cli - commons-cli - 1.6.0 - - - commons-codec - commons-codec - 1.16.1 - - - commons-collections - commons-collections - 3.2.2 - - - org.apache.commons - commons-collections4 - 4.4 - - - org.apache.commons - commons-compress - 1.26.0 - - - org.apache.commons - commons-csv - 1.10.0 - - - commons-io - commons-io - 2.15.1 - - - commons-lang - commons-lang - 2.6 - - - org.apache.commons - commons-lang3 - 3.14.0 - - - commons-logging - commons-logging - 1.3.0 - - - org.apache.commons - commons-math3 - 3.6.1 - - - org.apache.commons - commons-pool2 - 2.12.0 - - - org.apache.commons - commons-text - 1.11.0 - - - cglib - cglib - 3.3.0 - - - dev.dirs - directories - 26 - - - org.eclipse.collections - eclipse-collections - 11.1.0 - - - org.eclipse.collections - eclipse-collections-api - 11.1.0 - - - org.eclipse.collections - eclipse-collections-forkjoin - 11.1.0 - - - org.eclipse.collections - eclipse-collections-testutils - 11.1.0 - - - org.eclipse.swt - org.eclipse.swt.cocoa.macosx - 4.3 - - - org.eclipse.swt - org.eclipse.swt.cocoa.macosx.x86_64 - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.aix.ppc - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.aix.ppc64 - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.hpux.ia64 - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.linux.ppc - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.linux.ppc64 - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.linux.s390 - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.linux.s390x - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.linux.x86 - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.linux.x86_64 - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.solaris.sparc - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.solaris.x86 - 4.3 - - - org.eclipse.swt - org.eclipse.swt.win32.win32.x86 - 4.3 - - - org.eclipse.swt - org.eclipse.swt.win32.win32.x86_64 - 4.3 - - - org.ejml - ejml-all - 0.41 - - - com.google.errorprone - error_prone_annotations - 2.25.0 - - - com.formdev - flatlaf - 3.4 - - - com.formdev - flatlaf-fonts-jetbrains-mono - 2.304 - - - com.google.api-client - google-api-client - 2.3.0 - - - com.google.api-client - google-api-client-android - 2.3.0 - - - com.google.api-client - google-api-client-appengine - 2.3.0 - - - com.google.api-client - google-api-client-gson - 2.3.0 - - - com.google.api-client - google-api-client-jackson2 - 2.3.0 - - - com.google.api-client - google-api-client-protobuf - 2.3.0 - - - com.google.api-client - google-api-client-servlet - 2.3.0 - - - javax.servlet - servlet-api - - - - - com.google.api-client - google-api-client-xml - 2.3.0 - - - com.google.api - api-common - 2.26.0 - - - com.google.api - gax - 2.43.0 - - - com.google.api - gax-grpc - 2.43.0 - - - com.google.api - gax-httpjson - 2.43.0 - - - com.google.api.grpc - proto-google-common-protos - 2.34.0 - - - com.google.api.grpc - proto-google-iam-v1 - 1.29.0 - - - com.google.auth - google-auth-library-appengine - 1.23.0 - - - com.google.auth - google-auth-library-credentials - 1.23.0 - - - com.google.auth - google-auth-library-oauth2-http - 1.23.0 - - - com.google.auto.value - auto-value - 1.10.4 - - - com.google.auto.value - auto-value-annotations - 1.10.4 - - - com.google.cloud - google-cloud-core - 2.33.0 - - - com.google.cloud - google-cloud-core-http - 2.33.0 - - - com.google.cloud - google-cloud-nio - 0.127.13 - - - com.google.cloud - google-cloud-resourcemanager - 1.38.0 - - - com.google.cloud - google-cloud-storage - 2.34.0 - - - com.google.http-client - google-http-client - 1.44.1 - - - com.google.http-client - google-http-client-apache-v2 - 1.44.1 - - - com.google.http-client - google-http-client-appengine - 1.44.1 - - - com.google.http-client - google-http-client-gson - 1.44.1 - - - com.google.http-client - google-http-client-jackson2 - 1.44.1 - - - com.google.http-client - google-http-client-xml - 1.44.1 - - - io.grpc - grpc-context - 1.62.2 - - - com.google.code.gson - gson - 2.10.1 - - - com.google.guava - guava - 33.0.0-jre - - - io.humble - humble-video-all - 0.3.0 - - - hsqldb - hsqldb - 1.8.0.10 - - - com.itextpdf - itextpdf - 5.5.13.3 - - - com.google.j2objc - j2objc-annotations - 2.8 - - - org.apache.jackrabbit - jackrabbit-webdav - 2.21.22 - - - org.slf4j - jcl-over-slf4j - - - - - com.fasterxml.jackson.core - jackson-annotations - 2.16.1 - - - com.fasterxml.jackson.core - jackson-core - 2.16.1 - - - com.fasterxml.jackson.core - jackson-databind - 2.16.1 - - - com.fasterxml.jackson.dataformat - jackson-dataformat-cbor - 2.16.1 - - - com.fasterxml.jackson.dataformat - jackson-dataformat-yaml - 2.16.1 - - - com.sun.media - jai-codec - 1.1.3 - - - javax.media - jai-core - 1.1.3 - - - gov.nist.math - jama - 1.0.3 - - - org.scijava - j3dcore - 1.6.0-scijava-2 - - - org.scijava - j3dutils - 1.6.0-scijava-2 - - - org.scijava - vecmath - 1.6.0-scijava-2 - - - org.bytedeco - javacpp - 1.5.10 - - - org.bytedeco - javacv - 1.5.10 - - - org.bytedeco - ffmpeg - 6.1.1-1.5.10 - - - org.bytedeco - hdf5 - 1.14.3-1.5.10 - - - org.bytedeco - leptonica - 1.84.1-1.5.10 - - - org.bytedeco - openblas - 0.3.26-1.5.10 - - - org.bytedeco - opencv - 4.9.0-1.5.10 - - - org.bytedeco - tesseract - 5.3.4-1.5.10 - - - org.bytedeco - ffmpeg - 6.1.1-1.5.10 - linux-x86_64 - - - org.bytedeco - hdf5 - 1.14.3-1.5.10 - linux-x86_64 - - - org.bytedeco - leptonica - 1.84.1-1.5.10 - linux-x86_64 - - - org.bytedeco - openblas - 0.3.26-1.5.10 - linux-x86_64 - - - org.bytedeco - opencv - 4.9.0-1.5.10 - linux-x86_64 - - - org.bytedeco - tesseract - 5.3.4-1.5.10 - linux-x86_64 - - - org.javassist - javassist - 3.30.2-GA - - - org.jruby.jcodings - jcodings - 1.0.58 - - - org.jdom - jdom2 - 2.0.6.1 - - - org.scijava - jep - 2.4.2 - - - org.eclipse.jetty - jetty-annotations - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-client - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-continuation - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-deploy - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-http - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-http-spi - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-io - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-jaspi - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-jmx - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-jndi - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-nosql - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-plus - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-proxy - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-rewrite - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-security - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-server - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-servlet - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-servlets - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-spring - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-start - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-util - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-util-ajax - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-webapp - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-xml - 9.4.54.v20240208 - - - org.jfree - jfreechart - 1.5.4 - - - org.jfree - jfreesvg - 3.4.3 - - - org.jgrapht - jgrapht-core - 1.4.0 - - - org.jgrapht - jgrapht-demo - 1.4.0 - - - org.jgrapht - jgrapht-ext - 1.4.0 - - - org.jgrapht - jgrapht-guava - 1.4.0 - - - org.jgrapht - jgrapht-io - 1.4.0 - - - org.jgrapht - jgrapht-opt - 1.4.0 - - - it.unimi.dsi - fastutil - - - - - com.github.vlsi.mxgraph - jgraphx - 4.2.2 - - - cisd - jhdf5 - 19.04.1 - - - org.jheaps - jheaps - 0.14 - - - jline - jline - 2.14.6 - - - org.jline - jline-builtins - 3.25.1 - - - org.jline - jline-console - 3.25.1 - - - org.jline - jline-reader - 3.25.1 - - - org.jline - jline-remote-ssh - 3.25.1 - - - org.jline - jline-remote-telnet - 3.25.1 - - - org.jline - jline-style - 3.25.1 - - - org.jline - jline-terminal - 3.25.1 - - - org.jline - jline-terminal-jna - 3.25.1 - - - net.java.dev.jna - jna - 5.14.0 - - - net.java.dev.jna - jna-platform - 5.14.0 - - - com.github.jnr - jffi - 1.3.13 - - - com.github.jnr - jffi - 1.3.13 - native - - - com.github.jnr - jnr-constants - 0.10.4 - - - com.github.jnr - jnr-ffi - 2.2.16 - - - com.github.jnr - jnr-posix - 3.1.19 - - - joda-time - joda-time - 2.12.7 - - - org.jocl - jocl - 2.0.5 - - - org.jogamp.gluegen - gluegen - 2.5.0 - - - org.jogamp.gluegen - gluegen-rt - 2.5.0 - - - org.jogamp.joal - joal - 2.5.0 - - - org.jogamp.jocl - jocl - 2.5.0 - - - org.jogamp.jogl - jogl-all - 2.5.0 - - - org.jogamp.jogl - jogl-all-noawt - 2.5.0 - - - org.jogamp.gluegen - gluegen-rt - 2.5.0 - natives-android-aarch64 - - - org.jogamp.gluegen - gluegen-rt - 2.5.0 - natives-linux-aarch64 - - - org.jogamp.gluegen - gluegen-rt - 2.5.0 - natives-linux-amd64 - - - org.jogamp.gluegen - gluegen-rt - 2.5.0 - natives-linux-armv6hf - - - org.jogamp.gluegen - gluegen-rt - 2.5.0 - natives-macosx-universal - - - org.jogamp.gluegen - gluegen-rt - 2.5.0 - natives-windows-amd64 - - - org.jogamp.joal - joal - 2.5.0 - natives-android-aarch64 - - - org.jogamp.joal - joal - 2.5.0 - natives-linux-aarch64 - - - org.jogamp.joal - joal - 2.5.0 - natives-linux-amd64 - - - org.jogamp.joal - joal - 2.5.0 - natives-linux-armv6hf - - - org.jogamp.joal - joal - 2.5.0 - natives-macosx-universal - - - org.jogamp.joal - joal - 2.5.0 - natives-windows-amd64 - - - org.jogamp.jocl - jocl - 2.5.0 - natives-android-aarch64 - - - org.jogamp.jocl - jocl - 2.5.0 - natives-linux-aarch64 - - - org.jogamp.jocl - jocl - 2.5.0 - natives-linux-amd64 - - - org.jogamp.jocl - jocl - 2.5.0 - natives-linux-armv6hf - - - org.jogamp.jocl - jocl - 2.5.0 - natives-macosx-universal - - - org.jogamp.jocl - jocl - 2.5.0 - natives-windows-amd64 - - - org.jogamp.jogl - jogl-all - 2.5.0 - natives-android-aarch64 - - - org.jogamp.jogl - jogl-all - 2.5.0 - natives-linux-aarch64 - - - org.jogamp.jogl - jogl-all - 2.5.0 - natives-linux-amd64 - - - org.jogamp.jogl - jogl-all - 2.5.0 - natives-linux-armv6hf - - - org.jogamp.jogl - jogl-all - 2.5.0 - natives-macosx-universal - - - org.jogamp.jogl - jogl-all - 2.5.0 - natives-windows-amd64 - - - org.jogamp.jogl - jogl-all-noawt - 2.5.0 - natives-android-aarch64 - - - org.jogamp.jogl - jogl-all-noawt - 2.5.0 - natives-linux-aarch64 - - - org.jogamp.jogl - jogl-all-noawt - 2.5.0 - natives-linux-amd64 - - - org.jogamp.jogl - jogl-all-noawt - 2.5.0 - natives-linux-armv6hf - - - org.jogamp.jogl - jogl-all-noawt - 2.5.0 - natives-macosx-universal - - - org.jogamp.jogl - jogl-all-noawt - 2.5.0 - natives-windows-amd64 - - - org.jogamp.java3d - java3d-core - 1.7.2 - - - org.jogamp.java3d - java3d-utils - 1.7.2 - - - org.jogamp.java3d - vecmath - 1.7.2 - - - org.joml - joml - 1.10.5 - - - org.jruby.joni - joni - 2.2.1 - - - org.jpedal - jpedalSTD - 2.80b11 - - - org.smurn - jply - 0.2.1 - - - com.jcraft - jsch - 0.1.55 - - - org.json - json - 20240205 - - - org.python - jython-slim - 2.7.3 - - - com.jcraft - jzlib - 1.1.3 - - - org.jzy3d - jzy3d-core - 2.2.1 - - - org.jzy3d - jzy3d-core-awt - 2.2.1 - - - org.jzy3d - jzy3d-emul-gl-awt - 2.2.1 - - - org.jzy3d - jzy3d-jGL-awt - 2.2.1 - - - org.jzy3d - jzy3d-jdt-core - 2.2.1 - - - org.jzy3d - jzy3d-native-jogl-awt - 2.2.1 - - - org.jogamp.gluegen - gluegen-rt-natives-macosx-universal - - - org.jogamp.gluegen - gluegen-rt-natives-linux-aarch64 - - - org.jogamp.gluegen - gluegen-rt-natives-linux-amd64 - - - org.jogamp.gluegen - gluegen-rt-natives-linux-armv6hf - - - org.jogamp.gluegen - gluegen-rt-natives-linux-i586 - - - org.jogamp.gluegen - gluegen-rt-natives-macosx-universal - - - org.jogamp.gluegen - gluegen-rt-natives-windows-amd64 - - - org.jogamp.gluegen - gluegen-rt-natives-windows-i586 - - - org.jogamp.jogl - jogl-all-natives-linux-aarch64 - - - org.jogamp.jogl - jogl-all-natives-linux-amd64 - - - org.jogamp.jogl - jogl-all-natives-linux-armv6hf - - - org.jogamp.jogl - jogl-all-natives-linux-i586 - - - org.jogamp.jogl - jogl-all-natives-macosx-universal - - - org.jogamp.jogl - jogl-all-natives-windows-amd64 - - - org.jogamp.jogl - jogl-all-natives-windows-i586 - - - - - org.jzy3d - jzy3d-native-jogl-core - 2.2.1 - - - org.jogamp.gluegen - gluegen-rt-natives-macosx-universal - - - org.jogamp.gluegen - gluegen-rt-natives-linux-aarch64 - - - org.jogamp.gluegen - gluegen-rt-natives-linux-amd64 - - - org.jogamp.gluegen - gluegen-rt-natives-linux-armv6hf - - - org.jogamp.gluegen - gluegen-rt-natives-linux-i586 - - - org.jogamp.gluegen - gluegen-rt-natives-macosx-universal - - - org.jogamp.gluegen - gluegen-rt-natives-windows-amd64 - - - org.jogamp.gluegen - gluegen-rt-natives-windows-i586 - - - org.jogamp.jogl - jogl-all-natives-linux-aarch64 - - - org.jogamp.jogl - jogl-all-natives-linux-amd64 - - - org.jogamp.jogl - jogl-all-natives-linux-armv6hf - - - org.jogamp.jogl - jogl-all-natives-linux-i586 - - - org.jogamp.jogl - jogl-all-natives-macosx-universal - - - org.jogamp.jogl - jogl-all-natives-windows-amd64 - - - org.jogamp.jogl - jogl-all-natives-windows-i586 - - - - - org.jzy3d - jzy3d-native-jogl-swing - 2.2.1 - - - com.miglayout - miglayout - - - - - org.jzy3d - jzy3d-tester - 2.2.1 - - - org.jetbrains.kotlin - kotlin-compiler-embeddable - 1.9.22 - - - org.jetbrains.kotlin - kotlin-daemon-embeddable - 1.9.22 - - - org.jetbrains.kotlin - kotlin-reflect - 1.9.22 - - - org.jetbrains.kotlin - kotlin-script-runtime - 1.9.22 - - - org.jetbrains.kotlin - kotlin-scripting-common - 1.9.22 - - - org.jetbrains.kotlin - kotlin-scripting-compiler-embeddable - 1.9.22 - - - org.jetbrains.kotlin - kotlin-scripting-jsr223 - 1.9.22 - - - org.jetbrains.kotlin - kotlin-scripting-jvm - 1.9.22 - - - org.jetbrains.kotlin - kotlin-stdlib - 1.9.22 - - - org.jetbrains.kotlin - kotlin-stdlib-common - 1.9.22 - - - org.jetbrains.kotlin - kotlin-stdlib-jdk8 - 1.9.22 - - - org.jetbrains.kotlinx - kotlinx-coroutines-core - 1.8.0 - - - org.jetbrains.kotlinx - kotlinx-coroutines-core-jvm - 1.8.0 - - - com.esotericsoftware - kryo - 5.6.0 - - - com.esotericsoftware - minlog - 1.3.1 - - - com.esotericsoftware - reflectasm - 1.11.9 - - - ch.qos.logback - logback-classic - 1.2.12 - - - javax.activation - activation - - - - - ch.qos.logback - logback-core - 1.2.12 - - - org.lz4 - lz4-java - 1.8.0 - - - org.mapdb - mapdb - 3.1.0 - - - net.jpountz.lz4 - lz4 - - - - - com.miglayout - miglayout-core - 5.3 - - - com.miglayout - miglayout-swing - 5.3 - - - com.miglayout - miglayout-swt - 5.3 - - - edu.mines - mines-jtk - 20151125 - - - org.objenesis - objenesis - 3.3 - - - com.squareup.okhttp3 - okhttp - 4.12.0 - - - com.squareup.okio - okio - 3.8.0 - - - org.ojalgo - ojalgo - 45.1.1 - - - com.opencsv - opencsv - 5.9 - - - info.picocli - picocli - 4.7.5 - - - org.postgresql - postgresql - 42.7.2 - - - com.google.protobuf - protobuf-java - 3.23.0 - - - com.google.protobuf - protobuf-java-util - 3.23.0 - - - com.google.protobuf - protobuf-kotlin - 3.23.0 - - - com.google.re2j - re2j - 1.7 - - - ch.qos.reload4j - reload4j - 1.2.25 - - - com.fifesoft - rsyntaxtextarea - 3.4.0 - - - com.fifesoft - autocomplete - 3.3.1 - - - com.fifesoft - languagesupport - 3.3.0 - - - org.slf4j - slf4j-api - 1.7.36 - - - org.slf4j - slf4j-ext - 1.7.36 - - - org.slf4j - slf4j-jcl - 1.7.36 - - - org.slf4j - slf4j-jdk14 - 1.7.36 - - - org.slf4j - slf4j-nop - 1.7.36 - - - org.slf4j - slf4j-simple - 1.7.36 - - - org.slf4j - jcl-over-slf4j - 1.7.36 - - - org.yaml - snakeyaml - 2.2 - - - org.snakeyaml - snakeyaml-engine - 2.7 - - - org.springframework - spring-aop - 3.2.9.RELEASE - - - org.springframework - spring-beans - 3.2.9.RELEASE - - - org.springframework - spring-core - 3.2.9.RELEASE - - - org.tensorflow - tensorflow - 1.12.0 - - - org.tensorflow - libtensorflow - 1.12.0 - - - org.tensorflow - libtensorflow_jni - 1.12.0 - - - org.tensorflow - libtensorflow_jni_gpu - 1.12.0 - - - org.tensorflow - proto - 1.12.0 - - - org.threeten - threetenbp - 1.6.8 - - - net.sf.trove4j - trove4j - 3.0.3 - - - nz.ac.waikato.cms.weka - weka-dev - 3.9.6 - - - com.github.fommil.netlib - all - - - com.github.vbmacher - java-cup-runtime - - - com.googlecode.netlib-java - netlib-java - - - com.sun.activation - jakarta.activation - - - nz.ac.waikato.cms.weka.thirdparty - java-cup-11b - - - nz.ac.waikato.cms.weka.thirdparty - java-cup-11b-runtime - - - net.sourceforge.f2j - arpack_combined_all - - - - - org.tukaani - xz - 1.9 - - - com.github.luben - zstd-jni - 1.5.5-11 - - - org.scijava - scijava-common - 2.98.0 - tests - test - - - net.imagej - imagej-legacy - 1.2.1 - tests - test - - - net.imagej - imagej-ops - 2.0.0 - tests - test - - - net.imagej - imagej-updater - 1.0.1 - tests - test - - - net.imglib2 - imglib2 - 6.3.0 - tests - test - - - org.janelia.saalfeldlab - n5 - 3.1.3 - tests - test - - - junit - junit - 4.13.2 - test - - - org.junit.jupiter - junit-jupiter-api - 5.10.2 - test - - - org.junit.jupiter - junit-jupiter-engine - 5.10.2 - test - - - org.junit.jupiter - junit-jupiter-migrationsupport - 5.10.2 - test - - - org.junit.jupiter - junit-jupiter-params - 5.10.2 - test - - - org.junit.vintage - junit-vintage-engine - 5.10.2 - test - - - org.scijava - junit-benchmarks - 0.7.4-scijava - test - - - org.jmockit - jmockit - 1.49 - test - - - org.mockito - mockito-core - 2.19.0 - test - - - org.openjdk.jmh - jmh-core - 1.37 - test - - - org.openjdk.jmh - jmh-generator-annprocess - 1.37 - test - - - - - - - false - - central - Central Repository - https://repo.maven.apache.org/maven2 - - - - - - never - - - false - - central - Central Repository - https://repo.maven.apache.org/maven2 - - - - /home/elect/IdeaProjects/pom-scijava/src/main/java - /home/elect/IdeaProjects/pom-scijava/src/main/scripts - /home/elect/IdeaProjects/pom-scijava/src/test/java - /home/elect/IdeaProjects/pom-scijava/target/classes - /home/elect/IdeaProjects/pom-scijava/target/test-classes - - - org.apache.maven.wagon - wagon-webdav-jackrabbit - 1.0 - - - install - - - /home/elect/IdeaProjects/pom-scijava/src/main/resources - - - - - /home/elect/IdeaProjects/pom-scijava/src/test/resources - - - /home/elect/IdeaProjects/pom-scijava/target - pom-scijava-38.0.0-SNAPSHOT - - - - maven-antrun-plugin - 3.1.0 - - - maven-assembly-plugin - 3.6.0 - - - maven-clean-plugin - 3.3.2 - - - maven-compiler-plugin - 3.8.1 - - - maven-dependency-plugin - 3.6.1 - - - maven-deploy-plugin - 3.1.1 - - - maven-enforcer-plugin - 3.4.1 - - - org.codehaus.mojo - extra-enforcer-rules - 1.7.0 - compile - - - org.scijava - scijava-maven-plugin - 3.0.0 - compile - - - - - maven-failsafe-plugin - 3.2.5 - - - - integration-test - verify - - - - - - maven-gpg-plugin - 3.1.0 - - - sign-artifacts - verify - - sign - - - true - - - - - true - - - - maven-help-plugin - 3.4.0 - - - maven-install-plugin - 3.1.1 - - - maven-jar-plugin - 3.3.0 - - - - test-jar - - - - - true - true - true - - ${package-guess} - - - - ${buildNumber} - 2024-03-03T16:51:20+0000 - ${package-guess} - - - true - - - - - - - true - true - true - - ${package-guess} - - - - ${buildNumber} - 2024-03-03T16:51:20+0000 - ${package-guess} - - - true - - - - maven-javadoc-plugin - 3.6.3 - - 1024m - - https://javadoc.scijava.org/Java8/ - https://javadoc.scijava.org/JavaFX8/ - https://javadoc.scijava.org/SciJava/ - https://javadoc.scijava.org/Alida/ - https://javadoc.scijava.org/Bio-Formats/ - https://javadoc.scijava.org/FLIMLib/ - https://javadoc.scijava.org/Fiji/ - https://javadoc.scijava.org/Icy/ - https://javadoc.scijava.org/ImageJ/ - https://javadoc.scijava.org/ImageJ1/ - https://javadoc.scijava.org/ImgLib2/ - https://javadoc.scijava.org/Java3D/ - https://javadoc.scijava.org/KNIME/ - https://javadoc.scijava.org/LOCI/ - https://javadoc.scijava.org/MiToBo/ - https://javadoc.scijava.org/Micro-Manager-Core/ - https://javadoc.scijava.org/Micro-Manager-Studio/ - https://javadoc.scijava.org/MorphoLibJ/ - https://javadoc.scijava.org/OMERO/ - https://javadoc.scijava.org/SCIFIO/ - https://javadoc.scijava.org/Apache-Commons-IO/ - https://javadoc.scijava.org/Apache-Commons-Lang/ - https://javadoc.scijava.org/Apache-Commons-Math/ - https://javadoc.scijava.org/Apache-Commons-Text/ - https://javadoc.scijava.org/BoneJ/ - https://javadoc.scijava.org/Eclipse/ - https://javadoc.scijava.org/Guava/ - https://javadoc.scijava.org/JAMA/ - https://javadoc.scijava.org/JFreeChart/ - https://javadoc.scijava.org/JGraphT/ - https://javadoc.scijava.org/JHotDraw/ - https://javadoc.scijava.org/JOML/ - https://javadoc.scijava.org/Javassist/ - https://javadoc.scijava.org/MigLayout/ - https://javadoc.scijava.org/NetBeans/ - https://javadoc.scijava.org/Pivot/ - https://javadoc.scijava.org/VisAD/ - https://javadoc.scijava.org/Weka/ - https://javadoc.scijava.org/ojAlgo/ - - - - - maven-plugin-plugin - 3.11.0 - - - maven-project-info-reports-plugin - 3.5.0 - - - maven-release-plugin - 3.0.1 - - - maven-resources-plugin - 3.3.1 - - - maven-shade-plugin - 3.5.2 - - - maven-site-plugin - 3.12.1 - - - maven-source-plugin - 3.3.0 - - - attach-sources - none - - - attach-sources-jar - - jar - - - - - - maven-surefire-plugin - 3.2.5 - - @{argLine} -Xms512m -Xmx512m -Dapple.awt.UIElement=true - - - - org.codehaus.mojo - build-helper-maven-plugin - 3.5.0 - - - sanitize-version - - regex-property - - - sanitizedVersion - 38.0.0-SNAPSHOT - ^([0-9]+)\.([0-9]+)\.([0-9]+).*$ - $1.$2.$3 - false - - - - guess-package - - regex-property - - - package-guess - org.scijava.pom-scijava - [^a-z0-9_.]+ - _ - false - - - - - - org.codehaus.mojo - buildnumber-maven-plugin - 3.2.0 - - - validate - - create - - - true - UNKNOWN - - - - - - net.java.dev.jna - platform - 3.5.2 - compile - - - - true - UNKNOWN - - - - org.codehaus.mojo - cobertura-maven-plugin - 2.7 - - - html - xml - - - - - org.codehaus.mojo - exec-maven-plugin - 3.2.0 - - - org.codehaus.mojo - license-maven-plugin - 2.4.0 - - false - true - true - - java - properties - java - - - - - org.codehaus.mojo - tidy-maven-plugin - 1.2.0 - - - org.codehaus.mojo - versions-maven-plugin - 2.16.2 - - - org.scijava - scijava-maven-plugin - 3.0.0 - - - set-rootdir - validate - - set-rootdir - - - - - - com.zenjava - javafx-maven-plugin - 8.8.3 - - SciJava Parent POM - SciJava Parent POM - SciJava Parent POM.jar - - ${sanitizedVersion} - true - - - - net.revelc.code - impsort-maven-plugin - 1.9.0 - - - none - - java.,javax.,com.,net.,org. - java,* - true - - - - - java.,javax.,com.,net.,org. - java,* - true - - - - net.revelc.code.formatter - formatter-maven-plugin - 2.23.0 - - - org.scijava - scijava-coding-style - 2.1.1 - compile - - - - eclipse-formatter-settings/scijava-coding-style.xml - - - - org.fusesource.mvnplugins - maven-graph-plugin - 1.45 - - provided,runtime,system,test - true - - /home/elect/IdeaProjects/pom-scijava/target/dependency-graph.dot - - - - org.honton.chas - exists-maven-plugin - 0.12.0 - - - - remote - - - - - - org.jacoco - jacoco-maven-plugin - 0.8.11 - - - jacoco-initialize - - prepare-agent - - - - jacoco-site - package - - report - - - - - - org.revapi - revapi-maven-plugin - 0.15.0 - - - org.revapi - revapi-java - 0.28.1 - - - - - org.sonarsource.scanner.maven - sonar-maven-plugin - 3.10.0.2594 - - - - - - maven-enforcer-plugin - 3.4.1 - - - enforce-rules - - enforce - - - - - 3.6.3 - - - Plugins need to be versioned! - - - [1.8.0-101,) - - - No Duplicate Classes Allowed! -- For duplicate transitive dependencies, add dependency exclusions. -- For duplications between direct dependencies, resolve or add - ignored classes to this rule's configuration. - true - com.google.inject.*,javax.xml.namespace.QName,jnr.ffi.*,org.apache.hadoop.yarn.*.package-info,org.apache.spark.unused.UnusedStubClass,org.eclipse.aether.*,org.hibernate.stat.ConcurrentStatisticsImpl,org.junit.runner.Runner,org.jzy3d.plot3d.pipelines.* - - - founder,lead,developer,debugger,reviewer,support,maintainer - - - founder,lead,developer,debugger,reviewer,support,maintainer - - - 8 - - com.headius:invokebinder - com.sun:tools - - - module-info - - - test - - - - - name - description - url - inceptionYear - organization - licenses - developers - contributors - mailingLists - scm - issueManagement - ciManagement - properties//license.licenseName - properties//license.copyrightOwners - - - - org.scijava,net.imagej,net.imglib2,io.scif,sc.fiji - - - - - - - - org.codehaus.mojo - extra-enforcer-rules - 1.7.0 - compile - - - org.scijava - scijava-maven-plugin - 3.0.0 - compile - - - - - - 3.6.3 - - - Plugins need to be versioned! - - - [1.8.0-101,) - - - No Duplicate Classes Allowed! -- For duplicate transitive dependencies, add dependency exclusions. -- For duplications between direct dependencies, resolve or add - ignored classes to this rule's configuration. - true - com.google.inject.*,javax.xml.namespace.QName,jnr.ffi.*,org.apache.hadoop.yarn.*.package-info,org.apache.spark.unused.UnusedStubClass,org.eclipse.aether.*,org.hibernate.stat.ConcurrentStatisticsImpl,org.junit.runner.Runner,org.jzy3d.plot3d.pipelines.* - - - founder,lead,developer,debugger,reviewer,support,maintainer - - - founder,lead,developer,debugger,reviewer,support,maintainer - - - 8 - - com.headius:invokebinder - com.sun:tools - - - module-info - - - test - - - - - name - description - url - inceptionYear - organization - licenses - developers - contributors - mailingLists - scm - issueManagement - ciManagement - properties//license.licenseName - properties//license.copyrightOwners - - - - org.scijava,net.imagej,net.imglib2,io.scif,sc.fiji - - - - - - maven-failsafe-plugin - 3.2.5 - - - - integration-test - verify - - - - - - maven-source-plugin - 3.3.0 - - - attach-sources - none - - - attach-sources-jar - - jar - - - - - - maven-surefire-plugin - 3.2.5 - - @{argLine} -Xms512m -Xmx512m -Dapple.awt.UIElement=true - - - - org.codehaus.mojo - build-helper-maven-plugin - 3.5.0 - - - sanitize-version - - regex-property - - - sanitizedVersion - 38.0.0-SNAPSHOT - ^([0-9]+)\.([0-9]+)\.([0-9]+).*$ - $1.$2.$3 - false - - - - guess-package - - regex-property - - - package-guess - org.scijava.pom-scijava - [^a-z0-9_.]+ - _ - false - - - - - - org.codehaus.mojo - buildnumber-maven-plugin - 3.2.0 - - - validate - - create - - - true - UNKNOWN - - - - - - net.java.dev.jna - platform - 3.5.2 - compile - - - - true - UNKNOWN - - - - org.scijava - scijava-maven-plugin - 3.0.0 - - - set-rootdir - validate - - set-rootdir - - - older - - - - populate-app - install - - populate-app - - - older - - - - - older - - - - com.zenjava - javafx-maven-plugin - 8.8.3 - - SciJava Parent POM - SciJava Parent POM - SciJava Parent POM.jar - - ${sanitizedVersion} - true - - - - net.revelc.code - impsort-maven-plugin - 1.9.0 - - - none - - java.,javax.,com.,net.,org. - java,* - true - - - - - java.,javax.,com.,net.,org. - java,* - true - - - - net.revelc.code.formatter - formatter-maven-plugin - 2.23.0 - - - org.scijava - scijava-coding-style - 2.1.1 - compile - - - - eclipse-formatter-settings/scijava-coding-style.xml - - - - org.fusesource.mvnplugins - maven-graph-plugin - 1.45 - - provided,runtime,system,test - true - - /home/elect/IdeaProjects/pom-scijava/target/dependency-graph.dot - - - - org.jacoco - jacoco-maven-plugin - 0.8.11 - - - jacoco-initialize - - prepare-agent - - - - jacoco-site - package - - report - - - - - - maven-javadoc-plugin - 3.6.3 - - /usr/lib/jvm/jdk-19/bin/javadoc - 1024m - - https://javadoc.scijava.org/Java8/ - https://javadoc.scijava.org/JavaFX8/ - https://javadoc.scijava.org/SciJava/ - https://javadoc.scijava.org/Alida/ - https://javadoc.scijava.org/Bio-Formats/ - https://javadoc.scijava.org/FLIMLib/ - https://javadoc.scijava.org/Fiji/ - https://javadoc.scijava.org/Icy/ - https://javadoc.scijava.org/ImageJ/ - https://javadoc.scijava.org/ImageJ1/ - https://javadoc.scijava.org/ImgLib2/ - https://javadoc.scijava.org/Java3D/ - https://javadoc.scijava.org/KNIME/ - https://javadoc.scijava.org/LOCI/ - https://javadoc.scijava.org/MiToBo/ - https://javadoc.scijava.org/Micro-Manager-Core/ - https://javadoc.scijava.org/Micro-Manager-Studio/ - https://javadoc.scijava.org/MorphoLibJ/ - https://javadoc.scijava.org/OMERO/ - https://javadoc.scijava.org/SCIFIO/ - https://javadoc.scijava.org/Apache-Commons-IO/ - https://javadoc.scijava.org/Apache-Commons-Lang/ - https://javadoc.scijava.org/Apache-Commons-Math/ - https://javadoc.scijava.org/Apache-Commons-Text/ - https://javadoc.scijava.org/BoneJ/ - https://javadoc.scijava.org/Eclipse/ - https://javadoc.scijava.org/Guava/ - https://javadoc.scijava.org/JAMA/ - https://javadoc.scijava.org/JFreeChart/ - https://javadoc.scijava.org/JGraphT/ - https://javadoc.scijava.org/JHotDraw/ - https://javadoc.scijava.org/JOML/ - https://javadoc.scijava.org/Javassist/ - https://javadoc.scijava.org/MigLayout/ - https://javadoc.scijava.org/NetBeans/ - https://javadoc.scijava.org/Pivot/ - https://javadoc.scijava.org/VisAD/ - https://javadoc.scijava.org/Weka/ - https://javadoc.scijava.org/ojAlgo/ - - - - - maven-clean-plugin - 3.3.2 - - - default-clean - clean - - clean - - - - - - maven-install-plugin - 3.1.1 - - - default-install - install - - install - - - - - - maven-deploy-plugin - 3.1.1 - - - default-deploy - deploy - - deploy - - - - - - maven-site-plugin - 3.12.1 - - - default-site - site - - site - - - /home/elect/IdeaProjects/pom-scijava/target/site - - - org.apache.maven.plugins - maven-javadoc-plugin - - - org.apache.maven.plugins - maven-project-info-reports-plugin - - - - - - default-deploy - site-deploy - - deploy - - - /home/elect/IdeaProjects/pom-scijava/target/site - - - org.apache.maven.plugins - maven-javadoc-plugin - - - org.apache.maven.plugins - maven-project-info-reports-plugin - - - - - - - /home/elect/IdeaProjects/pom-scijava/target/site - - - org.apache.maven.plugins - maven-javadoc-plugin - - - org.apache.maven.plugins - maven-project-info-reports-plugin - - - - - - - - /home/elect/IdeaProjects/pom-scijava/target/site - - - maven-javadoc-plugin - - - - diff --git a/gradle/catalog/gradle/wrapper/gradle-wrapper.jar b/gradle/catalog/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..d64cd4917707c1f8861d8cb53dd15194d4248596 GIT binary patch literal 43462 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 literal 0 HcmV?d00001 diff --git a/gradle/catalog/gradle/wrapper/gradle-wrapper.properties b/gradle/catalog/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..b82aa23 --- /dev/null +++ b/gradle/catalog/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradle/catalog/gradlew b/gradle/catalog/gradlew new file mode 100755 index 0000000..1aa94a4 --- /dev/null +++ b/gradle/catalog/gradlew @@ -0,0 +1,249 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradle/catalog/gradlew.bat b/gradle/catalog/gradlew.bat new file mode 100644 index 0000000..93e3f59 --- /dev/null +++ b/gradle/catalog/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/gradle/enforcer/.gitattributes b/gradle/enforcer/.gitattributes new file mode 100644 index 0000000..097f9f9 --- /dev/null +++ b/gradle/enforcer/.gitattributes @@ -0,0 +1,9 @@ +# +# https://help.github.com/articles/dealing-with-line-endings/ +# +# Linux start script should use lf +/gradlew text eol=lf + +# These are Windows script files and should use crlf +*.bat text eol=crlf + diff --git a/gradle/enforcer/.gitignore b/gradle/enforcer/.gitignore new file mode 100644 index 0000000..1b6985c --- /dev/null +++ b/gradle/enforcer/.gitignore @@ -0,0 +1,5 @@ +# Ignore Gradle project-specific cache directory +.gradle + +# Ignore Gradle build output directory +build diff --git a/gradle/enforcer/build.gradle.kts b/gradle/enforcer/build.gradle.kts new file mode 100644 index 0000000..bd68245 --- /dev/null +++ b/gradle/enforcer/build.gradle.kts @@ -0,0 +1,63 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * This generated file contains a sample Gradle plugin project to get you started. + * For more details on writing Custom Plugins, please refer to https://docs.gradle.org/8.6/userguide/custom_plugins.html in the Gradle documentation. + * This project uses @Incubating APIs which are subject to change. + */ + +plugins { + // Apply the Java Gradle plugin development plugin to add support for developing Gradle plugins + `java-gradle-plugin` + + // Apply the Kotlin JVM plugin to add support for Kotlin. + alias(libs.plugins.jvm) +} + +repositories { + // Use Maven Central for resolving dependencies. + mavenCentral() +} + +testing { + suites { + // Configure the built-in test suite + val test by getting(JvmTestSuite::class) { + // Use Kotlin Test test framework + useKotlinTest("1.9.20") + } + + // Create a new test suite + val functionalTest by registering(JvmTestSuite::class) { + // Use Kotlin Test test framework + useKotlinTest("1.9.20") + + dependencies { + // functionalTest test suite depends on the production code in tests + implementation(project()) + } + + targets { + all { + // This test suite should run after the built-in test suite has run its tests + testTask.configure { shouldRunAfter(test) } + } + } + } + } +} + +gradlePlugin { + // Define the plugin + val greeting by plugins.creating { + id = "org.example.greeting" + implementationClass = "org.example.EnforcerPlugin" + } +} + +gradlePlugin.testSourceSets.add(sourceSets["functionalTest"]) + +tasks.named("check") { + // Include functionalTest as part of the check lifecycle + dependsOn(testing.suites.named("functionalTest")) +} diff --git a/gradle/enforcer/gradle.properties b/gradle/enforcer/gradle.properties new file mode 100644 index 0000000..18f452c --- /dev/null +++ b/gradle/enforcer/gradle.properties @@ -0,0 +1,6 @@ +# This file was generated by the Gradle 'init' task. +# https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_configuration_properties + +org.gradle.parallel=true +org.gradle.caching=true + diff --git a/gradle/enforcer/gradle/libs.versions.toml b/gradle/enforcer/gradle/libs.versions.toml new file mode 100644 index 0000000..387b04d --- /dev/null +++ b/gradle/enforcer/gradle/libs.versions.toml @@ -0,0 +1,5 @@ +# This file was generated by the Gradle 'init' task. +# https://docs.gradle.org/current/userguide/platforms.html#sub::toml-dependencies-format + +[plugins] +jvm = { id = "org.jetbrains.kotlin.jvm", version = "1.9.20" } diff --git a/gradle/enforcer/gradle/wrapper/gradle-wrapper.jar b/gradle/enforcer/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..d64cd4917707c1f8861d8cb53dd15194d4248596 GIT binary patch literal 43462 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 literal 0 HcmV?d00001 diff --git a/gradle/enforcer/gradle/wrapper/gradle-wrapper.properties b/gradle/enforcer/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..a80b22c --- /dev/null +++ b/gradle/enforcer/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradle/enforcer/gradlew b/gradle/enforcer/gradlew new file mode 100755 index 0000000..1aa94a4 --- /dev/null +++ b/gradle/enforcer/gradlew @@ -0,0 +1,249 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradle/enforcer/gradlew.bat b/gradle/enforcer/gradlew.bat new file mode 100644 index 0000000..25da30d --- /dev/null +++ b/gradle/enforcer/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/gradle/enforcer/src/functionalTest/kotlin/org/example/EnforcerPluginFunctionalTest.kt b/gradle/enforcer/src/functionalTest/kotlin/org/example/EnforcerPluginFunctionalTest.kt new file mode 100644 index 0000000..a4e5eb8 --- /dev/null +++ b/gradle/enforcer/src/functionalTest/kotlin/org/example/EnforcerPluginFunctionalTest.kt @@ -0,0 +1,43 @@ +/* + * This Kotlin source file was generated by the Gradle 'init' task. + */ +package org.example + +import java.io.File +import kotlin.test.assertTrue +import kotlin.test.Test +import org.gradle.testkit.runner.GradleRunner +import org.junit.jupiter.api.io.TempDir + +/** + * A simple functional test for the 'org.example.greeting' plugin. + */ +class EnforcerPluginFunctionalTest { + + @field:TempDir + lateinit var projectDir: File + + private val buildFile by lazy { projectDir.resolve("build.gradle") } + private val settingsFile by lazy { projectDir.resolve("settings.gradle") } + + @Test fun `can run task`() { + // Set up the test build + settingsFile.writeText("") + buildFile.writeText(""" + plugins { + id('org.example.greeting') + } + """.trimIndent()) + + // Run the build + val runner = GradleRunner.create() + runner.forwardOutput() + runner.withPluginClasspath() + runner.withArguments("greeting") + runner.withProjectDir(projectDir) + val result = runner.build() + + // Verify the result + assertTrue(result.output.contains("Hello from plugin 'org.example.greeting'")) + } +} diff --git a/gradle/enforcer/src/main/kotlin/org/example/EnforcerPlugin.kt b/gradle/enforcer/src/main/kotlin/org/example/EnforcerPlugin.kt new file mode 100644 index 0000000..666de90 --- /dev/null +++ b/gradle/enforcer/src/main/kotlin/org/example/EnforcerPlugin.kt @@ -0,0 +1,22 @@ +/* + * This Kotlin source file was generated by the Gradle 'init' task. + */ +package org.example + +import org.gradle.api.Project +import org.gradle.api.Plugin + +/** + * A simple 'hello world' plugin. + */ +class EnforcerPlugin: Plugin { + override fun apply(project: Project) { + // Register a task +// project.tasks.register("greeting") { task -> +// task.doLast { +// println("Hello from plugin 'org.example.greeting'") +// } +// } +// project.extensions.cr + } +} diff --git a/gradle/enforcer/src/test/kotlin/org/example/EnforcerPluginTest.kt b/gradle/enforcer/src/test/kotlin/org/example/EnforcerPluginTest.kt new file mode 100644 index 0000000..cfba71b --- /dev/null +++ b/gradle/enforcer/src/test/kotlin/org/example/EnforcerPluginTest.kt @@ -0,0 +1,22 @@ +/* + * This Kotlin source file was generated by the Gradle 'init' task. + */ +package org.example + +import org.gradle.testfixtures.ProjectBuilder +import kotlin.test.Test +import kotlin.test.assertNotNull + +/** + * A simple unit test for the 'org.example.greeting' plugin. + */ +class EnforcerPluginTest { + @Test fun `plugin registers task`() { + // Create a test project and apply the plugin + val project = ProjectBuilder.builder().build() + project.plugins.apply("org.example.greeting") + + // Verify the result + assertNotNull(project.tasks.findByName("greeting")) + } +} diff --git a/gradle/gradle.properties b/gradle/gradle.properties new file mode 100644 index 0000000..18f452c --- /dev/null +++ b/gradle/gradle.properties @@ -0,0 +1,6 @@ +# This file was generated by the Gradle 'init' task. +# https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_configuration_properties + +org.gradle.parallel=true +org.gradle.caching=true + diff --git a/gradle/gradle/wrapper/gradle-wrapper.properties b/gradle/gradle/wrapper/gradle-wrapper.properties index 17655d0..48c0a02 100644 --- a/gradle/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradle/manifest-dependencies/build.gradle.kts b/gradle/manifest-dependencies/build.gradle.kts new file mode 100644 index 0000000..0080f91 --- /dev/null +++ b/gradle/manifest-dependencies/build.gradle.kts @@ -0,0 +1,65 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * This generated file contains a sample Gradle plugin project to get you started. + * For more details on writing Custom Plugins, please refer to https://docs.gradle.org/8.7/userguide/custom_plugins.html in the Gradle documentation. + * This project uses @Incubating APIs which are subject to change. + */ + +plugins { + // Apply the Java Gradle plugin development plugin to add support for developing Gradle plugins + `java-gradle-plugin` + + // Apply the Kotlin JVM plugin to add support for Kotlin. + embeddedKotlin("jvm") + + `kotlin-dsl` +} + +repositories { + // Use Maven Central for resolving dependencies. + mavenCentral() +} + +testing { + suites { + // Configure the built-in test suite + val test by getting(JvmTestSuite::class) { + // Use Kotlin Test test framework + useKotlinTest(embeddedKotlinVersion) + } + + // Create a new test suite + val functionalTest by registering(JvmTestSuite::class) { + // Use Kotlin Test test framework + useKotlinTest(embeddedKotlinVersion) + + dependencies { + // functionalTest test suite depends on the production code in tests + implementation(project()) + } + + targets { + all { + // This test suite should run after the built-in test suite has run its tests + testTask.configure { shouldRunAfter(test) } + } + } + } + } +} + +gradlePlugin { + // Define the plugin + val greeting by plugins.creating { + id = "org.example.base" + implementationClass = "org.example.GradleBasePlugin" + } +} + +gradlePlugin.testSourceSets.add(sourceSets["functionalTest"]) + +tasks.named("check") { + // Include functionalTest as part of the check lifecycle + dependsOn(testing.suites.named("functionalTest")) +} diff --git a/gradle/manifest-dependencies/settings.gradle.kts b/gradle/manifest-dependencies/settings.gradle.kts new file mode 100644 index 0000000..23cdc1e --- /dev/null +++ b/gradle/manifest-dependencies/settings.gradle.kts @@ -0,0 +1,10 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.7/userguide/multi_project_builds.html in the Gradle documentation. + * This project uses @Incubating APIs which are subject to change. + */ + +rootProject.name = "gradle-manifest-dependencies" +include("plugin") diff --git a/gradle/manifest-dependencies/src/functionalTest/kotlin/org/example/GradleBasePluginFunctionalTest.kt b/gradle/manifest-dependencies/src/functionalTest/kotlin/org/example/GradleBasePluginFunctionalTest.kt new file mode 100644 index 0000000..228c8ff --- /dev/null +++ b/gradle/manifest-dependencies/src/functionalTest/kotlin/org/example/GradleBasePluginFunctionalTest.kt @@ -0,0 +1,43 @@ +/* + * This source file was generated by the Gradle 'init' task + */ +package org.example + +import java.io.File +import kotlin.test.assertTrue +import kotlin.test.Test +import org.gradle.testkit.runner.GradleRunner +import org.junit.jupiter.api.io.TempDir + +/** + * A simple functional test for the 'org.example.greeting' plugin. + */ +class GradleBasePluginFunctionalTest { + + @field:TempDir + lateinit var projectDir: File + + private val buildFile by lazy { projectDir.resolve("build.gradle") } + private val settingsFile by lazy { projectDir.resolve("settings.gradle") } + + @Test fun `can run task`() { + // Set up the test build + settingsFile.writeText("") + buildFile.writeText(""" + plugins { + id('org.example.greeting') + } + """.trimIndent()) + + // Run the build + val runner = GradleRunner.create() + runner.forwardOutput() + runner.withPluginClasspath() + runner.withArguments("greeting") + runner.withProjectDir(projectDir) + val result = runner.build() + + // Verify the result + assertTrue(result.output.contains("Hello from plugin 'org.example.greeting'")) + } +} diff --git a/gradle/manifest-dependencies/src/main/kotlin/org/example/GradleBasePlugin.kt b/gradle/manifest-dependencies/src/main/kotlin/org/example/GradleBasePlugin.kt new file mode 100644 index 0000000..7161680 --- /dev/null +++ b/gradle/manifest-dependencies/src/main/kotlin/org/example/GradleBasePlugin.kt @@ -0,0 +1,37 @@ +/* + * This source file was generated by the Gradle 'init' task + */ +package org.example + +import org.gradle.api.Project +import org.gradle.api.Plugin +import org.gradle.configurationcache.extensions.capitalized +import org.gradle.jvm.tasks.Jar +import org.gradle.kotlin.dsl.attributes +import org.gradle.kotlin.dsl.get +import org.gradle.kotlin.dsl.getByName +import org.gradle.kotlin.dsl.named + +/** + * A simple 'hello world' plugin. + */ +class GradleBasePlugin : Plugin { + override fun apply(project: Project) { + project.tasks.named("jar") { + // https://docs.gradle.org/current/userguide/java_plugin.html#tab:configurations + val main = listOf("compileClasspath", "runtimeClasspath") + // val test = listOf("testCompileClasspath", "testRuntimeClasspath") + doFirst { + manifest { + project.configurations.filter { it.name in main }.forEach { c -> + val name = "Dependencies-" + c.name.substringBefore("Classpath").capitalized() + val deps = c.resolvedConfiguration.resolvedArtifacts + .map { a -> a.moduleVersion.id.toString() + a.classifier?.let { ":$it" }.orEmpty() } + .sorted().joinToString(";") + attributes(name to deps) + } + } + } + } + } +} diff --git a/gradle/manifest-dependencies/src/test/kotlin/org/example/GradleBasePluginTest.kt b/gradle/manifest-dependencies/src/test/kotlin/org/example/GradleBasePluginTest.kt new file mode 100644 index 0000000..a0c5077 --- /dev/null +++ b/gradle/manifest-dependencies/src/test/kotlin/org/example/GradleBasePluginTest.kt @@ -0,0 +1,22 @@ +/* + * This source file was generated by the Gradle 'init' task + */ +package org.example + +import org.gradle.testfixtures.ProjectBuilder +import kotlin.test.Test +import kotlin.test.assertNotNull + +/** + * A simple unit test for the 'org.example.greeting' plugin. + */ +class GradleBasePluginTest { + @Test fun `plugin registers task`() { + // Create a test project and apply the plugin + val project = ProjectBuilder.builder().build() + project.plugins.apply("org.example.greeting") + + // Verify the result + assertNotNull(project.tasks.findByName("greeting")) + } +} diff --git a/gradle/platform/build.gradle.kts b/gradle/platform/build.gradle.kts index 8f58774..4e13a3a 100644 --- a/gradle/platform/build.gradle.kts +++ b/gradle/platform/build.gradle.kts @@ -1,53 +1,76 @@ -import groovy.xml.XmlSlurper -import groovy.xml.slurpersupport.GPathResult -import groovy.xml.slurpersupport.NodeChild -import org.gradle.internal.impldep.org.junit.experimental.categories.Categories.CategoryFilter.exclude - plugins { `java-platform` publish -// id("org.gradlex.java-ecosystem-capabilities-base") // only rules -// id("org.gradlex.logging-capabilities") // logging extension + // id("org.gradlex.java-ecosystem-capabilities-base") // only rules + // id("org.gradlex.logging-capabilities") // logging extension } group = "org.scijava" version = "0.13" //(effXml / "version").toString() -operator fun GPathResult.div(child: String) = children().find { (it!! as NodeChild).name() == child } as GPathResult +//operator fun GPathResult.div(child: String) = children().find { (it!! as NodeChild).name() == child } as GPathResult -val effXml = XmlSlurper().parse(projectDir.resolve("eff.xml")) +//val effXml = XmlSlurper().parse(projectDir.resolve("eff.xml")) javaPlatform { allowDependencies() } -val runtimeDeps = listOf("xalan:serializer", "xalan:xalan") +val runtimeDeps = listOf("org.antlr:antlr-runtime", + "xalan:serializer", + "xalan:xalan", + "com.github.vbmacher:java-cup-runtime", + "nz.ac.waikato.cms.weka.thirdparty:java-cup-11b-runtime", + "org.jogamp.gluegen:gluegen-rt-main", + "org.jogamp.gluegen:gluegen-rt", + "org.jogamp.joal:joal", + "org.jogamp.jocl:jocl", + "org.jogamp.jogl:jogl-all-main", + "org.jogamp.jogl:jogl-all", + "org.jogamp.jogl:jogl-all-noawt", + "com.nativelibs4java:bridj", + "org.bytedeco:ffmpeg", + "org.bytedeco:hdf5", + "org.bytedeco:leptonica", + "org.bytedeco:openblas", + "org.bytedeco:opencv", + "org.bytedeco:tesseract", + "org.jline:jline-native", + "com.github.jnr:jffi", + "org.jzy3d:jzy3d-native-jogl-awt", + "org.jzy3d:jzy3d-native-jogl-swing") + +val jogampNatives = listOf("org.jogamp.gluegen:gluegen-rt-natives-", + "org.jogamp.jogl:jogl-all-natives-", + "org.jogamp.gluegen:gluegen-rt-natives-", + "org.jogamp.jogl:jogl-all-natives-") dependencies { - val deps = effXml / "dependencyManagement" / "dependencies" + // val deps = effXml / "dependencyManagement" / "dependencies" constraints { - deps.children().forEach { - val node = it!! as NodeChild - val g = node / "groupId" - val a = node / "artifactId" - val v = node / "version" - if ("$g:$a" in runtimeDeps) - runtime("$g:$a:$v") - else - api("$g:$a:$v") - // println("$g:$a:$v") + // deps.children().forEach { + // val node = it!! as NodeChild + // val g = node / "groupId" + // val a = node / "artifactId" + // val v = node / "version" + // } + versionCatalogs.forEach { versionCatalog -> + // println("catalog ${versionCatalog.name}") + versionCatalog.libraryAliases.forEach { lib -> + val dep = versionCatalog.findLibrary(lib).get().get() + val ga = dep.module.run { "$group:$name" } + // println(dep) + if (ga in runtimeDeps || jogampNatives.any { it.startsWith(ga) }) + runtime(dep) //.also { println("runtime($dep)") } + else + api(dep) //.also{ println("api($dep)") } + } } } -// versionCatalogs.forEach { versionCatalog -> -// println("catalog ${versionCatalog.name}") -// versionCatalog.libraryAliases.forEach { -// println(versionCatalog.findLibrary(it).get().get()) -// } -// } -// println(libs.groovy.core.get()) - api(platform("com.fasterxml.jackson:jackson-bom:" + libs.com.fasterxml.jackson.core.jacksonCore.get().version)) + // println(libs.my.lib.get()) + // api(platform("com.fasterxml.jackson:jackson-bom:" + libs.com.fasterxml.jackson.core.jacksonCore.get().version)) api(platform("jakarta.platform:jakarta.jakartaee-bom:10.0.0")) // api(platform("com.google.api-client:google-api-client-bom:" + libs.com.google.api.client.googleApiClient.get().version)) // api(platform("com.google.api:gax-bom:" + libs.com.google.api.gax.get().version)) diff --git a/gradle/platform/buildSrc/src/main/kotlin/publish.gradle.kts b/gradle/platform/buildSrc/src/main/kotlin/publish.gradle.kts index 1ae16b3..ece9665 100644 --- a/gradle/platform/buildSrc/src/main/kotlin/publish.gradle.kts +++ b/gradle/platform/buildSrc/src/main/kotlin/publish.gradle.kts @@ -7,18 +7,16 @@ publishing { repositories { maven { name = "sciJava" - credentials(PasswordCredentials::class) - url = uri("https://maven.scijava.org/content/repositories/releases") +// credentials(PasswordCredentials::class) +// url = uri("https://maven.scijava.org/content/repositories/releases") + url = uri("repo") } } create("sciJavaPlatform") { from(components["javaPlatform"]) groupId = "org.scijava" - println(groupId) artifactId = "gradle-platform" - println(artifactId) version = "0.13" - println(version) /*pom.withXml { val nodes = Stack() diff --git a/gradle/platform/gradle/wrapper/gradle-wrapper.jar b/gradle/platform/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..d64cd4917707c1f8861d8cb53dd15194d4248596 GIT binary patch literal 43462 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 literal 0 HcmV?d00001 diff --git a/gradle/platform/gradle/wrapper/gradle-wrapper.properties b/gradle/platform/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..b82aa23 --- /dev/null +++ b/gradle/platform/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradle/platform/gradlew b/gradle/platform/gradlew new file mode 100755 index 0000000..1aa94a4 --- /dev/null +++ b/gradle/platform/gradlew @@ -0,0 +1,249 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradle/platform/gradlew.bat b/gradle/platform/gradlew.bat new file mode 100644 index 0000000..93e3f59 --- /dev/null +++ b/gradle/platform/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/gradle/platform/settings.gradle.kts b/gradle/platform/settings.gradle.kts index 162f20a..bb66fc7 100644 --- a/gradle/platform/settings.gradle.kts +++ b/gradle/platform/settings.gradle.kts @@ -13,12 +13,15 @@ dependencyResolutionManagement { // repositories { .. } versionCatalogs { - create("libs").from("org.scijava:gradle-catalog") +// create("libs") { +// from("org.scijava:gradle-catalog:0.11") +// library("my-lib", "com.mycompany:mylib:1.2") +// } // maybeCreate("libs").version("groovy", "3.0.9") // maybeCreate("libs").library("groovy-core", "org.codehaus.groovy:groovy:2.4.15") // fails with "Could not resolve all artifacts for configuration 'incomingCatalogForLibs0'." -// create("libs").from(files("../catalog/build/version-catalog/libs.versions.toml")) + create("libs").from(files("../catalog/build/version-catalog/libs.versions.toml")) } includeBuild("../catalog") diff --git a/gradle/settings.gradle.kts b/gradle/settings.gradle.kts index 6a0ad4b..2a15aec 100644 --- a/gradle/settings.gradle.kts +++ b/gradle/settings.gradle.kts @@ -5,7 +5,8 @@ rootProject.name = "gradle" includeBuild("catalog") includeBuild("platform") -includeBuild("playground") -includeBuild("enforcer") +includeBuild("manifest-dependencies") +//includeBuild("playground") +//includeBuild("enforcer") enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") \ No newline at end of file diff --git a/pom.xml b/pom.xml index 3184a27..f173dc9 100644 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,10 @@ + + + + + 4.0.0 @@ -6870,4 +6875,83 @@ + + + + gradle-catalog + + + + gradle/platform + + + + + + org.codehaus.mojo + exec-maven-plugin + + + generate-gradle-catalog + generate-sources + + exec + + + ../gradlew + gradle/catalog + + generateCatalogAsToml + + + + + generate-gradle-platform + generate-sources + + exec + + + ../gradlew + gradle/platform + + generateMetadataFileForSciJavaPlatformPublication + + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + + + attach-gradle-catalog + + package + + + attach-artifact + + + + + gradle/catalog/build/version-catalog/libs.versions.toml + toml + + + gradle/platform/build/publications/sciJavaPlatform/module.json + + module + + + + + + + + + + From 69fc630f85a3a60c0c0565cccb12563cbb936caa Mon Sep 17 00:00:00 2001 From: Giuseppe Barbieri Date: Thu, 25 Apr 2024 11:50:55 +0200 Subject: [PATCH 020/294] commented for the moment any bom dependency --- gradle/platform/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/platform/build.gradle.kts b/gradle/platform/build.gradle.kts index 4e13a3a..08c00de 100644 --- a/gradle/platform/build.gradle.kts +++ b/gradle/platform/build.gradle.kts @@ -71,7 +71,7 @@ dependencies { // println(libs.my.lib.get()) // api(platform("com.fasterxml.jackson:jackson-bom:" + libs.com.fasterxml.jackson.core.jacksonCore.get().version)) - api(platform("jakarta.platform:jakarta.jakartaee-bom:10.0.0")) +// api(platform("jakarta.platform:jakarta.jakartaee-bom:10.0.0")) // api(platform("com.google.api-client:google-api-client-bom:" + libs.com.google.api.client.googleApiClient.get().version)) // api(platform("com.google.api:gax-bom:" + libs.com.google.api.gax.get().version)) // api(platform("com.google.api:gapic-generator-java-bom:" + libs.com.google.api.grpc.protoGoogleCommonProtos.get().version)) From d261125db6eee095ccb40028b7c80aefacadb4fa Mon Sep 17 00:00:00 2001 From: Giuseppe Barbieri Date: Fri, 26 Apr 2024 12:54:03 +0200 Subject: [PATCH 021/294] playing around with re-adapted early-prototype declarative Gradle --- .idea/compiler.xml | 6 +- .idea/gradle.xml | 44 +++++--- .idea/modules.xml | 1 + .../buildSrc/declarative.buildSrc.main.iml | 8 ++ gradle/declarative/build.gradle.kts | 9 ++ gradle/declarative/buildSrc/build.gradle.kts | 7 ++ .../declarative/buildSrc/settings.gradle.kts | 1 + .../common/ApplicationDependencies.kt | 15 +++ .../common/LibraryDependencies.kt | 19 ++++ .../api/experimental/java/JavaApplication.kt | 11 ++ .../api/experimental/java/JavaLibrary.kt | 22 ++++ .../java/StandaloneJavaApplicationPlugin.kt | 30 +++++ .../java/StandaloneJavaLibraryPlugin.kt | 28 +++++ .../api/experimental/jvm/HasJavaTarget.kt | 13 +++ .../api/experimental/jvm/HasJavaTargets.kt | 18 +++ .../api/experimental/jvm/HasJvmApplication.kt | 23 ++++ .../api/experimental/jvm/HasJvmLibrary.kt | 19 ++++ .../gradle/api/experimental/jvm/JavaTarget.kt | 7 ++ .../api/experimental/jvm/JvmApplication.kt | 6 + .../experimental/jvm/JvmEcosystemPlugin.kt | 15 +++ .../gradle/api/experimental/jvm/JvmLibrary.kt | 9 ++ .../gradle/api/experimental/jvm/JvmTarget.kt | 17 +++ .../experimental/jvm/JvmTargetContainer.kt | 33 ++++++ .../jvm/StandaloneJvmApplicationPlugin.kt | 46 ++++++++ .../jvm/StandaloneJvmLibraryPlugin.kt | 50 +++++++++ .../jvm/internal/JvmPluginSupport.kt | 106 ++++++++++++++++++ .../software/RegistersSoftwareTypes.kt | 37 ++++++ .../internal/plugins/software/SoftwareType.kt | 44 ++++++++ .../dsl/model/annotations/Adding.kt | 22 ++++ .../dsl/model/annotations/Configuring.kt | 22 ++++ .../dsl/model/annotations/Restricted.kt | 8 ++ gradle/declarative/settings.gradle.kts | 6 + gradle/settings.gradle.kts | 1 + 33 files changed, 686 insertions(+), 17 deletions(-) create mode 100644 .idea/modules/declarative/buildSrc/declarative.buildSrc.main.iml create mode 100644 gradle/declarative/build.gradle.kts create mode 100644 gradle/declarative/buildSrc/build.gradle.kts create mode 100644 gradle/declarative/buildSrc/settings.gradle.kts create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/experimental/common/ApplicationDependencies.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/experimental/common/LibraryDependencies.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/experimental/java/JavaApplication.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/experimental/java/JavaLibrary.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/experimental/java/StandaloneJavaApplicationPlugin.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/experimental/java/StandaloneJavaLibraryPlugin.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/experimental/jvm/HasJavaTarget.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/experimental/jvm/HasJavaTargets.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/experimental/jvm/HasJvmApplication.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/experimental/jvm/HasJvmLibrary.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/experimental/jvm/JavaTarget.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/experimental/jvm/JvmApplication.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/experimental/jvm/JvmEcosystemPlugin.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/experimental/jvm/JvmLibrary.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/experimental/jvm/JvmTarget.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/experimental/jvm/JvmTargetContainer.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/experimental/jvm/StandaloneJvmApplicationPlugin.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/experimental/jvm/StandaloneJvmLibraryPlugin.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/experimental/jvm/internal/JvmPluginSupport.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/internal/plugins/software/RegistersSoftwareTypes.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/api/internal/plugins/software/SoftwareType.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/declarative/dsl/model/annotations/Adding.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/declarative/dsl/model/annotations/Configuring.kt create mode 100644 gradle/declarative/buildSrc/src/main/kotlin/org/gradle/declarative/dsl/model/annotations/Restricted.kt create mode 100644 gradle/declarative/settings.gradle.kts diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 34d4935..44b2129 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -2,14 +2,12 @@ + + - - - - diff --git a/.idea/gradle.xml b/.idea/gradle.xml index f2b130e..fada239 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -3,35 +3,53 @@

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 diff --git a/gradle/catalog/gradle/wrapper/gradle-wrapper.properties b/gradle/catalog/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index b82aa23..0000000 --- a/gradle/catalog/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/gradle/catalog/gradlew b/gradle/catalog/gradlew deleted file mode 100755 index 1aa94a4..0000000 --- a/gradle/catalog/gradlew +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/gradle/catalog/gradlew.bat b/gradle/catalog/gradlew.bat deleted file mode 100644 index 93e3f59..0000000 --- a/gradle/catalog/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/gradle/catalog/settings.gradle.kts b/gradle/catalog/settings.gradle.kts deleted file mode 100644 index 8d99556..0000000 --- a/gradle/catalog/settings.gradle.kts +++ /dev/null @@ -1,12 +0,0 @@ -/* - * This file was generated by the Gradle 'init' task. - * - * The settings file is used to specify which projects to include in your build. - * - * Detailed information about configuring a multi-project build in Gradle can be found - * in the user manual at https://docs.gradle.org/7.2/userguide/multi_project_builds.html - */ - -rootProject.name = "gradle-catalog" - -enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") \ No newline at end of file diff --git a/gradle/declarative-playground/build.gradle.kts b/gradle/declarative-playground/build.gradle.kts deleted file mode 100644 index 060936a..0000000 --- a/gradle/declarative-playground/build.gradle.kts +++ /dev/null @@ -1,7 +0,0 @@ -plugins { - embeddedKotlin("jvm").apply(false) -} - -repositories { - mavenCentral() -} \ No newline at end of file diff --git a/gradle/declarative-playground/java-util/build.gradle.kts b/gradle/declarative-playground/java-util/build.gradle.kts deleted file mode 100644 index bf9a481..0000000 --- a/gradle/declarative-playground/java-util/build.gradle.kts +++ /dev/null @@ -1,7 +0,0 @@ -plugins { - id("org.scijava.library") -} - -javaLibrary { - javaVersion = 11 -} diff --git a/gradle/declarative-playground/java-util/src/main/java/com/example/utils/Utils.java b/gradle/declarative-playground/java-util/src/main/java/com/example/utils/Utils.java deleted file mode 100644 index 56680ea..0000000 --- a/gradle/declarative-playground/java-util/src/main/java/com/example/utils/Utils.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.example.utils; - -public class Utils { - public String getWelcome() { - return "Welcome to the java-utils library!"; - } -} diff --git a/gradle/declarative-playground/kotlin-jvm-util/build.gradle.kts b/gradle/declarative-playground/kotlin-jvm-util/build.gradle.kts deleted file mode 100644 index cb20a37..0000000 --- a/gradle/declarative-playground/kotlin-jvm-util/build.gradle.kts +++ /dev/null @@ -1,7 +0,0 @@ -plugins { - id("org.scijava.kotlin-library") -} - -kotlinJvmLibrary { - javaVersion = 21 -} \ No newline at end of file diff --git a/gradle/declarative-playground/kotlin-jvm-util/src/main/kotlin/com/example/utils/Utils.kt b/gradle/declarative-playground/kotlin-jvm-util/src/main/kotlin/com/example/utils/Utils.kt deleted file mode 100644 index 0cd7fb6..0000000 --- a/gradle/declarative-playground/kotlin-jvm-util/src/main/kotlin/com/example/utils/Utils.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.example.utils - -class Utils { - val welcome: String - get() = "Welcome to the kotlin-jvm-utils library!" -} \ No newline at end of file diff --git a/gradle/declarative-playground/settings.gradle.kts b/gradle/declarative-playground/settings.gradle.kts deleted file mode 100644 index ae155b7..0000000 --- a/gradle/declarative-playground/settings.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -rootProject.name = "declarative-playground" - -rootDir.list()!!.forEach { - if ("java" in it || "kotlin" in it) - include(it) -} -includeBuild("../declarative") - -dependencyResolutionManagement { - repositories { - mavenCentral() - } -} - -pluginManagement { - repositories { mavenCentral() } -} \ No newline at end of file diff --git a/gradle/declarative-playground/testbed-java-application/build.gradle.kts b/gradle/declarative-playground/testbed-java-application/build.gradle.kts deleted file mode 100644 index 9359064..0000000 --- a/gradle/declarative-playground/testbed-java-application/build.gradle.kts +++ /dev/null @@ -1,13 +0,0 @@ -plugins { - id("org.scijava.application") -} - -javaApplication { - javaVersion = 21 - mainClass = "com.example.App" - - dependencies { - implementation(project(":java-util")) - implementation("com.google.guava:guava:32.1.3-jre") - } -} diff --git a/gradle/declarative-playground/testbed-java-application/src/main/java/com/example/App.java b/gradle/declarative-playground/testbed-java-application/src/main/java/com/example/App.java deleted file mode 100644 index 4df6800..0000000 --- a/gradle/declarative-playground/testbed-java-application/src/main/java/com/example/App.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.example; - -import com.example.utils.Utils; -import com.google.common.collect.ImmutableList; - -public class App { - public static void main(String[] args) { - // Verify that Guava is available - ImmutableList.Builder builder = ImmutableList.builder(); - builder.add("Hello from Java " + System.getProperty("java.version")); - - // Verify that the Java library is available - Utils utils = new Utils(); - builder.add(utils.getWelcome()); - - ImmutableList messages = builder.build(); - messages.forEach(System.out::println); - } -} \ No newline at end of file diff --git a/gradle/declarative-playground/testbed-java-library/build.gradle.kts b/gradle/declarative-playground/testbed-java-library/build.gradle.kts deleted file mode 100644 index da3e24b..0000000 --- a/gradle/declarative-playground/testbed-java-library/build.gradle.kts +++ /dev/null @@ -1,12 +0,0 @@ -plugins { - id("org.scijava.library") -} - -javaLibrary { - javaVersion = 21 - - dependencies { - implementation(project(":java-util")) - implementation("com.google.guava:guava:32.1.3-jre") - } -} diff --git a/gradle/declarative-playground/testbed-java-library/src/main/java/com/example/lib/Library.java b/gradle/declarative-playground/testbed-java-library/src/main/java/com/example/lib/Library.java deleted file mode 100644 index cb4ee33..0000000 --- a/gradle/declarative-playground/testbed-java-library/src/main/java/com/example/lib/Library.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.example.lib; - -import com.example.utils.Utils; -import com.google.common.collect.ImmutableList; - -public class Library { - public Iterable getMessages() { - // Verify that Guava is available - ImmutableList.Builder builder = ImmutableList.builder(); - builder.add("Hello from Java " + System.getProperty("java.version")); - - // Verify that the Java library is available - Utils utils = new Utils(); - builder.add(utils.getWelcome()); - - return builder.build(); - } -} diff --git a/gradle/declarative-playground/testbed-kotlin-jvm-application/build.gradle.kts b/gradle/declarative-playground/testbed-kotlin-jvm-application/build.gradle.kts deleted file mode 100644 index 10dda1b..0000000 --- a/gradle/declarative-playground/testbed-kotlin-jvm-application/build.gradle.kts +++ /dev/null @@ -1,13 +0,0 @@ -plugins { - id("org.scijava.kotlin-application") -} - -kotlinJvmApplication { - javaVersion = 21 - mainClass = "com.example.AppKt" - - dependencies { - implementation(project(":kotlin-jvm-util")) - implementation("com.google.guava:guava:32.1.3-jre") - } -} diff --git a/gradle/declarative-playground/testbed-kotlin-jvm-application/src/main/kotlin/com/example/App.kt b/gradle/declarative-playground/testbed-kotlin-jvm-application/src/main/kotlin/com/example/App.kt deleted file mode 100644 index 66721b2..0000000 --- a/gradle/declarative-playground/testbed-kotlin-jvm-application/src/main/kotlin/com/example/App.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.example - -import com.example.utils.Utils -import com.google.common.collect.ImmutableList - -fun main() { - // Verify that Guava is available - val builder = ImmutableList.builder() - builder.add("Hello from Kotlin on JVM ${System.getProperty("java.version")}") - - // Verify that the Kotlin JVM library is available - val utils = Utils() - builder.add(utils.welcome) - - val messages = builder.build() - messages.forEach(::println) -} \ No newline at end of file diff --git a/gradle/declarative/build.gradle.kts b/gradle/declarative/build.gradle.kts deleted file mode 100644 index c61514d..0000000 --- a/gradle/declarative/build.gradle.kts +++ /dev/null @@ -1,63 +0,0 @@ -//import org.gradle.api.experimental.java.javaLibrary - -plugins { - `kotlin-dsl` - id("com.gradle.plugin-publish") version "1.2.1" -} - -repositories { mavenCentral() } - -//javaLibrary { -// javaVersion = 11 -//} - -dependencies { -// implementation(kotlin("multiplatform", embeddedKotlinVersion)) - implementation("org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin:$embeddedKotlinVersion") -// implementation(kotlin("jvm")) -} - -gradlePlugin { - plugins { -// create("jvm-library") { -// id = "org.gradle.experimental.jvm-library" -// implementationClass = "org.gradle.api.experimental.jvm.StandaloneJvmLibraryPlugin" -// tags = setOf("declarative-gradle", "java", "jvm") -// } -// create("java-library") { -// id = "org.gradle.experimental.java-library" -// implementationClass = "org.gradle.api.experimental.java.StandaloneJavaLibraryPlugin" -// tags = setOf("declarative-gradle", "java", "jvm") -// } - create("scijava.library") { - id = "org.$name" - implementationClass = "org.scijava.SciJavaLibraryPlugin" - tags = setOf("declarative-gradle", "scijava", "java", "jvm") - } - create("scijava.application") { - id = "org.$name" - implementationClass = "org.scijava.SciJavaApplicationPlugin" - tags = setOf("declarative-gradle", "scijava", "java", "jvm") - } - create("scijava.kotlin-library") { - id = "org.$name" - implementationClass = "org.scijava.SciJavaKotlinLibraryPlugin" - tags = setOf("declarative-gradle", "scijava", "java", "kotlin", "jvm") - } - create("scijava.kotlin-application") { - id = "org.$name" - implementationClass = "org.scijava.SciJavaKotlinApplicationPlugin" - tags = setOf("declarative-gradle", "scijava", "java", "kotlin", "jvm") - } -// create("java-application") { -// id = "org.gradle.experimental.java-application" -// implementationClass = "org.gradle.api.experimental.java.StandaloneJavaApplicationPlugin" -// tags = setOf("declarative-gradle", "java", "jvm") -// } -// create("jvm-ecosystem") { -// id = "org.gradle.experimental.jvm-ecosystem" -// implementationClass = "org.gradle.api.experimental.jvm.JvmEcosystemPlugin" -// tags = setOf("declarative-gradle", "java", "jvm") -// } - } -} diff --git a/gradle/declarative/settings.gradle.kts b/gradle/declarative/settings.gradle.kts deleted file mode 100644 index e4f87df..0000000 --- a/gradle/declarative/settings.gradle.kts +++ /dev/null @@ -1,6 +0,0 @@ -// This is an empty umbrella build including all the component builds. -// This build is not necessarily needed. The component builds work independently. - -rootProject.name = "declarative" - -enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") \ No newline at end of file diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/common/ApplicationDependencies.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/common/ApplicationDependencies.kt deleted file mode 100644 index c1ce39d..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/common/ApplicationDependencies.kt +++ /dev/null @@ -1,15 +0,0 @@ -package org.gradle.api.experimental.common - -import org.gradle.api.artifacts.dsl.Dependencies -import org.gradle.api.artifacts.dsl.DependencyCollector -import org.gradle.declarative.dsl.model.annotations.Restricted - -/** - * The declarative dependencies DSL block for an application. - */ -@Restricted -interface ApplicationDependencies : Dependencies { - val implementation: DependencyCollector - val runtimeOnly: DependencyCollector - val compileOnly: DependencyCollector -} diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/common/LibraryDependencies.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/common/LibraryDependencies.kt deleted file mode 100644 index 21ed088..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/common/LibraryDependencies.kt +++ /dev/null @@ -1,19 +0,0 @@ -package org.gradle.api.experimental.common - -import org.gradle.api.artifacts.dsl.Dependencies -import org.gradle.api.artifacts.dsl.DependencyCollector -import org.gradle.declarative.dsl.model.annotations.Restricted - -/** - * The declarative dependencies DSL block for a library. - */ -@Restricted -interface LibraryDependencies : Dependencies { - val api: DependencyCollector - val implementation: DependencyCollector - val runtimeOnly: DependencyCollector - val compileOnly: DependencyCollector - // CompileOnlyApi is not included here, since both Android and KMP do not support it. - // Does that mean we should also reconsider if we should support it? Or, should we - // talk to Android and KMP about adding support -} diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/java/JavaApplication.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/java/JavaApplication.kt deleted file mode 100644 index 19fac4d..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/java/JavaApplication.kt +++ /dev/null @@ -1,13 +0,0 @@ -package org.gradle.api.experimental.java - -import org.gradle.api.experimental.jvm.HasJavaTarget -import org.gradle.api.experimental.jvm.HasJvmApplication -import org.gradle.api.experimental.jvm.HasJvmLibrary -import org.gradle.declarative.dsl.model.annotations.Restricted -import org.scijava.Fine - -/** - * An application implemented using a single version of Java. - */ -@Restricted -interface JavaApplication : HasJavaTarget, HasJvmApplication \ No newline at end of file diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/java/JavaLibrary.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/java/JavaLibrary.kt deleted file mode 100644 index 26c3158..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/java/JavaLibrary.kt +++ /dev/null @@ -1,20 +0,0 @@ -package org.gradle.api.experimental.java - -import org.gradle.api.experimental.jvm.HasJavaTarget -import org.gradle.api.experimental.jvm.HasJvmLibrary -import org.gradle.declarative.dsl.model.annotations.Restricted - -/** - * A library implemented using a single version of Java. - */ -@Restricted -interface JavaLibrary : HasJavaTarget, HasJvmLibrary - -//inline fun javaLibrary(block: JavaLibrary.() -> Unit): JavaLibrary { -// return object : JavaLibrary{ -// override val javaVersion: Property = Property -// override val dependencies: LibraryDependencies -// get() = TODO("Not yet implemented") -// -// }.also(block) -//} \ No newline at end of file diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/java/StandaloneJavaApplicationPlugin.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/java/StandaloneJavaApplicationPlugin.kt deleted file mode 100644 index c518498..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/java/StandaloneJavaApplicationPlugin.kt +++ /dev/null @@ -1,36 +0,0 @@ -package org.gradle.api.experimental.java - -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.experimental.jvm.internal.JvmPluginSupport -import org.gradle.api.plugins.ApplicationPlugin -import org.gradle.kotlin.dsl.create -import org.scijava.ValidationApplication - -/** - * Creates a declarative [JavaApplication] DSL model, applies the official Java application plugin, - * and links the declarative model to the official plugin. - */ -abstract class StandaloneJavaApplicationPlugin : Plugin, ValidationApplication { -// @get:SoftwareType(name = "javaApplication", modelPublicType = JavaApplication::class) -// abstract val application: JavaApplication - - override val extensionName = "javaApplication" - - override fun apply(project: Project) { - val application = project.extensions.create(extensionName) - val dslModel = application - - project.plugins.apply(ApplicationPlugin::class.java) - - linkDslModelToPlugin(project, dslModel) - - project.validate() - } - - private fun linkDslModelToPlugin(project: Project, dslModel: JavaApplication) { - JvmPluginSupport.linkJavaVersion(project, dslModel) - JvmPluginSupport.linkApplicationMainClass(project, dslModel) - JvmPluginSupport.linkMainSourceSourceSetDependencies(project, dslModel.dependencies) - } -} diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/java/StandaloneJavaLibraryPlugin.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/java/StandaloneJavaLibraryPlugin.kt deleted file mode 100644 index 657b697..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/java/StandaloneJavaLibraryPlugin.kt +++ /dev/null @@ -1,35 +0,0 @@ -package org.gradle.api.experimental.java - -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.experimental.jvm.internal.JvmPluginSupport -import org.gradle.api.plugins.JavaLibraryPlugin -import org.gradle.kotlin.dsl.create -import org.scijava.ValidationLibrary - -/** - * Creates a declarative [JavaLibrary] DSL model, applies the official Java library plugin, - * and links the declarative model to the official plugin. - */ -abstract class StandaloneJavaLibraryPlugin : Plugin, ValidationLibrary { - // @get:SoftwareType(name = "javaLibrary", modelPublicType = JavaLibrary::class) - // abstract val library: JavaLibrary - - override val extensionName = "javaLibrary" - - override fun apply(project: Project) { - val javaLibrary = project.extensions.create("javaLibrary") - val dslModel = javaLibrary - - project.plugins.apply(JavaLibraryPlugin::class.java) - - linkDslModelToPlugin(project, dslModel) - - project.validate() - } - - private fun linkDslModelToPlugin(project: Project, dslModel: JavaLibrary) { - JvmPluginSupport.linkJavaVersion(project, dslModel) - JvmPluginSupport.linkMainSourceSourceSetDependencies(project, dslModel.dependencies) - } -} diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/HasJavaTarget.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/HasJavaTarget.kt deleted file mode 100644 index 5f6b916..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/HasJavaTarget.kt +++ /dev/null @@ -1,13 +0,0 @@ -package org.gradle.api.experimental.jvm - -import org.gradle.api.provider.Property -import org.gradle.declarative.dsl.model.annotations.Restricted - -/** - * A component that is built for a single Java version. - */ -@Restricted -interface HasJavaTarget { - @get:Restricted - val javaVersion: Property -} diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/HasJavaTargets.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/HasJavaTargets.kt deleted file mode 100644 index aab1357..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/HasJavaTargets.kt +++ /dev/null @@ -1,18 +0,0 @@ -package org.gradle.api.experimental.jvm - -import org.gradle.api.Action -import org.gradle.api.tasks.Nested -import org.gradle.declarative.dsl.model.annotations.Configuring -import org.gradle.declarative.dsl.model.annotations.Restricted - -/** - * A component that is built for multiple Java versions. - */ -@Restricted -interface HasJavaTargets { - @get:Nested - val targets: JvmTargetContainer - - @Configuring - fun targets(action: Action) = action.execute(targets) -} diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/HasJvmApplication.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/HasJvmApplication.kt deleted file mode 100644 index c084e9c..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/HasJvmApplication.kt +++ /dev/null @@ -1,23 +0,0 @@ -package org.gradle.api.experimental.jvm - -import org.gradle.api.Action -import org.gradle.api.experimental.common.ApplicationDependencies -import org.gradle.api.provider.Property -import org.gradle.api.tasks.Nested -import org.gradle.declarative.dsl.model.annotations.Configuring -import org.gradle.declarative.dsl.model.annotations.Restricted - -/** - * Represents an application that runs on the JVM. - */ -@Restricted -interface HasJvmApplication { - @get:Restricted - val mainClass: Property - - @get:Nested - val dependencies: ApplicationDependencies - - @Configuring - fun dependencies(action: Action) = action.execute(dependencies) -} diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/HasJvmLibrary.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/HasJvmLibrary.kt deleted file mode 100644 index 8c761d7..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/HasJvmLibrary.kt +++ /dev/null @@ -1,20 +0,0 @@ -package org.gradle.api.experimental.jvm - -import org.gradle.api.Action -import org.gradle.api.experimental.common.LibraryDependencies -import org.gradle.api.tasks.Nested -import org.gradle.declarative.dsl.model.annotations.Configuring -import org.gradle.declarative.dsl.model.annotations.Restricted -import org.scijava.Fine - -/** - * Represents a library that runs on the JVM. - */ -@Restricted -interface HasJvmLibrary { - @get:Nested - val dependencies: LibraryDependencies - - @Configuring - fun dependencies(action: Action) = action.execute(dependencies) -} \ No newline at end of file diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/JavaTarget.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/JavaTarget.kt deleted file mode 100644 index 6fc1861..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/JavaTarget.kt +++ /dev/null @@ -1,7 +0,0 @@ -package org.gradle.api.experimental.jvm - -import org.gradle.api.Named - -abstract class JavaTarget(val javaVersion: Int) : JvmTarget, Named { - override fun getName(): String = "java$javaVersion" -} diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/JvmApplication.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/JvmApplication.kt deleted file mode 100644 index 19ad8d7..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/JvmApplication.kt +++ /dev/null @@ -1,6 +0,0 @@ -package org.gradle.api.experimental.jvm - -/** - * An application that runs on the JVM and that is implemented using one or more versions of Java. - */ -interface JvmApplication : HasJavaTargets, HasJvmApplication diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/JvmEcosystemPlugin.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/JvmEcosystemPlugin.kt deleted file mode 100644 index f33b20f..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/JvmEcosystemPlugin.kt +++ /dev/null @@ -1,15 +0,0 @@ -package org.gradle.api.experimental.jvm - -import org.gradle.api.Plugin -import org.gradle.api.experimental.java.StandaloneJavaApplicationPlugin -import org.gradle.api.experimental.java.StandaloneJavaLibraryPlugin -import org.gradle.api.initialization.Settings -import org.gradle.api.internal.plugins.software.RegistersSoftwareTypes - -@RegistersSoftwareTypes(StandaloneJavaApplicationPlugin::class, - StandaloneJavaLibraryPlugin::class, - StandaloneJvmLibraryPlugin::class, - StandaloneJvmApplicationPlugin::class) -class JvmEcosystemPlugin : Plugin { - override fun apply(target: Settings) {} -} diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/JvmLibrary.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/JvmLibrary.kt deleted file mode 100644 index 2ea9637..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/JvmLibrary.kt +++ /dev/null @@ -1,9 +0,0 @@ -package org.gradle.api.experimental.jvm - -import org.gradle.declarative.dsl.model.annotations.Restricted - -/** - * A library that runs on the JVM and that is implemented using one or more versions of Java. - */ -@Restricted -interface JvmLibrary : HasJavaTargets, HasJvmLibrary diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/JvmTarget.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/JvmTarget.kt deleted file mode 100644 index 14ea67e..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/JvmTarget.kt +++ /dev/null @@ -1,17 +0,0 @@ -package org.gradle.api.experimental.jvm - -import org.gradle.api.Action -import org.gradle.api.Named -import org.gradle.api.experimental.common.LibraryDependencies -import org.gradle.api.tasks.Nested -import org.gradle.declarative.dsl.model.annotations.Configuring -import org.gradle.declarative.dsl.model.annotations.Restricted - -@Restricted -interface JvmTarget : Named { - @get:Nested - val dependencies: LibraryDependencies - - @Configuring - fun dependencies(action: Action) = action.execute(dependencies) -} diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/JvmTargetContainer.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/JvmTargetContainer.kt deleted file mode 100644 index 2925de7..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/JvmTargetContainer.kt +++ /dev/null @@ -1,33 +0,0 @@ -package org.gradle.api.experimental.jvm - -import org.gradle.api.Action -import org.gradle.api.internal.CollectionCallbackActionDecorator -import org.gradle.api.internal.DefaultNamedDomainObjectSet -import org.gradle.declarative.dsl.model.annotations.Adding -import org.gradle.declarative.dsl.model.annotations.Restricted -import org.gradle.internal.instantiation.InstantiatorFactory -import org.gradle.internal.reflect.Instantiator -import org.gradle.internal.service.ServiceRegistry -import javax.inject.Inject - -@Restricted -class JvmTargetContainer -@Inject -constructor(instantiator: Instantiator, - instantiatorFactory: InstantiatorFactory, - serviceRegistry: ServiceRegistry, callbackDecorator: CollectionCallbackActionDecorator) - : DefaultNamedDomainObjectSet(JvmTarget::class.java, instantiator, callbackDecorator) { - - private val elementInstantiator: Instantiator = instantiatorFactory.decorateLenient(serviceRegistry) - - @Adding - fun java(version: Int): JvmTarget = java(version) {} - - @Adding - fun java(version: Int, action: Action): JvmTarget { - val element = elementInstantiator.newInstance(JavaTarget::class.java, version) - add(element) - action.execute(element) - return element - } -} diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/StandaloneJvmApplicationPlugin.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/StandaloneJvmApplicationPlugin.kt deleted file mode 100644 index 798b5d6..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/StandaloneJvmApplicationPlugin.kt +++ /dev/null @@ -1,46 +0,0 @@ -package org.gradle.api.experimental.jvm - -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.experimental.jvm.internal.JvmPluginSupport -import org.gradle.api.experimental.jvm.internal.JvmPluginSupport.createTargetSourceSet -import org.gradle.api.experimental.jvm.internal.JvmPluginSupport.linkApplicationMainClass -import org.gradle.api.experimental.jvm.internal.JvmPluginSupport.setupCommonSourceSet -import org.gradle.api.internal.plugins.software.SoftwareType -import org.gradle.api.plugins.ApplicationPlugin -import org.gradle.jvm.toolchain.JavaToolchainService -import org.gradle.kotlin.dsl.withType -import javax.inject.Inject - -/** - * Creates a declarative [JvmApplication] DSL model, applies the official Jvm plugin, - * and links the declarative model to the official plugin. - */ -abstract class StandaloneJvmApplicationPlugin : Plugin { - @get:SoftwareType(name = "jvmApplication", modelPublicType = JvmApplication::class) - abstract val jvmApplication: JvmApplication - - override fun apply(project: Project) { - val dslModel = jvmApplication - - project.plugins.apply(ApplicationPlugin::class.java) - - linkDslModelToPlugin(project, dslModel) - } - - @get:Inject - protected abstract val javaToolchainService: JavaToolchainService - - private fun linkDslModelToPlugin(project: Project, dslModel: JvmApplication) { - val commonSources = setupCommonSourceSet(project) - JvmPluginSupport.linkSourceSetToDependencies(project, commonSources, dslModel.dependencies) - - JvmPluginSupport.linkJavaVersion(project, dslModel) - linkApplicationMainClass(project, dslModel) - dslModel.targets.withType().all { - val sourceSet = createTargetSourceSet(project, this, commonSources, javaToolchainService) - // Link dependencies to DSL - JvmPluginSupport.linkSourceSetToDependencies(project, sourceSet, dependencies) - } - } -} diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/StandaloneJvmLibraryPlugin.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/StandaloneJvmLibraryPlugin.kt deleted file mode 100644 index 1e28d54..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/StandaloneJvmLibraryPlugin.kt +++ /dev/null @@ -1,50 +0,0 @@ -package org.gradle.api.experimental.jvm - -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.experimental.jvm.internal.JvmPluginSupport -import org.gradle.api.experimental.jvm.internal.JvmPluginSupport.createTargetSourceSet -import org.gradle.api.experimental.jvm.internal.JvmPluginSupport.setupCommonSourceSet -import org.gradle.api.internal.plugins.software.SoftwareType -import org.gradle.api.plugins.JavaLibraryPlugin -import org.gradle.jvm.toolchain.JavaToolchainService -import org.gradle.kotlin.dsl.get -import org.gradle.kotlin.dsl.withType -import javax.inject.Inject - -/** - * Creates a declarative [JvmLibrary] DSL model, applies the official Jvm plugin, - * and links the declarative model to the official plugin. - */ -abstract class StandaloneJvmLibraryPlugin : Plugin { - @get:SoftwareType(name = "jvmLibrary", modelPublicType = JvmLibrary::class) - abstract val jvmLibrary: JvmLibrary - - override fun apply(project: Project) { - val dslModel = jvmLibrary - - project.plugins.apply(JavaLibraryPlugin::class.java) - - linkDslModelToPlugin(project, dslModel) - } - - @get:Inject - protected abstract val javaToolchainService: JavaToolchainService? - - private fun linkDslModelToPlugin(project: Project, dslModel: JvmLibrary) { - val commonSources = setupCommonSourceSet(project) - JvmPluginSupport.linkSourceSetToDependencies(project, commonSources, dslModel.dependencies) - - JvmPluginSupport.linkJavaVersion(project, dslModel) - - dslModel.targets.withType().all { - val sourceSet = createTargetSourceSet(project, this, commonSources, javaToolchainService!!) - // Link dependencies to DSL - JvmPluginSupport.linkSourceSetToDependencies(project, sourceSet, dependencies) - - // Extend common dependencies - project.configurations[sourceSet.apiConfigurationName] - .extendsFrom(project.configurations[commonSources.apiConfigurationName]) - } - } -} diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/internal/JvmPluginSupport.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/internal/JvmPluginSupport.kt deleted file mode 100644 index c902919..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/jvm/internal/JvmPluginSupport.kt +++ /dev/null @@ -1,103 +0,0 @@ -package org.gradle.api.experimental.jvm.internal - -import org.gradle.api.Project -import org.gradle.api.Task -import org.gradle.api.experimental.common.ApplicationDependencies -import org.gradle.api.experimental.common.LibraryDependencies -import org.gradle.api.experimental.jvm.HasJavaTarget -import org.gradle.api.experimental.jvm.HasJavaTargets -import org.gradle.api.experimental.jvm.HasJvmApplication -import org.gradle.api.experimental.jvm.JavaTarget -import org.gradle.api.plugins.JavaApplication -import org.gradle.api.plugins.JavaPluginExtension -import org.gradle.api.plugins.internal.JavaPluginHelper -import org.gradle.api.tasks.SourceSet -import org.gradle.api.tasks.compile.JavaCompile -import org.gradle.jvm.toolchain.JavaLanguageVersion -import org.gradle.jvm.toolchain.JavaToolchainService -import org.gradle.kotlin.dsl.* - -object JvmPluginSupport { - fun linkSourceSetToDependencies(project: Project, sourceSet: SourceSet, dependencies: LibraryDependencies) { - project.configurations[sourceSet.implementationConfigurationName] - .dependencies.addAllLater(dependencies.implementation.dependencies) - project.configurations[sourceSet.compileOnlyConfigurationName] - .dependencies.addAllLater(dependencies.compileOnly.dependencies) - project.configurations[sourceSet.runtimeOnlyConfigurationName] - .dependencies.addAllLater(dependencies.runtimeOnly.dependencies) - project.configurations[sourceSet.apiConfigurationName] - .dependencies.addAllLater(dependencies.api.dependencies) - } - - fun linkSourceSetToDependencies(project: Project, sourceSet: SourceSet, dependencies: ApplicationDependencies) { - project.configurations[sourceSet.implementationConfigurationName] - .dependencies.addAllLater(dependencies.implementation.dependencies) - project.configurations[sourceSet.compileOnlyConfigurationName] - .dependencies.addAllLater(dependencies.compileOnly.dependencies) - project.configurations[sourceSet.runtimeOnlyConfigurationName] - .dependencies.addAllLater(dependencies.runtimeOnly.dependencies) - } - - fun linkMainSourceSourceSetDependencies(project: Project, dependencies: LibraryDependencies) { - val java = project.extensions.getByType() - linkSourceSetToDependencies(project, java.sourceSets["main"], dependencies) - } - - fun linkMainSourceSourceSetDependencies(project: Project, dependencies: ApplicationDependencies) { - val java = project.extensions.getByType() - linkSourceSetToDependencies(project, java.sourceSets["main"], dependencies) - } - - fun linkJavaVersion(project: Project, dslModel: HasJavaTarget) { - val java = project.extensions.getByType() - java.toolchain.languageVersion = dslModel.javaVersion.map(JavaLanguageVersion::of) - } - - fun linkJavaVersion(project: Project, dslModel: HasJavaTargets) { - val java = project.extensions.getByType() - java.toolchain.languageVersion = project.provider { JavaLanguageVersion.of(dslModel.targets.withType().minOf(JavaTarget::javaVersion)) } - } - - fun linkApplicationMainClass(project: Project, application: HasJvmApplication) { - val app = project.extensions.getByType() - app.mainClass = application.mainClass - } - - fun setupCommonSourceSet(project: Project): SourceSet { - val commonSources = JavaPluginHelper.getJavaComponent(project).mainFeature.sourceSet - val srcDir = project.layout.projectDirectory.dir("src").dir("common").dir("java") - commonSources.java.setSrcDirs(setOf(srcDir)) - return commonSources - } - - fun createTargetSourceSet(project: Project, - target: JavaTarget, - commonSources: SourceSet, - javaToolchainService: JavaToolchainService): SourceSet { - val java = project.extensions.getByType() - val sourceSet = java.sourceSets.create("java${target.javaVersion}") - java.registerFeature("java" + target.javaVersion) { usingSourceSet(sourceSet) } - - // Link properties - project.tasks.named(sourceSet.compileJavaTaskName) { - javaCompiler = javaToolchainService.compilerFor { languageVersion = JavaLanguageVersion.of(target.javaVersion) } - } - - // Depend on common sources - project.configurations[sourceSet.implementationConfigurationName] - .dependencies += project.dependencies.create(commonSources.output) - - // Extend common dependencies - project.configurations[sourceSet.implementationConfigurationName] - .extendsFrom(project.configurations[commonSources.implementationConfigurationName]) - project.configurations[sourceSet.compileOnlyConfigurationName] - .extendsFrom(project.configurations[commonSources.compileOnlyConfigurationName]) - project.configurations[sourceSet.runtimeOnlyConfigurationName] - .extendsFrom(project.configurations[commonSources.runtimeOnlyConfigurationName]) - - // Assemble includes all targets - project.tasks["assemble"].configure { dependsOn(sourceSet.output) } - - return sourceSet - } -} diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/kmp/internal/KotlinPluginSupport.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/kmp/internal/KotlinPluginSupport.kt deleted file mode 100644 index 8b1c647..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/kmp/internal/KotlinPluginSupport.kt +++ /dev/null @@ -1,16 +0,0 @@ -package org.gradle.api.experimental.kmp.internal - -import org.gradle.api.Project -import org.gradle.api.Transformer -import org.gradle.api.experimental.jvm.HasJavaTarget -import org.gradle.jvm.toolchain.JavaLanguageVersion -import org.gradle.kotlin.dsl.assign -import org.gradle.kotlin.dsl.getByType -import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension - -object KotlinPluginSupport { - fun linkJavaVersion(project: Project, dslModel: HasJavaTarget) { - val kotlin = project.extensions.getByType() - kotlin.jvmToolchain { languageVersion = dslModel.javaVersion.map(JavaLanguageVersion::of) } - } -} diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/kotlin/KotlinJvmApplication.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/kotlin/KotlinJvmApplication.kt deleted file mode 100644 index 03e655e..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/kotlin/KotlinJvmApplication.kt +++ /dev/null @@ -1,11 +0,0 @@ -package org.gradle.api.experimental.kotlin - -import org.gradle.api.experimental.jvm.HasJavaTarget -import org.gradle.api.experimental.jvm.HasJvmApplication -import org.gradle.declarative.dsl.model.annotations.Restricted - -/** - * An application implemented using Kotlin and that targets a single JVM version. - */ -@Restricted -interface KotlinJvmApplication : HasJavaTarget, HasJvmApplication diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/kotlin/KotlinJvmLibrary.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/kotlin/KotlinJvmLibrary.kt deleted file mode 100644 index 0f0db9d..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/kotlin/KotlinJvmLibrary.kt +++ /dev/null @@ -1,11 +0,0 @@ -package org.gradle.api.experimental.kotlin - -import org.gradle.api.experimental.jvm.HasJavaTarget -import org.gradle.api.experimental.jvm.HasJvmLibrary -import org.gradle.declarative.dsl.model.annotations.Restricted - -/** - * A library implemented using Kotlin and that targets a single JVM version. - */ -@Restricted -interface KotlinJvmLibrary : HasJavaTarget, HasJvmLibrary diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/kotlin/StandaloneKotlinJvmApplicationPlugin.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/kotlin/StandaloneKotlinJvmApplicationPlugin.kt deleted file mode 100644 index c29271f..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/kotlin/StandaloneKotlinJvmApplicationPlugin.kt +++ /dev/null @@ -1,38 +0,0 @@ -package org.gradle.api.experimental.kotlin - -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.experimental.jvm.internal.JvmPluginSupport -import org.gradle.api.experimental.kmp.internal.KotlinPluginSupport -import org.gradle.api.plugins.ApplicationPlugin -import org.gradle.kotlin.dsl.create -import org.scijava.ValidationApplication - -/** - * Creates a declarative [KotlinJvmApplication] DSL model, applies the official Kotlin and application plugin, - * and links the declarative model to the official plugin. - */ -abstract class StandaloneKotlinJvmApplicationPlugin : Plugin, ValidationApplication { -// @get:SoftwareType(name = "kotlinJvmApplication", modelPublicType = KotlinJvmApplication::class) -// abstract val application: KotlinJvmApplication - - override val extensionName = "kotlinJvmApplication" - - override fun apply(project: Project) { - val application = project.extensions.create(extensionName) - val dslModel = application - - project.plugins.apply(ApplicationPlugin::class.java) - project.plugins.apply("org.jetbrains.kotlin.jvm") - - linkDslModelToPlugin(project, dslModel) - - project.validate() - } - - private fun linkDslModelToPlugin(project: Project, dslModel: KotlinJvmApplication) { - KotlinPluginSupport.linkJavaVersion(project, dslModel) - JvmPluginSupport.linkApplicationMainClass(project, dslModel) - JvmPluginSupport.linkMainSourceSourceSetDependencies(project, dslModel.dependencies) - } -} diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/kotlin/StandaloneKotlinJvmLibraryPlugin.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/kotlin/StandaloneKotlinJvmLibraryPlugin.kt deleted file mode 100644 index 9dbb94a..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/experimental/kotlin/StandaloneKotlinJvmLibraryPlugin.kt +++ /dev/null @@ -1,36 +0,0 @@ -package org.gradle.api.experimental.kotlin - -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.experimental.jvm.internal.JvmPluginSupport.linkMainSourceSourceSetDependencies -import org.gradle.api.experimental.kmp.internal.KotlinPluginSupport.linkJavaVersion -import org.gradle.api.internal.plugins.software.SoftwareType -import org.gradle.kotlin.dsl.create -import org.scijava.ValidationLibrary - -/** - * Creates a declarative [KotlinJvmApplication] DSL model, applies the official Kotlin and application plugin, - * and links the declarative model to the official plugin. - */ -abstract class StandaloneKotlinJvmLibraryPlugin : Plugin, ValidationLibrary { -// @get:SoftwareType(name = "kotlinJvmLibrary", modelPublicType = KotlinJvmLibrary::class) -// abstract val library: KotlinJvmLibrary - - override val extensionName = "kotlinJvmLibrary" - - override fun apply(project: Project) { - val library = project.extensions.create(extensionName) - val dslModel = library - - project.plugins.apply("org.jetbrains.kotlin.jvm") - - linkDslModelToPlugin(project, dslModel) - - project.validate() - } - - private fun linkDslModelToPlugin(project: Project, dslModel: KotlinJvmLibrary) { - linkJavaVersion(project, dslModel) - linkMainSourceSourceSetDependencies(project, dslModel.dependencies) - } -} diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/internal/plugins/software/RegistersSoftwareTypes.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/internal/plugins/software/RegistersSoftwareTypes.kt deleted file mode 100644 index 85690ba..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/internal/plugins/software/RegistersSoftwareTypes.kt +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2024 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.gradle.api.internal.plugins.software - -import org.gradle.api.Incubating -import org.gradle.api.Plugin -import org.gradle.api.Project -import kotlin.reflect.KClass - -/** - * Marks a Settings plugin as registering one or more software types. - * - * @since 8.9 - */ -@Incubating -@Target(AnnotationTarget.CLASS) -@Retention(AnnotationRetention.RUNTIME) -annotation class RegistersSoftwareTypes( - /** - * The [Project] plugins that provide the software types. - * - * @since 8.9 - */ - vararg val value: KClass>) diff --git a/gradle/declarative/src/main/kotlin/org/gradle/api/internal/plugins/software/SoftwareType.kt b/gradle/declarative/src/main/kotlin/org/gradle/api/internal/plugins/software/SoftwareType.kt deleted file mode 100644 index 3abc707..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/api/internal/plugins/software/SoftwareType.kt +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2024 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.gradle.api.internal.plugins.software - -import org.gradle.api.Incubating -import kotlin.reflect.KClass - -/** - * Marks a method as exposing a software type. This should be used in plugin classes to communicate which software types they provide. - * - * @since 8.9 - */ -@Incubating -@Target(AnnotationTarget.FUNCTION, - AnnotationTarget.PROPERTY_GETTER, - AnnotationTarget.PROPERTY_SETTER) -@Retention(AnnotationRetention.RUNTIME) -annotation class SoftwareType( - /** - * The name of the software type. This will correspond to the DSL element that is exposed to configure the software type. - * - * @since 8.9 - */ - val name: String, - /** - * The model type used to configure the software type. Note that this class should be the same type or a super type of the return type - * of the method that this annotation is applied to. - * - * @since 8.9 - */ - val modelPublicType: KClass<*>) \ No newline at end of file diff --git a/gradle/declarative/src/main/kotlin/org/gradle/declarative/dsl/model/annotations/Adding.kt b/gradle/declarative/src/main/kotlin/org/gradle/declarative/dsl/model/annotations/Adding.kt deleted file mode 100644 index 65418b5..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/declarative/dsl/model/annotations/Adding.kt +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2024 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.gradle.declarative.dsl.model.annotations - -@Target(AnnotationTarget.FUNCTION, - AnnotationTarget.PROPERTY_GETTER, - AnnotationTarget.PROPERTY_SETTER) -@Retention(AnnotationRetention.RUNTIME) -annotation class Adding diff --git a/gradle/declarative/src/main/kotlin/org/gradle/declarative/dsl/model/annotations/Configuring.kt b/gradle/declarative/src/main/kotlin/org/gradle/declarative/dsl/model/annotations/Configuring.kt deleted file mode 100644 index e1e6290..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/declarative/dsl/model/annotations/Configuring.kt +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2024 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.gradle.declarative.dsl.model.annotations - -@Target(AnnotationTarget.FUNCTION, - AnnotationTarget.PROPERTY_GETTER, - AnnotationTarget.PROPERTY_SETTER) -@Retention(AnnotationRetention.RUNTIME) -annotation class Configuring(val propertyName: String = "") diff --git a/gradle/declarative/src/main/kotlin/org/gradle/declarative/dsl/model/annotations/Restricted.kt b/gradle/declarative/src/main/kotlin/org/gradle/declarative/dsl/model/annotations/Restricted.kt deleted file mode 100644 index 14fc4f9..0000000 --- a/gradle/declarative/src/main/kotlin/org/gradle/declarative/dsl/model/annotations/Restricted.kt +++ /dev/null @@ -1,8 +0,0 @@ -package org.gradle.declarative.dsl.model.annotations - -@Target(AnnotationTarget.CLASS, - AnnotationTarget.FUNCTION, - AnnotationTarget.PROPERTY_GETTER, - AnnotationTarget.PROPERTY_SETTER) -@Retention(AnnotationRetention.RUNTIME) -annotation class Restricted \ No newline at end of file diff --git a/gradle/declarative/src/main/kotlin/org/scijava/SciJavaApplicationPlugin.kt b/gradle/declarative/src/main/kotlin/org/scijava/SciJavaApplicationPlugin.kt deleted file mode 100644 index 1cf94fa..0000000 --- a/gradle/declarative/src/main/kotlin/org/scijava/SciJavaApplicationPlugin.kt +++ /dev/null @@ -1,11 +0,0 @@ -package org.scijava - -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.experimental.java.StandaloneJavaApplicationPlugin - -class SciJavaApplicationPlugin : Plugin { - override fun apply(project: Project) { - project.plugins.apply(StandaloneJavaApplicationPlugin::class.java) - } -} \ No newline at end of file diff --git a/gradle/declarative/src/main/kotlin/org/scijava/SciJavaKotlinApplicationPlugin.kt b/gradle/declarative/src/main/kotlin/org/scijava/SciJavaKotlinApplicationPlugin.kt deleted file mode 100644 index 94bf230..0000000 --- a/gradle/declarative/src/main/kotlin/org/scijava/SciJavaKotlinApplicationPlugin.kt +++ /dev/null @@ -1,12 +0,0 @@ -package org.scijava - -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.experimental.java.StandaloneJavaApplicationPlugin -import org.gradle.api.experimental.kotlin.StandaloneKotlinJvmApplicationPlugin - -class SciJavaKotlinApplicationPlugin : Plugin { - override fun apply(project: Project) { - project.plugins.apply(StandaloneKotlinJvmApplicationPlugin::class.java) - } -} \ No newline at end of file diff --git a/gradle/declarative/src/main/kotlin/org/scijava/SciJavaKotlinLibraryPlugin.kt b/gradle/declarative/src/main/kotlin/org/scijava/SciJavaKotlinLibraryPlugin.kt deleted file mode 100644 index 882cc64..0000000 --- a/gradle/declarative/src/main/kotlin/org/scijava/SciJavaKotlinLibraryPlugin.kt +++ /dev/null @@ -1,12 +0,0 @@ -package org.scijava - -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.experimental.java.StandaloneJavaLibraryPlugin -import org.gradle.api.experimental.kotlin.StandaloneKotlinJvmLibraryPlugin - -class SciJavaKotlinLibraryPlugin : Plugin { - override fun apply(project: Project) { - project.plugins.apply(StandaloneKotlinJvmLibraryPlugin::class.java) - } -} \ No newline at end of file diff --git a/gradle/declarative/src/main/kotlin/org/scijava/SciJavaLibraryPlugin.kt b/gradle/declarative/src/main/kotlin/org/scijava/SciJavaLibraryPlugin.kt deleted file mode 100644 index ebbc1a8..0000000 --- a/gradle/declarative/src/main/kotlin/org/scijava/SciJavaLibraryPlugin.kt +++ /dev/null @@ -1,11 +0,0 @@ -package org.scijava - -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.experimental.java.StandaloneJavaLibraryPlugin - -class SciJavaLibraryPlugin : Plugin { - override fun apply(project: Project) { - project.plugins.apply(StandaloneJavaLibraryPlugin::class.java) - } -} \ No newline at end of file diff --git a/gradle/declarative/src/main/kotlin/org/scijava/validation.kt b/gradle/declarative/src/main/kotlin/org/scijava/validation.kt deleted file mode 100644 index 9c2ed9d..0000000 --- a/gradle/declarative/src/main/kotlin/org/scijava/validation.kt +++ /dev/null @@ -1,78 +0,0 @@ -package org.scijava - -import org.gradle.api.Project - -internal interface ValidationApplication : ValidationLibrary -internal interface ExtensionName { - val extensionName: String -} - -internal interface ValidationLibrary : ExtensionName { - - fun Project.validate() { - - val lineIterator = buildFile.readText().lines().filter { it.isNotBlank() && !it.startsWith("//") } - .map(String::trim).toMutableList().listIterator() - while (lineIterator.hasNext()) { - var line = lineIterator.next() - reformatIfNeeded(line, lineIterator) - when (line) { - "plugins {" -> - while (true) { - line = lineIterator.next() - if (line == "}") break - check(line.startsWith("id(\"")) - } - "$extensionName {" -> validate(lineIterator) - else -> error("forbidden code `$line`") - } - } - println("build script verification passed!") - // while (lineIterator.hasPrevious()) - // lineIterator.previous() - // println(lineIterator.asSequence().joinToString("\n")) - } - - private fun reformatIfNeeded(line: String, lineIterator: MutableListIterator) { - if ('}' in line) - if ('{' in line) { // ie `repositories { mavenCentral() }` - check(line.last() == '}') - val second = line.dropLast(1).substringAfter('{') - val first = line.substringBefore('{') - lineIterator.apply { - set("$first {") - add(second) - add("}") - } - } else // ie `whatever}` - lineIterator.apply { - set(line.dropLast(1)) - add("}") - } - } - - infix fun validate(lineIterator: MutableListIterator) { - while (true) { - var line = lineIterator.next() - if (line == "}") break - when { - line.startsWith("javaVersion =") -> Fine - // line.startsWith("repositories {") -> Fine - line.startsWith("dependencies {") -> { - val configurations = listOf("api", "implementation", "runtimeOnly", "compileOnly") - while (true) { - line = lineIterator.next() - if (line == "}") break - check(configurations.any(line::startsWith)) - } - } - else -> when { - line.startsWith("mainClass =") && this is ValidationApplication -> Fine - else -> error("forbidden code in `$line`") - } - } - } - } -} - -typealias Fine = Unit \ No newline at end of file diff --git a/gradle/enforcer/.gitattributes b/gradle/enforcer/.gitattributes deleted file mode 100644 index 097f9f9..0000000 --- a/gradle/enforcer/.gitattributes +++ /dev/null @@ -1,9 +0,0 @@ -# -# https://help.github.com/articles/dealing-with-line-endings/ -# -# Linux start script should use lf -/gradlew text eol=lf - -# These are Windows script files and should use crlf -*.bat text eol=crlf - diff --git a/gradle/enforcer/.gitignore b/gradle/enforcer/.gitignore deleted file mode 100644 index 1b6985c..0000000 --- a/gradle/enforcer/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Ignore Gradle project-specific cache directory -.gradle - -# Ignore Gradle build output directory -build diff --git a/gradle/enforcer/build.gradle.kts b/gradle/enforcer/build.gradle.kts deleted file mode 100644 index bd68245..0000000 --- a/gradle/enforcer/build.gradle.kts +++ /dev/null @@ -1,63 +0,0 @@ -/* - * This file was generated by the Gradle 'init' task. - * - * This generated file contains a sample Gradle plugin project to get you started. - * For more details on writing Custom Plugins, please refer to https://docs.gradle.org/8.6/userguide/custom_plugins.html in the Gradle documentation. - * This project uses @Incubating APIs which are subject to change. - */ - -plugins { - // Apply the Java Gradle plugin development plugin to add support for developing Gradle plugins - `java-gradle-plugin` - - // Apply the Kotlin JVM plugin to add support for Kotlin. - alias(libs.plugins.jvm) -} - -repositories { - // Use Maven Central for resolving dependencies. - mavenCentral() -} - -testing { - suites { - // Configure the built-in test suite - val test by getting(JvmTestSuite::class) { - // Use Kotlin Test test framework - useKotlinTest("1.9.20") - } - - // Create a new test suite - val functionalTest by registering(JvmTestSuite::class) { - // Use Kotlin Test test framework - useKotlinTest("1.9.20") - - dependencies { - // functionalTest test suite depends on the production code in tests - implementation(project()) - } - - targets { - all { - // This test suite should run after the built-in test suite has run its tests - testTask.configure { shouldRunAfter(test) } - } - } - } - } -} - -gradlePlugin { - // Define the plugin - val greeting by plugins.creating { - id = "org.example.greeting" - implementationClass = "org.example.EnforcerPlugin" - } -} - -gradlePlugin.testSourceSets.add(sourceSets["functionalTest"]) - -tasks.named("check") { - // Include functionalTest as part of the check lifecycle - dependsOn(testing.suites.named("functionalTest")) -} diff --git a/gradle/enforcer/gradle.properties b/gradle/enforcer/gradle.properties deleted file mode 100644 index 18f452c..0000000 --- a/gradle/enforcer/gradle.properties +++ /dev/null @@ -1,6 +0,0 @@ -# This file was generated by the Gradle 'init' task. -# https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_configuration_properties - -org.gradle.parallel=true -org.gradle.caching=true - diff --git a/gradle/enforcer/gradle/libs.versions.toml b/gradle/enforcer/gradle/libs.versions.toml deleted file mode 100644 index 387b04d..0000000 --- a/gradle/enforcer/gradle/libs.versions.toml +++ /dev/null @@ -1,5 +0,0 @@ -# This file was generated by the Gradle 'init' task. -# https://docs.gradle.org/current/userguide/platforms.html#sub::toml-dependencies-format - -[plugins] -jvm = { id = "org.jetbrains.kotlin.jvm", version = "1.9.20" } diff --git a/gradle/enforcer/gradle/wrapper/gradle-wrapper.jar b/gradle/enforcer/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index d64cd4917707c1f8861d8cb53dd15194d4248596..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43462 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 diff --git a/gradle/enforcer/gradle/wrapper/gradle-wrapper.properties b/gradle/enforcer/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index a80b22c..0000000 --- a/gradle/enforcer/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/gradle/enforcer/gradlew b/gradle/enforcer/gradlew deleted file mode 100755 index 1aa94a4..0000000 --- a/gradle/enforcer/gradlew +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/gradle/enforcer/gradlew.bat b/gradle/enforcer/gradlew.bat deleted file mode 100644 index 25da30d..0000000 --- a/gradle/enforcer/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/gradle/enforcer/settings.gradle.kts b/gradle/enforcer/settings.gradle.kts deleted file mode 100644 index 562e10e..0000000 --- a/gradle/enforcer/settings.gradle.kts +++ /dev/null @@ -1,9 +0,0 @@ -/* - * This file was generated by the Gradle 'init' task. - * - * The settings file is used to specify which projects to include in your build. - * For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.6/userguide/multi_project_builds.html in the Gradle documentation. - * This project uses @Incubating APIs which are subject to change. - */ - -rootProject.name = "gradle-enforcer" diff --git a/gradle/enforcer/src/functionalTest/kotlin/org/example/EnforcerPluginFunctionalTest.kt b/gradle/enforcer/src/functionalTest/kotlin/org/example/EnforcerPluginFunctionalTest.kt deleted file mode 100644 index a4e5eb8..0000000 --- a/gradle/enforcer/src/functionalTest/kotlin/org/example/EnforcerPluginFunctionalTest.kt +++ /dev/null @@ -1,43 +0,0 @@ -/* - * This Kotlin source file was generated by the Gradle 'init' task. - */ -package org.example - -import java.io.File -import kotlin.test.assertTrue -import kotlin.test.Test -import org.gradle.testkit.runner.GradleRunner -import org.junit.jupiter.api.io.TempDir - -/** - * A simple functional test for the 'org.example.greeting' plugin. - */ -class EnforcerPluginFunctionalTest { - - @field:TempDir - lateinit var projectDir: File - - private val buildFile by lazy { projectDir.resolve("build.gradle") } - private val settingsFile by lazy { projectDir.resolve("settings.gradle") } - - @Test fun `can run task`() { - // Set up the test build - settingsFile.writeText("") - buildFile.writeText(""" - plugins { - id('org.example.greeting') - } - """.trimIndent()) - - // Run the build - val runner = GradleRunner.create() - runner.forwardOutput() - runner.withPluginClasspath() - runner.withArguments("greeting") - runner.withProjectDir(projectDir) - val result = runner.build() - - // Verify the result - assertTrue(result.output.contains("Hello from plugin 'org.example.greeting'")) - } -} diff --git a/gradle/enforcer/src/main/kotlin/org/example/EnforcerPlugin.kt b/gradle/enforcer/src/main/kotlin/org/example/EnforcerPlugin.kt deleted file mode 100644 index 666de90..0000000 --- a/gradle/enforcer/src/main/kotlin/org/example/EnforcerPlugin.kt +++ /dev/null @@ -1,22 +0,0 @@ -/* - * This Kotlin source file was generated by the Gradle 'init' task. - */ -package org.example - -import org.gradle.api.Project -import org.gradle.api.Plugin - -/** - * A simple 'hello world' plugin. - */ -class EnforcerPlugin: Plugin { - override fun apply(project: Project) { - // Register a task -// project.tasks.register("greeting") { task -> -// task.doLast { -// println("Hello from plugin 'org.example.greeting'") -// } -// } -// project.extensions.cr - } -} diff --git a/gradle/enforcer/src/test/kotlin/org/example/EnforcerPluginTest.kt b/gradle/enforcer/src/test/kotlin/org/example/EnforcerPluginTest.kt deleted file mode 100644 index cfba71b..0000000 --- a/gradle/enforcer/src/test/kotlin/org/example/EnforcerPluginTest.kt +++ /dev/null @@ -1,22 +0,0 @@ -/* - * This Kotlin source file was generated by the Gradle 'init' task. - */ -package org.example - -import org.gradle.testfixtures.ProjectBuilder -import kotlin.test.Test -import kotlin.test.assertNotNull - -/** - * A simple unit test for the 'org.example.greeting' plugin. - */ -class EnforcerPluginTest { - @Test fun `plugin registers task`() { - // Create a test project and apply the plugin - val project = ProjectBuilder.builder().build() - project.plugins.apply("org.example.greeting") - - // Verify the result - assertNotNull(project.tasks.findByName("greeting")) - } -} diff --git a/gradle/generate-catalog.sh b/gradle/generate-catalog.sh deleted file mode 100755 index 12b067c..0000000 --- a/gradle/generate-catalog.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -dir=$(dirname "$0") -pom="$dir/../pom.xml" -mvn -B -f "$pom" help:effective-pom | - grep -A9999999 '^' > eff.xml -"$dir/catalog.kts" eff.xml -rm eff.xml diff --git a/gradle/gradle.properties b/gradle/gradle.properties deleted file mode 100644 index 18f452c..0000000 --- a/gradle/gradle.properties +++ /dev/null @@ -1,6 +0,0 @@ -# This file was generated by the Gradle 'init' task. -# https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_configuration_properties - -org.gradle.parallel=true -org.gradle.caching=true - diff --git a/gradle/gradlew.bat b/gradle/gradlew.bat deleted file mode 100644 index 107acd3..0000000 --- a/gradle/gradlew.bat +++ /dev/null @@ -1,89 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/gradle/manifest-dependencies/build.gradle.kts b/gradle/manifest-dependencies/build.gradle.kts deleted file mode 100644 index 0080f91..0000000 --- a/gradle/manifest-dependencies/build.gradle.kts +++ /dev/null @@ -1,65 +0,0 @@ -/* - * This file was generated by the Gradle 'init' task. - * - * This generated file contains a sample Gradle plugin project to get you started. - * For more details on writing Custom Plugins, please refer to https://docs.gradle.org/8.7/userguide/custom_plugins.html in the Gradle documentation. - * This project uses @Incubating APIs which are subject to change. - */ - -plugins { - // Apply the Java Gradle plugin development plugin to add support for developing Gradle plugins - `java-gradle-plugin` - - // Apply the Kotlin JVM plugin to add support for Kotlin. - embeddedKotlin("jvm") - - `kotlin-dsl` -} - -repositories { - // Use Maven Central for resolving dependencies. - mavenCentral() -} - -testing { - suites { - // Configure the built-in test suite - val test by getting(JvmTestSuite::class) { - // Use Kotlin Test test framework - useKotlinTest(embeddedKotlinVersion) - } - - // Create a new test suite - val functionalTest by registering(JvmTestSuite::class) { - // Use Kotlin Test test framework - useKotlinTest(embeddedKotlinVersion) - - dependencies { - // functionalTest test suite depends on the production code in tests - implementation(project()) - } - - targets { - all { - // This test suite should run after the built-in test suite has run its tests - testTask.configure { shouldRunAfter(test) } - } - } - } - } -} - -gradlePlugin { - // Define the plugin - val greeting by plugins.creating { - id = "org.example.base" - implementationClass = "org.example.GradleBasePlugin" - } -} - -gradlePlugin.testSourceSets.add(sourceSets["functionalTest"]) - -tasks.named("check") { - // Include functionalTest as part of the check lifecycle - dependsOn(testing.suites.named("functionalTest")) -} diff --git a/gradle/manifest-dependencies/settings.gradle.kts b/gradle/manifest-dependencies/settings.gradle.kts deleted file mode 100644 index 23cdc1e..0000000 --- a/gradle/manifest-dependencies/settings.gradle.kts +++ /dev/null @@ -1,10 +0,0 @@ -/* - * This file was generated by the Gradle 'init' task. - * - * The settings file is used to specify which projects to include in your build. - * For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.7/userguide/multi_project_builds.html in the Gradle documentation. - * This project uses @Incubating APIs which are subject to change. - */ - -rootProject.name = "gradle-manifest-dependencies" -include("plugin") diff --git a/gradle/manifest-dependencies/src/functionalTest/kotlin/org/example/GradleBasePluginFunctionalTest.kt b/gradle/manifest-dependencies/src/functionalTest/kotlin/org/example/GradleBasePluginFunctionalTest.kt deleted file mode 100644 index 228c8ff..0000000 --- a/gradle/manifest-dependencies/src/functionalTest/kotlin/org/example/GradleBasePluginFunctionalTest.kt +++ /dev/null @@ -1,43 +0,0 @@ -/* - * This source file was generated by the Gradle 'init' task - */ -package org.example - -import java.io.File -import kotlin.test.assertTrue -import kotlin.test.Test -import org.gradle.testkit.runner.GradleRunner -import org.junit.jupiter.api.io.TempDir - -/** - * A simple functional test for the 'org.example.greeting' plugin. - */ -class GradleBasePluginFunctionalTest { - - @field:TempDir - lateinit var projectDir: File - - private val buildFile by lazy { projectDir.resolve("build.gradle") } - private val settingsFile by lazy { projectDir.resolve("settings.gradle") } - - @Test fun `can run task`() { - // Set up the test build - settingsFile.writeText("") - buildFile.writeText(""" - plugins { - id('org.example.greeting') - } - """.trimIndent()) - - // Run the build - val runner = GradleRunner.create() - runner.forwardOutput() - runner.withPluginClasspath() - runner.withArguments("greeting") - runner.withProjectDir(projectDir) - val result = runner.build() - - // Verify the result - assertTrue(result.output.contains("Hello from plugin 'org.example.greeting'")) - } -} diff --git a/gradle/manifest-dependencies/src/main/kotlin/org/example/GradleBasePlugin.kt b/gradle/manifest-dependencies/src/main/kotlin/org/example/GradleBasePlugin.kt deleted file mode 100644 index 7161680..0000000 --- a/gradle/manifest-dependencies/src/main/kotlin/org/example/GradleBasePlugin.kt +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This source file was generated by the Gradle 'init' task - */ -package org.example - -import org.gradle.api.Project -import org.gradle.api.Plugin -import org.gradle.configurationcache.extensions.capitalized -import org.gradle.jvm.tasks.Jar -import org.gradle.kotlin.dsl.attributes -import org.gradle.kotlin.dsl.get -import org.gradle.kotlin.dsl.getByName -import org.gradle.kotlin.dsl.named - -/** - * A simple 'hello world' plugin. - */ -class GradleBasePlugin : Plugin { - override fun apply(project: Project) { - project.tasks.named("jar") { - // https://docs.gradle.org/current/userguide/java_plugin.html#tab:configurations - val main = listOf("compileClasspath", "runtimeClasspath") - // val test = listOf("testCompileClasspath", "testRuntimeClasspath") - doFirst { - manifest { - project.configurations.filter { it.name in main }.forEach { c -> - val name = "Dependencies-" + c.name.substringBefore("Classpath").capitalized() - val deps = c.resolvedConfiguration.resolvedArtifacts - .map { a -> a.moduleVersion.id.toString() + a.classifier?.let { ":$it" }.orEmpty() } - .sorted().joinToString(";") - attributes(name to deps) - } - } - } - } - } -} diff --git a/gradle/manifest-dependencies/src/test/kotlin/org/example/GradleBasePluginTest.kt b/gradle/manifest-dependencies/src/test/kotlin/org/example/GradleBasePluginTest.kt deleted file mode 100644 index a0c5077..0000000 --- a/gradle/manifest-dependencies/src/test/kotlin/org/example/GradleBasePluginTest.kt +++ /dev/null @@ -1,22 +0,0 @@ -/* - * This source file was generated by the Gradle 'init' task - */ -package org.example - -import org.gradle.testfixtures.ProjectBuilder -import kotlin.test.Test -import kotlin.test.assertNotNull - -/** - * A simple unit test for the 'org.example.greeting' plugin. - */ -class GradleBasePluginTest { - @Test fun `plugin registers task`() { - // Create a test project and apply the plugin - val project = ProjectBuilder.builder().build() - project.plugins.apply("org.example.greeting") - - // Verify the result - assertNotNull(project.tasks.findByName("greeting")) - } -} diff --git a/gradle/platform/build.gradle.kts b/gradle/platform/build.gradle.kts deleted file mode 100644 index 08c00de..0000000 --- a/gradle/platform/build.gradle.kts +++ /dev/null @@ -1,98 +0,0 @@ -plugins { - `java-platform` - publish - // id("org.gradlex.java-ecosystem-capabilities-base") // only rules - // id("org.gradlex.logging-capabilities") // logging extension -} - -group = "org.scijava" -version = "0.13" //(effXml / "version").toString() - -//operator fun GPathResult.div(child: String) = children().find { (it!! as NodeChild).name() == child } as GPathResult - -//val effXml = XmlSlurper().parse(projectDir.resolve("eff.xml")) - -javaPlatform { - allowDependencies() -} - -val runtimeDeps = listOf("org.antlr:antlr-runtime", - "xalan:serializer", - "xalan:xalan", - "com.github.vbmacher:java-cup-runtime", - "nz.ac.waikato.cms.weka.thirdparty:java-cup-11b-runtime", - "org.jogamp.gluegen:gluegen-rt-main", - "org.jogamp.gluegen:gluegen-rt", - "org.jogamp.joal:joal", - "org.jogamp.jocl:jocl", - "org.jogamp.jogl:jogl-all-main", - "org.jogamp.jogl:jogl-all", - "org.jogamp.jogl:jogl-all-noawt", - "com.nativelibs4java:bridj", - "org.bytedeco:ffmpeg", - "org.bytedeco:hdf5", - "org.bytedeco:leptonica", - "org.bytedeco:openblas", - "org.bytedeco:opencv", - "org.bytedeco:tesseract", - "org.jline:jline-native", - "com.github.jnr:jffi", - "org.jzy3d:jzy3d-native-jogl-awt", - "org.jzy3d:jzy3d-native-jogl-swing") - -val jogampNatives = listOf("org.jogamp.gluegen:gluegen-rt-natives-", - "org.jogamp.jogl:jogl-all-natives-", - "org.jogamp.gluegen:gluegen-rt-natives-", - "org.jogamp.jogl:jogl-all-natives-") - -dependencies { - - // val deps = effXml / "dependencyManagement" / "dependencies" - constraints { - // deps.children().forEach { - // val node = it!! as NodeChild - // val g = node / "groupId" - // val a = node / "artifactId" - // val v = node / "version" - // } - versionCatalogs.forEach { versionCatalog -> - // println("catalog ${versionCatalog.name}") - versionCatalog.libraryAliases.forEach { lib -> - val dep = versionCatalog.findLibrary(lib).get().get() - val ga = dep.module.run { "$group:$name" } - // println(dep) - if (ga in runtimeDeps || jogampNatives.any { it.startsWith(ga) }) - runtime(dep) //.also { println("runtime($dep)") } - else - api(dep) //.also{ println("api($dep)") } - } - } - } - - // println(libs.my.lib.get()) - // api(platform("com.fasterxml.jackson:jackson-bom:" + libs.com.fasterxml.jackson.core.jacksonCore.get().version)) -// api(platform("jakarta.platform:jakarta.jakartaee-bom:10.0.0")) - // api(platform("com.google.api-client:google-api-client-bom:" + libs.com.google.api.client.googleApiClient.get().version)) - // api(platform("com.google.api:gax-bom:" + libs.com.google.api.gax.get().version)) - // api(platform("com.google.api:gapic-generator-java-bom:" + libs.com.google.api.grpc.protoGoogleCommonProtos.get().version)) - // api(platform("com.google.auth:google-auth-library-bom:" + libs.com.google.auth.googleAuthLibraryAppengine.get().version)) - // // no google auto-value bom - // api(platform("com.google.cloud:google-cloud-core-bom:" + libs.com.google.cloud.googleCloudCore.get().version)) -} - - - - -tasks { - // named("generatePomFileForSciJavaPlatformPublication") { - // pom.withXml { - // asNode().appendNode("parent").apply { - // appendNode("groupId", group) - // appendNode("artifactId", project.name) - // appendNode("version", version) - // appendNode("relativePath") - // } - // println(asNode().name()) - // } - // } -} \ No newline at end of file diff --git a/gradle/platform/buildSrc/build.gradle.kts b/gradle/platform/buildSrc/build.gradle.kts deleted file mode 100644 index 790460f..0000000 --- a/gradle/platform/buildSrc/build.gradle.kts +++ /dev/null @@ -1,13 +0,0 @@ - -plugins { - `kotlin-dsl` -} - -repositories { - mavenCentral() -// gradlePluginPortal() -} - -//dependencies { -// implementation("org.jetbrains.dokka:dokka-gradle-plugin:1.9.10") -//} \ No newline at end of file diff --git a/gradle/platform/buildSrc/settings.gradle.kts b/gradle/platform/buildSrc/settings.gradle.kts deleted file mode 100644 index 8ae9b3a..0000000 --- a/gradle/platform/buildSrc/settings.gradle.kts +++ /dev/null @@ -1,4 +0,0 @@ -// This is an empty umbrella build including all the component builds. -// This build is not necessarily needed. The component builds work independently. - -rootProject.name = "buildSrc" \ No newline at end of file diff --git a/gradle/platform/buildSrc/src/main/kotlin/publish.gradle.kts b/gradle/platform/buildSrc/src/main/kotlin/publish.gradle.kts deleted file mode 100644 index ece9665..0000000 --- a/gradle/platform/buildSrc/src/main/kotlin/publish.gradle.kts +++ /dev/null @@ -1,235 +0,0 @@ -plugins { - `maven-publish` -} - -publishing { - publications { - repositories { - maven { - name = "sciJava" -// credentials(PasswordCredentials::class) -// url = uri("https://maven.scijava.org/content/repositories/releases") - url = uri("repo") - } - } - create("sciJavaPlatform") { - from(components["javaPlatform"]) - groupId = "org.scijava" - artifactId = "gradle-platform" - version = "0.13" - /*pom.withXml { - val nodes = Stack() - - nodes += asNode() - fun parent() = nodes.peek() - // Definition of `groupId` is redundant, because it's inherited from the parent - run { - val list = parent().children() as NodeList - require(list.removeIf { (it as Node).name().toString().substringAfter("{http://maven.apache.org/POM/4.0.0}") == "groupId" }) - } - - var i = 1 // 4.0.0 is first - - operator fun String.invoke(vararg values: Any?) { - for (value in values) { - val node = when (value) { - null -> parent().appendNode(this) - else -> parent().appendNode(this, value) - } - if (nodes.size == 1) { // only at `project` level - val list = parent().value() as NodeList - list.removeLast() - list.add(i++, node) - } - } - } - - // operator fun String.compareTo(value: Any): Int { - // return 0 - // } - - operator fun String.invoke(block: () -> Unit) { - val node = parent() - nodes += node.appendNode(this) - block() - if (nodes.size == 2) { // only as `project` child - val list = node.value() as NodeList - list.removeLast() - list.add(i++, parent()) - } - nodes.pop() - } - - // fun comment(text: String) { - // val builder = asString() - // builder.insert(builder.lastIndex - "".length, text.trimMargin()) - // } - - "parent" { - "groupId"(group) - "artifactId"(project.name) - "version"(version) - "relativePath"() - } - // - // - // - i += 3 - "name"("SciJava Parent POM") - "description"("This POM provides a parent from which participating projects can declare their build configurations. It ensures that projects all use a compatible build environment, including Java version, as well as versions of dependencies and plugins.") - "url"("https://scijava.org/") - "inceptionYear"("2011") - "organization" { - "name"("SciJava") - "url"("https://scijava.org/") - } - "licenses" { - "license" { - "name"("Unlicense") - "url"("https://unlicense.org/") - "distribution"("repo") - } - } - "developers" { - "developer" { - "id"("ctrueden") - "name"("Curtis Rueden") - "url"("https://imagej.net/people/ctrueden") - "roles" { - "role"("founder", "lead", "developer", "debugger", "reviewer", "support", "maintainer") - } - } - } - "contributors" { - operator fun String.minus(id: String) = "contributor" { - "name"(this) - "url"("https://imagej.net/people/$id") - "properties" { "id"(id) } - } - "Mark Hiner" - "hinerm" - "Johannes Schindelin" - "dscho" - "Sébastien Besson" - "sbesson" - "John Bogovic" - "bogovicj" - "Nicolas Chiaruttini" - "NicoKiaru" - "Barry DeZonia" - "bdezonia" - "Richard Domander" - "rimadoma" - "Karl Duderstadt" - "karlduderstadt" - "Jan Eglinger" - "imagejan" - "Gabriel Einsdorf" - "gab1one" - "Tiago Ferreira" - "tferr" - "contributor" { - "name"("David Gault") - "properties" { "id"("dgault") } - } - "Ulrik Günther" - "skalarproduktraum" - "Philipp Hanslovsky" - "hanslovsky" - "Stefan Helfrich" - "stelfrich" - "Cameron Lloyd" - "camlloyd" - "Hadrien Mary" - "hadim" - "Tobias Pietzsch" - "tpietzsch" - "Stephan Preibisch" - "StephanPreibisch" - "Stephan Saalfeld" - "axtimwalde" - "Deborah Schmidt" - "frauzufall" - "Lorenzo Scianatico" - "LoreScianatico" - "Jean - Yves Tinevez" - "tinevez" - "Christian Tischer" - "tischi" - "Gabriella Turek" - "turekg" - "contributor" { - "name"("Giuseppe Barbieri") - "properties" { "id"("elect") } - } - } - "mailingLists" { - "mailingList" { - "name"("SciJava") - "subscribe"("https://groups.google.com/group/scijava") - "unsubscribe"("https://groups.google.com/group/scijava") - "post"("scijava@googlegroups.com") - "archive"("https://groups.google.com/group/scijava") - } - } - "scm" { - "connection"("scm:git:https://github.com/scijava/pom-scijava") - "developerConnection"("scm:git:git@github.com:scijava/pom-scijava") - "tag"("HEAD") - "url"("https://github.com/scijava/pom-scijava") - } - "issueManagement" { - "system"("GitHub Issues") - "url"("https://github.com/scijava/pom-scijava/issues") - } - "ciManagement" { - "system"("GitHub Actions") - "url"("https: //github.com/scijava/pom-scijava/actions") - } - "properties" { - // HACK: The following list of allowed-to-be-duplicated classes - // facilitates intended combinations of artifacts: - // == - // Classes: com.google.inject.* - // Part of: com.google.inject:guice:no_aop - // Also in: org.sonatype.sisu:sisu-guice - // Enables: - // org.apache.maven:maven-core (guice) + - // org.apache.maven.shared:maven-common-artifact-filters (sisu-guice) - // == - // Class: javax.xml.namespace.QName - // Part of: Java Runtime Environment - // Also in: xml-apis:xml-apis, xpp3:xpp3 - // Enables: xml-apis:xml-apis + xpp3:xpp3 - // == - // TEMP: Until scijava/scripting-jruby#5 is resolved. - // Classes: jnr.ffi.* - // Part of: com.github.jnr:jnr-ffi - // Also in: org.jruby:jruby-core - // Enables: org.jruby:jruby-core + org.python:jython-slim (jnr-ffi) - // == - // Classes: org.apache.hadoop.yarn.*.package-info - // Part of: org.apache.hadoop:hadoop-yarn-* - // Enables: - // org.apache.hadoop:hadoop-yarn- + - // org.apache.hadoop:hadoop-yarn- - // == - // Classes: org.apache.spark.unused.UnusedStubClass - // Part of: org.apache.spark:spark-* - // Enables: org.apache.spark:spark-core_2.11 (spark-*) - // == - // Classes: org.eclipse.aether.* - // Part of: - // org.apache.maven.resolver:maven-resolver-api - // org.apache.maven.resolver:maven-resolver-util - // org.apache.maven.shared:maven-artifact-transfer - // org.eclipse.aether:aether-api - // org.eclipse.aether:aether-util - // Enables: dependence on Apache Maven libraries - // == - // Classes: org.hibernate.stat.ConcurrentStatisticsImpl - // Part of: org.hibernate:hibernate-core - // Also in: org.openmicroscopy:omero-blitz - // Enables: - // org.openmicroscopy:omero-blitz + - // org.openmicroscopy:omero-model (hibernate-core) - // == - // Classes: org.junit.runner.Runner - // Part of: junit:junit - // Also in: org.jmockit:jmockit - // Enables: junit:junit + org.jmockit:jmockit - // == - // Classes: org.jzy3d.plot3d.pipelines.* - // Part of: org.jzy3d:jzy3d-core, org.jzy3d:jzy3d-native-jogl-awt - // Enables: org.jzy3d:jzy3d-core + org.jzy3d:jzy3d-native-jogl-awt - "scijava.allowedDuplicateClasses"("com.google.inject.*,javax.xml.namespace.QName,jnr.ffi.*,org.apache.hadoop.yarn.*.package-info,org.apache.spark.unused.UnusedStubClass,org.eclipse.aether.*,org.hibernate.stat.ConcurrentStatisticsImpl,org.junit.runner.Runner,org.jzy3d.plot3d.pipelines.*") - // NB: The scijava.allowedDuplicateClasses property above makes it easier to - // append to the list of allowed duplicate classes in downstream projects. - // Simply override the property in your POM with something like this: - // "allowedDuplicateClasses"("\${scijava.allowedDuplicateClasses},com.example.AnotherDuplicate") - "allowedDuplicateClasses"("\${scijava.allowedDuplicateClasses}") - // NB: We override these properties to make the enforcer happy. - // You will need to override them in your POM, too... to valid values. - "license.licenseName"("N/A") - "license.copyrightOwners"("N/A") - } - }*/ - } - } -} \ No newline at end of file diff --git a/gradle/platform/eff.xml b/gradle/platform/eff.xml deleted file mode 100644 index 1bb3642..0000000 --- a/gradle/platform/eff.xml +++ /dev/null @@ -1,6379 +0,0 @@ - - - - - - - - - - - - - - - 4.0.0 - - org.scijava - pom-scijava-base - 19.0.0 - - - org.scijava - pom-scijava - 38.0.0-SNAPSHOT - pom - SciJava Parent POM - This POM provides a parent from which participating projects can declare their build configurations. It ensures that projects all use a compatible build environment, including Java version, as well as versions of dependencies and plugins. - https://scijava.org/ - 2011 - - SciJava - https://scijava.org/ - - - - Unlicense - https://unlicense.org/ - repo - - - - - ctrueden - Curtis Rueden - https://imagej.net/people/ctrueden - - founder - lead - developer - debugger - reviewer - support - maintainer - - - - - - Mark Hiner - https://imagej.net/people/hinerm - - hinerm - - - - Johannes Schindelin - https://imagej.net/people/dscho - - dscho - - - - Sébastien Besson - https://imagej.net/people/sbesson - - sbesson - - - - John Bogovic - https://imagej.net/people/bogovicj - - bogovicj - - - - Nicolas Chiaruttini - https://imagej.net/people/NicoKiaru - - NicoKiaru - - - - Barry DeZonia - https://imagej.net/people/bdezonia - - bdezonia - - - - Richard Domander - https://imagej.net/people/rimadoma - - rimadoma - - - - Karl Duderstadt - https://imagej.net/people/karlduderstadt - - karlduderstadt - - - - Jan Eglinger - https://imagej.net/people/imagejan - - imagejan - - - - Gabriel Einsdorf - https://imagej.net/people/gab1one - - gab1one - - - - Tiago Ferreira - https://imagej.net/people/tferr - - tferr - - - - David Gault - - dgault - - - - Ulrik Günther - https://imagej.net/people/skalarproduktraum - - skalarproduktraum - - - - Philipp Hanslovsky - https://imagej.net/people/hanslovsky - - hanslovsky - - - - Stefan Helfrich - https://imagej.net/people/stelfrich - - stelfrich - - - - Cameron Lloyd - https://imagej.net/people/camlloyd - - camlloyd - - - - Hadrien Mary - https://imagej.net/people/hadim - - hadim - - - - Tobias Pietzsch - https://imagej.net/people/tpietzsch - - tpietzsch - - - - Stephan Preibisch - https://imagej.net/people/StephanPreibisch - - StephanPreibisch - - - - Stephan Saalfeld - https://imagej.net/people/axtimwalde - - axtimwalde - - - - Deborah Schmidt - https://imagej.net/people/frauzufall - - frauzufall - - - - Lorenzo Scianatico - https://imagej.net/people/LoreScianatico - - LoreScianatico - - - - Jean-Yves Tinevez - https://imagej.net/people/tinevez - - tinevez - - - - Christian Tischer - https://imagej.net/people/tischi - - tischi - - - - Gabriella Turek - https://imagej.net/people/turekg - - turekg - - - - - - SciJava - https://groups.google.com/group/scijava - https://groups.google.com/group/scijava - scijava@googlegroups.com - https://groups.google.com/group/scijava - - - - scm:git:https://github.com/scijava/pom-scijava - scm:git:git@github.com:scijava/pom-scijava - https://github.com/scijava/pom-scijava - - - GitHub Issues - https://github.com/scijava/pom-scijava/issues - - - GitHub Actions - https://github.com/scijava/pom-scijava/actions - - - 3.4.2 - 3.4.2 - 2.0.1 - 0.5.4 - 2.0.2 - 2.0.2 - 1.11.0 - 1.18.0 - 3.0.1 - 3.0.1 - 1.2.10 - 2.1.1 - 2.0.2 - 2.0.1 - 3.0.0 - 3.0.6 - 2.0.7 - 2.5.0 - 3.0.3 - 2.1.0 - 2.1.0 - 1.0.6 - 2.1.8 - 2.1.2 - 2.1.2 - 2.3.0 - 2.3.0 - 2.0.4 - 2.0.3 - 2.0.1 - 2.0.8 - 2.1.1 - 3.1.3 - 2.0.1 - 2.0.1 - 2.0.1 - 1.0.2 - 2.3.5 - 1.1.5 - 1.1.1 - 2.0.2 - 2.0.1 - 4.2.2 - 4.2.2 - 2.0.2 - 3.0.1 - 3.0.1 - 2.0.1 - 2.0.0 - 2.0.1 - 3.0.0 - 4.1.2 - 4.1.2 - 2.0.2 - 2.0.1 - 5.0.0 - 5.0.0 - 2.0.1 - 2.0.1 - 2.0.1 - 7.1.1 - 2.1.1 - 1.6.2 - 1.6.2 - 3.0.1 - 2.0.0 - 2.0.0 - 1.1.2 - 1.1.2 - 2.0.2 - 2.0.2 - 2.0.5 - 4.2.1 - 2.0.2 - 5.0.25 - 4.3.4 - 2.0.3 - 2.0.3 - 2.0.1 - 3.1.10 - 1.0.5 - 2.1.1 - 2.1.1 - 2.0.2 - 2.0.2 - 2.1.2 - 2.0.1 - 3.1.9 - 3.1.9 - 1.7-fiji4 - 1.1.4 - 1.1.4 - 2.0.1 - 2.1.1 - 2.1.0 - 25.0.2 - 25.0.2 - 2.0.1 - 2.0.1 - 3.1.4 - 0.1.2 - 1.2.5 - 1.4.0 - 1.2.1 - 3.2.0 - 2.0.1 - 1.2.1 - 1.3.1 - 7.11.1 - 3.3.4 - 1.3.10 - 1.3.10 - 2.0.4 - 2.2.0 - 3.0.4 - 3.0.4 - 2.0.3 - 1.0.3 - 2.0.3 - 2.0.1 - 2.5.0 - 2.5.0 - 2.0.3 - 2.01.4 - <_3D_Blob_Segmentation.version>3.0.2 - <_3D_Objects_Counter.version>2.0.1 - <_3D_Viewer.version>4.0.5 - 1.2.7 - com.google.inject.*,javax.xml.namespace.QName,jnr.ffi.*,org.apache.hadoop.yarn.*.package-info,org.apache.spark.unused.UnusedStubClass,org.eclipse.aether.*,org.hibernate.stat.ConcurrentStatisticsImpl,org.junit.runner.Runner,org.jzy3d.plot3d.pipelines.* - 1.10.14 - 1.10.14 - 3.5.3 - 2.7.7 - 3.5.3 - 2.7.7 - 3.5.3 - 4.11.1 - 4.11.1 - 2.26.0 - 2.33 - 2.33 - 9.6 - 9.6 - 9.6 - 9.6 - 9.6 - 1.10.4 - 1.10.4 - 3.3.1 - ${package-guess} - 1.12.667 - 1.12.667 - 1.12.667 - 2.6.13 - 2.6.13 - 0.4.2 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 10.4.13 - 3.1.2 - 1.0.0-beta-34 - 6.2.4 - 9.1.0 - 9.1.0 - 1.0.0 - 7.2.0 - 7.2.0 - 7.2.0 - 2.1.4 - 2.1.4 - 7.0.18 - 7.0.18 - 7.0.18 - 7.0.18 - 7.0.18 - 7.0.18 - 0.7.0 - 3.5.0 - 3.2.0 - 2.0.SP1 - 3.3.0 - 3.3.0 - 1.2.12 - 1.2.12 - 1.2.25 - 3.42.0 - 19.04.1 - 2.2.10 - 2.5.0.1 - 1.8.1.1 - 2.3.0.4 - 2.5.1.4 - 2.5.3.1 - 1.9.0.1 - 0.32.1.1 - 0.32.2.0 - 2.7 - 1.12.667 - 1.12.667 - 5.6.0 - 1.3.1 - 1.11.9 - 2.16.1 - 2.16.1 - 2.16.1 - 2.16.1 - 2.16.1 - 3.3.1 - 3.3.0 - 3.4.0 - 2.304 - 3.4 - 1.3.13 - 0.10.4 - 2.2.16 - 3.1.19 - 1.5.5-11 - 0.12.0 - 4.2.2 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.26.0 - 2.43.0 - 2.43.0 - 2.43.0 - 2.34.0 - 1.29.0 - 1.23.0 - 1.23.0 - 1.23.0 - 1.10.4 - 1.10.4 - 2.33.0 - 2.33.0 - 0.127.13 - 1.38.0 - 2.34.0 - 2.10.1 - 2.25.0 - 33.0.0-jre - 1.44.1 - 1.44.1 - 1.44.1 - 1.44.1 - 1.44.1 - 1.44.1 - 2.8 - 3.23.0 - 3.23.0 - 3.23.0 - 1.7 - 5.5.13.3 - 0.1.55 - 1.1.3 - 5.3 - 5.3 - 5.3 - 0.7.0 - 5.9 - 4.12.0 - 3.8.0 - 1.1.3 - 3.6.5 - 3.6.5 - 1.9.4 - 1.9.4 - 1.6.0 - 1.6.0 - 1.16.1 - 1.16.1 - 3.2.2 - 3.2.2 - 4.4 - 1.26.0 - 1.10.0 - 2.15.1 - 2.15.1 - 2.6 - 2.6 - 3.14.0 - 1.3.0 - 1.3.0 - 3.6.1 - 2.12.0 - 1.11.0 - 0.4.8 - 26 - 26 - 1.9.10 - 11.1.0 - 11.1.0 - 11.1.0 - 11.1.0 - 4.3 - 20151125 - 0.41 - 2.25.0 - 2.25.0 - 3.2.0 - - 0.12.0 - 1.7.0 - 6.1.1-1.5.10 - 2.1.3 - 2.15.0 - 2.304 - 3.4 - 7.2.0 - 7.2.0 - 7.2.0 - 2.23.0 - 1.6.2 - 2.43.0 - 2.43.0 - 2.43.0 - 3.6.5 - 2.5.0 - 2.5.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 1.23.0 - 1.23.0 - 1.23.0 - 1.23.0 - 2.33.0 - 2.33.0 - 0.127.13 - 1.38.0 - 2.34.0 - 1.44.1 - 1.44.1 - 1.44.1 - 1.44.1 - 1.44.1 - 1.44.1 - 1.0.3 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 1.5 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 1.62.2 - 1.62.2 - 2.10.1 - 33.0.0-jre - 1.14.3-1.5.10 - 1.8.0.10 - 1.8.0.10 - 4.5.14 - 4.4.16 - 4.5.14 - 0.3.0 - 0.3.0 - 3.6.5 - 1.54h - 1.2.6 - 2.0.4 - 0.2.0 - 6.0.2 - 1.2.1 - 0.7.5 - 0.1.2 - 0.8.1 - 0.7.1 - 1.0.0-5.6 - 1.0.0-5.6 - 0.1.3 - 2.0.0 - 0.1.1 - 0.8.1 - 0.3.1 - 0.3.2 - 0.3.3 - 0.8.4 - 0.2.0 - 1.1.7 - 0.3.1 - 1.0.1 - 1.0.1 - 2.15.0 - 1.54h - 2.15.0 - 0.2.1 - 0.3.1 - 0.14.0 - 1.0.0-beta-17 - 2.0.1 - 2.0.0 - 0.12.0 - 4.0.1 - 0.14.1 - 1.0.0 - 6.3.0 - 1.9.0 - 4.7.5 - 1.62.2 - 0.3.0 - 4.1.1 - 0.6.1 - 0.2.2 - 1.1.1 - 0.3.1 - 0.9.0 - 0.17.1 - 0.46.0 - 5.5.13.3 - 2.5.2 - 2.8 - 1.6.0-scijava-2 - 1.6.0-scijava-2 - 2.21.22 - 2.16.1 - 2.16.1 - 2.16.1 - 2.16.1 - 2.16.1 - 2.16.1 - 0.8.11 - 1.1.3 - 1.1.3 - 1.1.3 - 1.0.3 - 1.7.2 - 1.7.2 - 1.6.0-scijava-2 - 1.5.10 - 1.5.10 - - - 8.8.3 - 3.30.2-GA - 2.0.SP1 - 1.1.3 - 1.0.1 - 1.7.36 - 1.0.58 - 2.0.6.1 - 2.4.2 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 1.3.13 - 1.5.4 - 3.4.3 - 1.4.0 - 1.4.0 - 1.4.0 - 1.4.0 - 1.4.0 - 1.4.0 - 1.4.0 - 4.2.2 - 19.04.1 - 0.14 - 3.0.4 - 3.0.4 - 3.25.1 - 3.25.1 - 3.25.1 - 3.25.1 - 3.25.1 - 3.25.1 - 3.25.1 - 3.25.1 - 2.14.6 - 2.14.6 - 2.14.6 - 3.25.1 - 1.37 - 1.37 - 1.37 - 1.49 - 5.14.0 - 5.14.0 - 0.10.4 - 2.2.16 - 3.1.19 - 2.5.0 - 2.0.5 - 2.12.7 - 2.12.7 - 1.7.2 - 2.5.0 - 2.5.0 - 2.5.0 - 1.10.5 - 2.2.1 - 2.80b11 - 2.80b11 - 0.2.1 - 0.1.55 - 1.4 - 20240205 - 0.7.4-scijava - 5.10.2 - 5.10.2 - 5.10.2 - 5.10.2 - 5.10.2 - 5.10.2 - 4.13.2 - 4.13.2 - 0.2.4 - 0.2.4 - 2.7.3 - 2.7.3 - 1.1.3 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.8.0 - 1.8.0 - 1.8.0 - 5.6.0 - 0.1.17 - 0.3.11 - 3.3.0 - 1.1.10 - 1.84.1-1.5.10 - 1.0.2 - 1.12.0 - 1.12.0 - 1.12.0 - 2.4.0 - N/A - **/script_templates/** - N/A - This POM provides a parent from which participating projects can declare their build configurations. It ensures that projects all use a compatible build environment, including Java version, as well as versions of dependencies and plugins. - 2.20.0 - 2.20.0 - 2.20.0 - 1.2.12 - 1.2.12 - 1.2.12 - 1.8.0 - - 3.1.0 - 3.1.0 - 0.13.1 - 3.6.0 - 3.3.2 - 3.3.2 - 3.8.1 - 3.9.6 - 3.6.1 - 3.1.1 - 3.4.1 - 3.2.5 - 3.1.0 - 1.45 - 3.4.0 - 3.1.1 - 3.6.0 - 3.3.0 - 3.6.3 - 3.11.0 - 3.11.0 - 3.5.0 - 3.0.1 - 3.3.1 - 3.5.2 - 3.12.1 - 3.3.0 - 3.2.5 - yyyy-MM-dd'T'HH:mm:ssZ - 8 - 8 - 8 - 8 - 8 - false - 5.3.6 - 5.3 - 5.3 - 5.3 - 5.3 - 20151125 - 2.2.2 - 1.3.1 - 2.19.0 - 2.19.0 - 1.5.0 - 1.5.0 - 1.5.0 - 1.5.0 - 3.2.7 - 0.2.0 - 4.0.2 - 1.1.1 - 4.0.0 - 2.1.0 - 4.0.2 - 7.0.0 - 1.3.2 - 6.0.1 - 1.2.1 - 1.0.2 - 3.1.3 - 2.5.0 - 1.2.7 - 0.4.8 - 2.2.10 - 2.5.0.1 - 1.8.1.1 - 2.3.0.4 - 2.5.1.4 - 2.5.3.1 - 1.9.0.1 - 0.32.1.1 - 0.32.2.0 - 1.54h - 1.2.6 - 2.0.4 - 0.2.0 - 6.0.2 - 1.2.1 - 0.7.5 - 0.1.2 - 0.8.1 - 0.7.1 - 1.0.0-5.6 - 1.0.0-5.6 - 0.1.3 - 2.0.0 - 0.1.1 - 0.8.1 - 0.3.1 - 0.3.2 - 0.3.3 - 0.8.4 - 0.2.0 - 1.1.7 - 0.3.1 - 1.0.1 - 1.0.1 - 2.15.0 - 0.1.4 - 0.2.1 - 0.3.1 - 0.14.0 - 1.0.0-beta-17 - 2.0.1 - 2.0.0 - 0.12.0 - 4.0.1 - 0.14.1 - 1.0.0 - 6.3.0 - 5.14.0 - 5.14.0 - 1.2.10 - 3.2.7 - 0.2.0 - 3.0.3 - 1.6.13 - 3.9.6 - 3.3 - 45.1.1 - 4.12.0 - 3.8.0 - 1.0.1 - 6.0.21 - 5.3.8 - 6.3.4 - 7.2.0 - 7.2.0 - 7.2.0 - 7.2.0 - 7.2.0 - 0.2.4 - 5.7.2 - 5.6.4 - 5.5.2 - 5.9.0 - 5.6.13 - 5.5.15 - 5.7.5 - 5.6.10 - 0.1.4 - 0.3.26-1.5.10 - 5.9 - 4.9.0-1.5.10 - 4.3.4 - 3.5.3 - 3.5.3 - 4.11.1 - 4.11.1 - 1.10.14 - 1.10.14 - 4.4 - 1.26.0 - 1.10.0 - 3.14.0 - 3.6.1 - 2.12.0 - 1.11.0 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.0.18 - 4.5.14 - 4.4.16 - 4.5.14 - 2.5.2 - 2.21.22 - 2.20.0 - 2.20.0 - 3.9.6 - 3.11.0 - 0.13.1 - 3.3.2 - 5.2.5 - 5.2.5 - 5.2.5 - 5.2.5 - 5.2.5 - 5.2.5 - 2.4.8 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 1.17 - 2.9 - 7.0.18 - 7.0.18 - 7.0.18 - 7.0.18 - 7.0.18 - 6.1.1-1.5.10 - 1.14.3-1.5.10 - 1.5.10 - 1.5.10 - 1.84.1-1.5.10 - 0.3.26-1.5.10 - 4.9.0-1.5.10 - 5.3.4-1.5.10 - 3.42.0 - 2.2.0 - 4.0.0 - 11.1.0 - 11.1.0 - 11.1.0 - 11.1.0 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 9.4.54.v20240208 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 4.3 - 0.41 - 1.1.5 - 1.0.2 - 4.0.2 - 1.1.1 - 4.0.0 - 2.1.0 - 4.0.2 - 7.0.0 - 1.3.2 - 6.0.1 - 1.2.1 - 3.1.3 - 3.30.2-GA - 2.0.6.1 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.9.22 - 1.8.0 - 1.8.0 - 1.5.4 - 3.4.3 - 1.4.0 - 1.4.0 - 1.4.0 - 1.4.0 - 1.4.0 - 1.4.0 - 0.14 - 3.25.1 - 3.25.1 - 3.25.1 - 3.25.1 - 3.25.1 - 3.25.1 - 3.25.1 - 3.25.1 - 1.49 - 2.0.5 - 2.5.0 - 2.5.0 - 1.7.2 - 1.7.2 - 1.7.2 - 2.5.0 - 2.5.0 - 2.5.0 - 2.5.0 - 1.10.5 - 2.80b11 - 1.0.58 - 2.2.1 - 20240205 - 5.10.2 - 5.10.2 - 5.10.2 - 5.10.2 - 5.10.2 - 5.10.2 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 2.2.1 - 1.0.1 - 1.8.0 - 3.1.0 - 2.19.0 - 4.2.1 - 3.3 - 45.1.1 - 1.37 - 1.37 - 5.3.6 - 1.0.1 - 6.0.21 - 5.3.8 - 6.3.4 - 5.7.2 - 5.6.4 - 5.5.2 - 5.9.0 - 5.6.13 - 5.5.15 - 5.7.5 - 5.6.10 - 9.6 - 9.6 - 9.6 - 9.6 - 9.6 - 42.7.2 - 2.7.3 - 0.4.2 - 1.6.0-scijava-2 - 1.6.0-scijava-2 - 2.4.2 - 0.7.4-scijava - 2.2.2 - 2.5.0 - 3.1.0 - 0.1.2 - 2.98.0 - 2.0.3 - 0.1.2 - 0.3.0 - 0.1.0 - 1.0.0-beta-3 - 1.0.6 - 1.0.1 - 0.2.0 - 0.2.4 - 0.3.1 - 0.1.3 - 0.1.4 - 2.0.4 - 1.0.2 - 0.1.7 - 1.0.1 - 1.1.0 - 0.2.1 - 1.0.0 - 0.4.1 - 0.1.6 - 1.0.0 - 0.4.1 - 1.0.0 - 0.3.1 - 1.0.1 - 0.2.1 - 0.5.3 - 0.3.0 - 0.2.3 - 0.3.2 - 1.0.2 - 2.0.8 - 1.6.0-scijava-2 - 1.7.36 - 1.7.36 - 1.7.36 - 1.7.36 - 1.7.36 - 1.7.36 - 1.7.36 - 0.2.1 - 2.7 - 2.6.0 - 2.6.0 - 3.2.9.RELEASE - 3.2.9.RELEASE - 3.2.9.RELEASE - 1.12.0 - 1.12.0 - 1.12.0 - 1.12.0 - 1.12.0 - 1.6.8 - 1.9 - 2.2 - ${package-guess} - 2.0.1 - 3.0.2 - 3.0.2 - 3.1.0 - 4.7.5 - 2.2.0 - 4.0.0 - 5.2.5 - 5.2.5 - 5.2.5 - 5.2.5 - 5.2.5 - 5.2.5 - 42.7.2 - - UTF-8 - UTF-8 - 2.34.0 - 1.29.0 - 1.12.0 - 3.23.0 - 3.23.0 - 3.23.0 - 3.23.0 - 1.7 - 1.11.9 - 3.0.8 - 2.0.1 - sonatype-oss-release - 1.2.25 - 0.28.1 - 0.15.0 - 3.4.0 - 3.0.2 - 2.0.1 - 4.0.5 - 3.4.2 - 2.0.1 - 0.5.4 - 2.0.2 - 1.11.0 - 1.18.0 - 3.0.1 - 3.0.1 - 2.1.1 - 2.0.2 - 2.0.1 - 3.0.0 - 3.0.6 - 2.0.7 - 2.5.0 - 3.0.3 - 2.1.0 - 1.0.6 - 2.1.8 - 2.1.2 - 2.3.0 - 2.0.4 - 2.0.3 - 2.0.1 - 2.0.8 - 2.1.1 - 3.1.3 - 2.0.1 - 2.0.1 - 1.0.2 - 2.3.5 - 1.1.1 - 2.0.2 - 2.0.1 - 4.2.2 - 2.0.2 - 3.0.1 - 3.0.1 - 2.0.1 - 2.0.0 - 2.0.1 - 3.0.0 - 4.1.2 - 4.1.2 - 2.0.2 - 2.0.1 - 5.0.0 - 5.0.0 - 2.0.1 - 2.0.1 - 7.1.1 - 2.1.1 - 3.0.1 - 2.0.0 - 2.0.0 - 1.1.2 - 2.0.2 - 2.0.5 - 2.0.2 - 5.0.25 - 2.0.3 - 2.0.1 - 3.1.10 - 1.0.5 - 2.1.1 - 2.0.2 - 2.1.2 - 2.0.1 - 3.1.9 - 1.7-fiji4 - 1.1.4 - 1.1.4 - 2.0.1 - 2.1.1 - 2.1.0 - 25.0.2 - 2.0.1 - 3.1.4 - 0.1.2 - 1.2.5 - 1.4.0 - 1.2.1 - 3.2.0 - 2.0.1 - 1.2.1 - 1.3.1 - 7.11.1 - 3.3.4 - 1.3.10 - 2.0.4 - 2.2.0 - 3.0.4 - 2.0.3 - 1.0.3 - 2.0.3 - 2.0.1 - 2.5.0 - 2.0.3 - 2.01.4 - 2.6.13 - 10.4.13 - 3.1.2 - 1.0.0-beta-34 - 6.2.4 - 9.1.0 - 1.0.0 - 2.1.4 - 2.1.3 - 2.15.0 - 0.1.17 - 0.3.11 - 1.1.10 - 1.0.2 - 2.0.1 - 3.0.2 - 3.0.8 - 2.0.1 - 2.2.7 - 1.0.1 - 2.0.0 - 2.1.1 - 1.1.2 - 4.1.1 - 0.6.1 - 0.2.2 - 1.1.1 - 0.3.1 - 0.9.0 - 0.17.1 - 0.46.0 - 0.1.2 - 2.1.1 - 2.98.0 - 2.0.3 - 0.1.2 - 0.3.0 - 0.1.0 - 1.0.0-beta-3 - 1.0.6 - 3.0.0 - 1.0.1 - 0.2.0 - 0.2.4 - 0.3.1 - 0.1.3 - 0.1.4 - 2.0.4 - 1.0.2 - 0.1.7 - 1.0.1 - com.google.inject.*,javax.xml.namespace.QName,jnr.ffi.*,org.apache.hadoop.yarn.*.package-info,org.apache.spark.unused.UnusedStubClass,org.eclipse.aether.*,org.hibernate.stat.ConcurrentStatisticsImpl,org.junit.runner.Runner,org.jzy3d.plot3d.pipelines.* - scijava - **/script_templates/** - java - org.scijava,net.imagej,net.imglib2,io.scif,sc.fiji - https://javadoc.scijava.org/Java8/ - https://javadoc.scijava.org/JavaFX8/ - [1.8.0-101,) - 8 - 8 - 3.6.3 - natives-linux_64 - linux-x86_64 - natives-linux-amd64 - linux-x86_64 - linux-x86_64 - natives-linux-amd64 - natives-linux-amd64 - natives-linux-amd64 - natives-linux-amd64 - linux-x86_64 - linux-x86_64 - linux-x86_64 - linux-x86_64 - 64 - x86_64 - amd64 - linux - linux - linux - linux - - founder,lead,developer,debugger,reviewer,support,maintainer - 1.1.0 - 0.2.1 - 1.0.0 - 0.4.1 - 0.1.6 - 1.0.0 - 0.4.1 - 1.0.0 - 0.3.1 - 1.0.1 - 0.2.1 - 0.5.3 - 0.3.0 - 0.2.3 - 0.3.2 - 2.6.0 - 2.6.0 - 1.7.36 - 1.7.36 - 1.7.36 - 1.7.36 - 1.7.36 - 1.7.36 - 1.7.36 - 2.7 - 2.2 - 3.10.0.2594 - https://s01.oss.sonatype.org - 2.4.8 - 2.4.8 - 2.2.7 - 3.2.9.RELEASE - 3.2.9.RELEASE - 3.2.9.RELEASE - 3.2.9.RELEASE - 1.0.2 - 1.12.0 - 5.3.4-1.5.10 - 0.12.0 - 1.6.8 - 1.2.0 - 1.0.1 - 2.0.0 - 3.0.3 - all - 2.0.8 - 1.6.0-scijava-2 - 1.7 - 2.16.2 - 1.0 - 2.1.1 - 3.9.6 - 3.9.6 - 2.9 - 1.9 - 1.1.2 - 1.5.5-11 - - - - - org.scijava - batch-processor - 0.4.2 - - - org.scijava - minimaven - 2.2.2 - - - org.scijava - native-lib-loader - 2.5.0 - - - org.scijava - parsington - 3.1.0 - - - org.scijava - scijava-cache - 0.1.2 - - - org.scijava - scijava-common - 2.98.0 - - - org.scijava - scijava-config - 2.0.3 - - - org.scijava - scijava-grab - 0.1.2 - - - org.scijava - scijava-io-http - 0.3.0 - - - org.scijava - scijava-java3d - 0.1.0 - - - org.scijava - scijava-listeners - 1.0.0-beta-3 - - - org.scijava - scijava-log-slf4j - 1.0.6 - - - org.scijava - scijava-optional - 1.0.1 - - - org.scijava - scijava-plot - 0.2.0 - - - org.scijava - scijava-plugins-commands - 0.2.4 - - - org.scijava - scijava-plugins-platforms - 0.3.1 - - - org.scijava - scijava-plugins-text-markdown - 0.1.3 - - - org.scijava - scijava-plugins-text-plain - 0.1.4 - - - org.scijava - scijava-search - 2.0.4 - - - org.scijava - scijava-table - 1.0.2 - - - org.scijava - scijava-ui-awt - 0.1.7 - - - org.scijava - scijava-ui-swing - 1.0.1 - - - org.scijava - script-editor - 1.0.0 - - - org.scijava - script-editor-jython - 1.1.0 - - - org.scijava - script-editor-scala - 0.2.1 - - - org.scijava - scripting-beanshell - 0.4.1 - - - org.scijava - scripting-clojure - 0.1.6 - - - org.scijava - scripting-groovy - 1.0.0 - - - org.scijava - scripting-java - 0.4.1 - - - org.scijava - scripting-javascript - 1.0.0 - - - org.scijava - scripting-jruby - 0.3.1 - - - org.scijava - scripting-jython - 1.0.1 - - - org.scijava - scripting-kotlin - 0.2.1 - - - org.scijava - scripting-matlab - 0.5.3 - - - org.scijava - scripting-python - 0.3.0 - - - org.scijava - scripting-renjin - 0.2.3 - - - org.scijava - scripting-scala - 0.3.2 - - - org.scijava - swing-checkbox-tree - 1.0.2 - - - org.scijava - ui-behaviour - 2.0.8 - - - net.imagej - imagej - 2.15.0 - - - net.imagej - ij - 1.54h - - - com.sun - tools - - - - - net.imagej - ij1-patcher - 1.2.6 - - - net.imagej - imagej-common - 2.0.4 - - - net.imagej - imagej-deprecated - 0.2.0 - - - net.imagej - imagej-launcher - 6.0.2 - - - net.imagej - imagej-legacy - 1.2.1 - - - net.imagej - imagej-matlab - 0.7.5 - - - net.imagej - imagej-mesh - 0.8.1 - - - net.imagej - imagej-mesh-io - 0.1.2 - - - net.imagej - imagej-notebook - 0.7.1 - - - net.imagej - imagej-omero - 1.0.0-5.6 - - - net.imagej - imagej-omero-legacy - 1.0.0-5.6 - - - net.imagej - imagej-opencv - 0.1.3 - - - net.imagej - imagej-ops - 2.0.0 - - - net.imagej - imagej-plugins-batch - 0.1.1 - - - net.imagej - imagej-plugins-commands - 0.8.1 - - - net.imagej - imagej-plugins-tools - 0.3.1 - - - net.imagej - imagej-plugins-uploader-ssh - 0.3.2 - - - net.imagej - imagej-plugins-uploader-webdav - 0.3.3 - - - net.imagej - imagej-scripting - 0.8.4 - - - net.imagej - imagej-server - 0.2.0 - - - net.imagej - imagej-tensorflow - 1.1.7 - - - net.imagej - imagej-ui-awt - 0.3.1 - - - net.imagej - imagej-ui-swing - 1.0.1 - - - net.imagej - imagej-updater - 1.0.1 - - - net.imagej - op-finder - 0.1.4 - - - net.imglib2 - imglib2 - 6.3.0 - - - net.imglib2 - imglib2-algorithm - 0.14.0 - - - net.imglib2 - imglib2-algorithm-fft - 0.2.1 - - - net.imglib2 - imglib2-algorithm-gpl - 0.3.1 - - - net.imglib2 - imglib2-cache - 1.0.0-beta-17 - - - net.imglib2 - imglib2-ij - 2.0.1 - - - net.imglib2 - imglib2-imglyb - 2.0.0 - - - net.imglib2 - imglib2-realtransform - 4.0.1 - - - net.imglib2 - imglib2-roi - 0.14.1 - - - net.imglib2 - imglib2-unsafe - 1.0.0 - - - io.scif - scifio - 0.46.0 - - - io.scif - scifio-bf-compat - 4.1.1 - - - io.scif - scifio-cli - 0.6.1 - - - io.scif - scifio-hdf5 - 0.2.2 - - - io.scif - scifio-jai-imageio - 1.1.1 - - - io.scif - scifio-labeling - 0.3.1 - - - io.scif - scifio-lifesci - 0.9.0 - - - io.scif - scifio-ome-xml - 0.17.1 - - - sc.fiji - fiji - 2.15.0 - - - sc.fiji - 3D_Blob_Segmentation - 3.0.2 - - - sc.fiji - 3D_Objects_Counter - 2.0.1 - - - sc.fiji - 3D_Viewer - 4.0.5 - - - sc.fiji - AnalyzeSkeleton_ - 3.4.2 - - - sc.fiji - Anisotropic_Diffusion_2D - 2.0.1 - - - sc.fiji - Archipelago_Plugins - 0.5.4 - - - sc.fiji - Arrow_ - 2.0.2 - - - sc.fiji - Auto_Local_Threshold - 1.11.0 - - - sc.fiji - Auto_Threshold - 1.18.0 - - - sc.fiji - BalloonSegmentation_ - 3.0.1 - - - sc.fiji - Bug_Submitter - 2.1.1 - - - sc.fiji - CPU_Meter - 2.0.2 - - - sc.fiji - Calculator_Plus - 2.0.1 - - - sc.fiji - Cell_Counter - 3.0.0 - - - sc.fiji - Colocalisation_Analysis - 3.0.6 - - - sc.fiji - Color_Histogram - 2.0.7 - - - sc.fiji - Color_Inspector_3D - 2.5.0 - - - sc.fiji - Colour_Deconvolution - 3.0.3 - - - sc.fiji - CorrectBleach_ - 2.1.0 - - - sc.fiji - Correct_3D_Drift - 1.0.6 - - - sc.fiji - Descriptor_based_registration - 2.1.8 - - - sc.fiji - Dichromacy_ - 2.1.2 - - - sc.fiji - Directionality_ - 2.3.0 - - - sc.fiji - FS_Align_TrakEM2 - 2.0.4 - - - sc.fiji - Feature_Detection - 2.0.3 - - - sc.fiji - Fiji_Archipelago - 2.0.1 - - - sc.fiji - Fiji_Developer - 2.0.8 - - - sc.fiji - Fiji_Package_Maker - 2.1.1 - - - sc.fiji - Fiji_Plugins - 3.1.3 - - - sc.fiji - FilamentDetector - 2.0.1 - - - sc.fiji - FlowJ_ - 2.0.1 - - - sc.fiji - Graph_Cut - 1.0.2 - - - sc.fiji - Gray_Morphology - 2.3.5 - - - org.janelia - H5J_Loader_Plugin - 1.1.5 - - - sc.fiji - HDF5_Vibez - 1.1.1 - - - sc.fiji - Helmholtz_Analysis - 2.0.2 - - - sc.fiji - IJ_Robot - 2.0.1 - - - sc.fiji - IO_ - 4.2.2 - - - sc.fiji - Image_5D - 2.0.2 - - - sc.fiji - Image_Expression_Parser - 3.0.1 - - - sc.fiji - Interactive_3D_Surface_Plot - 3.0.1 - - - sc.fiji - IsoData_Classifier - 2.0.1 - - - sc.fiji - Kappa - 2.0.0 - - - sc.fiji - Kuwahara_Filter - 2.0.1 - - - sc.fiji - KymographBuilder - 3.0.0 - - - sc.fiji - LSM_Reader - 4.1.2 - - - sc.fiji - LSM_Toolbox - 4.1.2 - - - sc.fiji - Lasso_and_Blow_Tool - 2.0.2 - - - sc.fiji - Linear_Kuwahara - 2.0.1 - - - sc.fiji - LocalThickness_ - 5.0.0 - - - sc.fiji - MTrack2_ - 2.0.1 - - - sc.fiji - M_I_P - 2.0.1 - - - sc.fiji - Manual_Tracking - 2.1.1 - - - sc.fiji - Multi_Kymograph - 3.0.1 - - - sc.fiji - OMEVisual - 2.0.0 - - - sc.fiji - PIV_analyser - 2.0.0 - - - sc.fiji - QuickPALM_ - 1.1.2 - - - sc.fiji - RATS_ - 2.0.2 - - - sc.fiji - Reconstruct_Reader - 2.0.5 - - - sc.fiji - SPIM_Opener - 2.0.2 - - - sc.fiji - SPIM_Registration - 5.0.25 - - - sc.fiji - Samples_ - 2.0.3 - - - sc.fiji - Series_Labeler - 2.0.1 - - - sc.fiji - Siox_Segmentation - 1.0.5 - - - sc.fiji - Skeletonize3D_ - 2.1.1 - - - sc.fiji - SplineDeformationGenerator_ - 2.0.2 - - - sc.fiji - Stack_Manipulation - 2.1.2 - - - sc.fiji - Statistical_Region_Merging - 2.0.1 - - - sc.fiji - Stitching_ - 3.1.9 - - - sc.fiji - Sync_Win - 1.7-fiji4 - - - sc.fiji - Thread_Killer - 2.0.1 - - - sc.fiji - Time_Lapse - 2.1.1 - - - sc.fiji - Time_Stamper - 2.1.0 - - - sc.fiji - ToAST_ - 25.0.2 - - - sc.fiji - TopoJ_ - 2.0.1 - - - sc.fiji - Trainable_Segmentation - 3.3.4 - - - sc.fiji - TrakEM2_Archipelago - 2.0.4 - - - sc.fiji - VIB-lib - 2.2.0 - - - sc.fiji - VIB_ - 3.0.4 - - - sc.fiji - Vaa3d_Reader - 2.0.3 - - - sc.fiji - Vaa3d_Writer - 1.0.3 - - - sc.fiji - Video_Editing - 2.0.1 - - - sc.fiji - View5D_ - 2.5.0 - - - sc.fiji - Volume_Calculator - 2.0.3 - - - sc.fiji - Volume_Viewer - 2.01.4 - - - sc.fiji - bUnwarpJ_ - 2.6.13 - - - sc.fiji - bij - 1.0.0 - - - sc.fiji - blockmatching_ - 2.1.4 - - - sc.fiji - fiji-lib - 2.1.3 - - - sc.fiji - legacy-imglib1 - 1.1.10 - - - sc.fiji - level_sets - 1.0.2 - - - sc.fiji - pal-optimization - 2.0.1 - - - sc.fiji - panorama_ - 3.0.2 - - - sc.fiji - register_virtual_stack_slices - 3.0.8 - - - sc.fiji - registration_3d - 2.0.1 - - - sc.fiji - weave_jy2java - 2.1.1 - - - jitk - jitk-tps - 3.0.4 - - - sc.fiji - bigwarp_fiji - 9.1.0 - - - com.googlecode.efficient-java-matrix-library - ejml - - - - - mpicbg - mpicbg - 1.5.0 - - - mpicbg - mpicbg_ - 1.5.0 - - - sc.fiji - trakem2_tps - 2.0.0 - - - sc.fiji - z_spacing - 1.1.2 - - - sc.fiji - bigdataviewer-core - 10.4.13 - - - sc.fiji - bigdataviewer-server - 3.1.2 - - - sc.fiji - bigdataviewer-vistools - 1.0.0-beta-34 - - - sc.fiji - bigdataviewer_fiji - 6.2.4 - - - sc.fiji - spim_data - 2.2.7 - - - sc.fiji - TrackMate - 7.11.1 - - - sc.fiji - TrackMate-Cellpose - 0.1.2 - - - sc.fiji - TrackMate-CSVImporter - 3.1.4 - - - sc.fiji - TrackMate-ExTrack - 1.2.5 - - - sc.fiji - TrackMate-Ilastik - 1.4.0 - - - sc.fiji - TrackMate-MorphoLibJ - 1.2.1 - - - sc.fiji - TrackMate-Oneat - 3.2.0 - - - sc.fiji - TrackMate-Skeleton - 2.0.1 - - - sc.fiji - TrackMate-StarDist - 1.2.1 - - - sc.fiji - TrackMate-Weka - 1.3.1 - - - sc.fiji - T2-NIT - 1.1.4 - - - sc.fiji - T2-TreelineGraph - 1.1.4 - - - sc.fiji - TrakEM2_ - 1.3.10 - - - sc.fiji - VectorString - 2.0.3 - - - sc.fiji - trakem2-transform - 1.0.1 - - - net.imglib2 - imglib2-label-multisets - 0.12.0 - - - org.janelia.saalfeldlab - n5 - 3.1.3 - - - org.janelia.saalfeldlab - n5-aws-s3 - 4.0.2 - - - org.janelia.saalfeldlab - n5-blosc - 1.1.1 - - - org.janelia.saalfeldlab - n5-google-cloud - 4.0.0 - - - org.janelia.saalfeldlab - n5-hdf5 - 2.1.0 - - - org.janelia.saalfeldlab - n5-ij - 4.0.2 - - - org.janelia.saalfeldlab - n5-imglib2 - 7.0.0 - - - org.janelia.saalfeldlab - n5-universe - 1.3.2 - - - org.janelia.saalfeldlab - n5-viewer_fiji - 6.0.1 - - - org.janelia.saalfeldlab - n5-zarr - 1.2.1 - - - fr.inra.ijpb - MorphoLibJ_ - 1.6.2 - - - net.haesleinhuepf - clij_ - 1.9.0.1 - - - net.haesleinhuepf - clij-core - 1.8.1.1 - - - net.haesleinhuepf - clij-coremem - 2.3.0.4 - - - net.haesleinhuepf - clij-clearcl - 2.5.0.1 - - - net.haesleinhuepf - clij2_ - 2.5.3.1 - - - net.haesleinhuepf - clij2-assistant_ - 2.5.1.4 - - - net.haesleinhuepf - clijx_ - 0.32.2.0 - - - net.haesleinhuepf - clijx-weka_ - 0.32.1.1 - - - net.preibisch - BigStitcher - 1.2.10 - - - net.preibisch - multiview-reconstruction - 3.2.7 - - - net.preibisch - multiview-simulation - 0.2.0 - - - org.bonej - bonej-plugins - 7.0.18 - - - org.bonej - bonej-ops - 7.0.18 - - - org.bonej - bonej-legacy-plugins_ - 7.0.18 - - - org.bonej - bonej-legacy-util_ - 7.0.18 - - - org.bonej - bonej-utilities - 7.0.18 - - - org.morphonets - SNT - 4.2.1 - - - org.jzy3d - jzy3d-emul-gl - - - org.jzy3d - jGL - - - - - sc.fiji - MaMuT - 7.1.1 - - - sc.fiji - labkit-pixel-classification - 0.1.17 - - - sc.fiji - labkit-ui - 0.3.11 - - - com.zeroc - glacier2 - 3.6.5 - - - com.zeroc - ice - 3.6.5 - - - org.openmicroscopy - metakit - 5.3.6 - - - ch.qos.logback - logback-classic - - - - - org.openmicroscopy - ome-codecs - 1.0.1 - - - org.openmicroscopy - ome-common - 6.0.21 - - - ch.qos.logback - logback-classic - - - xalan - serializer - - - xalan - xalan - - - - - org.openmicroscopy - ome-poi - 5.3.8 - - - org.openmicroscopy - ome-xml - 6.3.4 - - - ome - jxrlib-all - 0.2.4 - - - ome - bio-formats-tools - 7.2.0 - - - xalan - serializer - - - xalan - xalan - - - - - ome - bio-formats_plugins - 7.2.0 - - - ch.qos.logback - logback-classic - - - - - ome - formats-api - 7.2.0 - - - xalan - serializer - - - xalan - xalan - - - - - ome - formats-bsd - 7.2.0 - - - xalan - serializer - - - xalan - xalan - - - - - ome - formats-gpl - 7.2.0 - - - org.openmicroscopy - omero-blitz - 5.7.2 - - - com.sun.activation - javax.activation - - - org.apache.xmlgraphics - batik-all - - - - - org.openmicroscopy - omero-common - 5.6.4 - - - ch.qos.logback - logback-classic - - - - - org.openmicroscopy - omero-dsl-plugin - 5.5.2 - - - org.openmicroscopy - omero-gateway - 5.9.0 - - - org.openmicroscopy - omero-model - 5.6.13 - - - javax.transaction - jta - - - org.apache.solr - solr-commons-csv - - - - - org.openmicroscopy - omero-renderer - 5.5.15 - - - c3p0 - c3p0 - - - - - org.openmicroscopy - omero-romio - 5.7.5 - - - org.openmicroscopy - omero-server - 5.6.10 - - - c3p0 - c3p0 - - - com.sun.mail - javax.mail - - - javax.activation - activation - - - org.apache.xmlgraphics - batik-all - - - - - net.clearcontrol - coremem - 0.4.8 - - - com.google.android.tools - dx - - - - - net.clearvolume - cleargl - 2.2.10 - - - org.jogamp.gluegen - gluegen-rt-main - - - org.jogamp.jogl - jogl-all-main - - - - - net.algart - algart-tiff - 1.2.7 - - - com.amazonaws - aws-java-sdk-core - 1.12.667 - - - com.amazonaws - aws-java-sdk-s3 - 1.12.667 - - - antlr - antlr - 2.7.7 - - - org.antlr - ST4 - 4.3.4 - - - org.antlr - antlr - 3.5.3 - - - org.antlr - antlr-runtime - 3.5.3 - - - org.apache.ant - ant - 1.10.14 - - - org.apache.ant - ant-launcher - 1.10.14 - - - org.apache.groovy - groovy - 4.0.18 - - - org.apache.groovy - groovy-ant - 4.0.18 - - - org.apache.groovy - groovy-astbuilder - 4.0.18 - - - org.apache.groovy - groovy-cli-commons - 4.0.18 - - - org.apache.groovy - groovy-cli-picocli - 4.0.18 - - - org.apache.groovy - groovy-console - 4.0.18 - - - org.apache.groovy - groovy-contracts - 4.0.18 - - - org.apache.groovy - groovy-datetime - 4.0.18 - - - org.apache.groovy - groovy-dateutil - 4.0.18 - - - org.apache.groovy - groovy-docgenerator - 4.0.18 - - - org.apache.groovy - groovy-ginq - 4.0.18 - - - org.apache.groovy - groovy-groovydoc - 4.0.18 - - - org.apache.groovy - groovy-groovysh - 4.0.18 - - - org.apache.groovy - groovy-jmx - 4.0.18 - - - org.apache.groovy - groovy-json - 4.0.18 - - - org.apache.groovy - groovy-jsr223 - 4.0.18 - - - org.apache.groovy - groovy-macro - 4.0.18 - - - org.apache.groovy - groovy-macro-library - 4.0.18 - - - org.apache.groovy - groovy-nio - 4.0.18 - - - org.apache.groovy - groovy-servlet - 4.0.18 - - - org.apache.groovy - groovy-sql - 4.0.18 - - - org.apache.groovy - groovy-swing - 4.0.18 - - - org.apache.groovy - groovy-templates - 4.0.18 - - - org.apache.groovy - groovy-test - 4.0.18 - - - org.apache.groovy - groovy-test-junit5 - 4.0.18 - - - org.apache.groovy - groovy-testng - 4.0.18 - - - org.apache.groovy - groovy-toml - 4.0.18 - - - org.apache.groovy - groovy-typecheckers - 4.0.18 - - - org.apache.groovy - groovy-xml - 4.0.18 - - - org.apache.groovy - groovy-yaml - 4.0.18 - - - org.apache.ivy - ivy - 2.5.2 - - - org.apache.logging.log4j - log4j-api - 2.20.0 - - - org.apache.logging.log4j - log4j-core - 2.20.0 - - - org.apache.maven.shared - maven-artifact-transfer - 0.13.1 - - - org.apache.maven.shared - maven-common-artifact-filters - 3.3.2 - - - org.apache.maven - maven-core - 3.9.6 - - - org.apache.maven.plugin-tools - maven-plugin-tools-api - 3.11.0 - - - org.codehaus.plexus - plexus-component-annotations - 2.2.0 - - - org.codehaus.plexus - plexus-utils - 4.0.0 - - - org.sonatype.sisu - sisu-inject-bean - 2.6.0 - - - org.sonatype.sisu - sisu-inject-plexus - 2.6.0 - - - org.apache.poi - poi - 5.2.5 - - - org.apache.poi - poi-examples - 5.2.5 - - - org.apache.poi - poi-excelant - 5.2.5 - - - org.apache.poi - poi-ooxml - 5.2.5 - - - org.apache.poi - poi-ooxml-lite - 5.2.5 - - - org.apache.poi - poi-scratchpad - 5.2.5 - - - org.apache.spark - spark-core_2.11 - 2.4.8 - - - com.sun.jersey - jersey-core - - - commons-beanutils - commons-beanutils-core - - - io.netty - netty-all - - - - - org.apache.httpcomponents - httpclient - 4.5.14 - - - org.apache.httpcomponents - httpcore - 4.4.16 - - - org.apache.httpcomponents - httpmime - 4.5.14 - - - args4j - args4j - 2.33 - - - org.ow2.asm - asm - 9.6 - - - org.ow2.asm - asm-analysis - 9.6 - - - org.ow2.asm - asm-commons - 9.6 - - - org.ow2.asm - asm-tree - 9.6 - - - org.ow2.asm - asm-util - 9.6 - - - org.apache.xmlgraphics - batik-anim - 1.17 - - - org.apache.xmlgraphics - batik-awt-util - 1.17 - - - org.apache.xmlgraphics - batik-bridge - 1.17 - - - xalan - xalan - - - - - org.apache.xmlgraphics - batik-codec - 1.17 - - - org.apache.xmlgraphics - batik-constants - 1.17 - - - org.apache.xmlgraphics - batik-css - 1.17 - - - org.apache.xmlgraphics - batik-dom - 1.17 - - - xalan - xalan - - - - - org.apache.xmlgraphics - batik-ext - 1.17 - - - org.apache.xmlgraphics - batik-extension - 1.17 - - - org.apache.xmlgraphics - batik-gui-util - 1.17 - - - org.apache.xmlgraphics - batik-gvt - 1.17 - - - org.apache.xmlgraphics - batik-i18n - 1.17 - - - org.apache.xmlgraphics - batik-parser - 1.17 - - - org.apache.xmlgraphics - batik-rasterizer - 1.17 - - - org.apache.xmlgraphics - batik-rasterizer-ext - 1.17 - - - org.apache.xmlgraphics - batik-extensions - - - - - org.apache.xmlgraphics - batik-script - 1.17 - - - org.apache.xmlgraphics - batik-slideshow - 1.17 - - - org.apache.xmlgraphics - batik-squiggle - 1.17 - - - org.apache.xmlgraphics - batik-squiggle-ext - 1.17 - - - org.apache.xmlgraphics - batik-extensions - - - - - org.apache.xmlgraphics - batik-svg-dom - 1.17 - - - org.apache.xmlgraphics - batik-svggen - 1.17 - - - org.apache.xmlgraphics - batik-svgpp - 1.17 - - - org.apache.xmlgraphics - batik-swing - 1.17 - - - org.apache.xmlgraphics - batik-transcoder - 1.17 - - - org.apache.xmlgraphics - batik-ttf2svg - 1.17 - - - org.apache.xmlgraphics - batik-util - 1.17 - - - org.apache.xmlgraphics - batik-xml - 1.17 - - - org.apache.xmlgraphics - xmlgraphics-commons - 2.9 - - - org.lasersonlab - jblosc - 1.0.1 - - - com.nativelibs4java - bridj - 0.7.0 - - - com.google.android.tools - dx - - - - - javax.enterprise - cdi-api - 2.0.SP1 - - - org.checkerframework - checker-qual - 3.42.0 - - - commons-beanutils - commons-beanutils - 1.9.4 - - - commons-cli - commons-cli - 1.6.0 - - - commons-codec - commons-codec - 1.16.1 - - - commons-collections - commons-collections - 3.2.2 - - - org.apache.commons - commons-collections4 - 4.4 - - - org.apache.commons - commons-compress - 1.26.0 - - - org.apache.commons - commons-csv - 1.10.0 - - - commons-io - commons-io - 2.15.1 - - - commons-lang - commons-lang - 2.6 - - - org.apache.commons - commons-lang3 - 3.14.0 - - - commons-logging - commons-logging - 1.3.0 - - - org.apache.commons - commons-math3 - 3.6.1 - - - org.apache.commons - commons-pool2 - 2.12.0 - - - org.apache.commons - commons-text - 1.11.0 - - - cglib - cglib - 3.3.0 - - - dev.dirs - directories - 26 - - - org.eclipse.collections - eclipse-collections - 11.1.0 - - - org.eclipse.collections - eclipse-collections-api - 11.1.0 - - - org.eclipse.collections - eclipse-collections-forkjoin - 11.1.0 - - - org.eclipse.collections - eclipse-collections-testutils - 11.1.0 - - - org.eclipse.swt - org.eclipse.swt.cocoa.macosx - 4.3 - - - org.eclipse.swt - org.eclipse.swt.cocoa.macosx.x86_64 - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.aix.ppc - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.aix.ppc64 - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.hpux.ia64 - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.linux.ppc - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.linux.ppc64 - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.linux.s390 - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.linux.s390x - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.linux.x86 - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.linux.x86_64 - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.solaris.sparc - 4.3 - - - org.eclipse.swt - org.eclipse.swt.gtk.solaris.x86 - 4.3 - - - org.eclipse.swt - org.eclipse.swt.win32.win32.x86 - 4.3 - - - org.eclipse.swt - org.eclipse.swt.win32.win32.x86_64 - 4.3 - - - org.ejml - ejml-all - 0.41 - - - com.google.errorprone - error_prone_annotations - 2.25.0 - - - com.formdev - flatlaf - 3.4 - - - com.formdev - flatlaf-fonts-jetbrains-mono - 2.304 - - - com.google.api-client - google-api-client - 2.3.0 - - - com.google.api-client - google-api-client-android - 2.3.0 - - - com.google.api-client - google-api-client-appengine - 2.3.0 - - - com.google.api-client - google-api-client-gson - 2.3.0 - - - com.google.api-client - google-api-client-jackson2 - 2.3.0 - - - com.google.api-client - google-api-client-protobuf - 2.3.0 - - - com.google.api-client - google-api-client-servlet - 2.3.0 - - - javax.servlet - servlet-api - - - - - com.google.api-client - google-api-client-xml - 2.3.0 - - - com.google.api - api-common - 2.26.0 - - - com.google.api - gax - 2.43.0 - - - com.google.api - gax-grpc - 2.43.0 - - - com.google.api - gax-httpjson - 2.43.0 - - - com.google.api.grpc - proto-google-common-protos - 2.34.0 - - - com.google.api.grpc - proto-google-iam-v1 - 1.29.0 - - - com.google.auth - google-auth-library-appengine - 1.23.0 - - - com.google.auth - google-auth-library-credentials - 1.23.0 - - - com.google.auth - google-auth-library-oauth2-http - 1.23.0 - - - com.google.auto.value - auto-value - 1.10.4 - - - com.google.auto.value - auto-value-annotations - 1.10.4 - - - com.google.cloud - google-cloud-core - 2.33.0 - - - com.google.cloud - google-cloud-core-http - 2.33.0 - - - com.google.cloud - google-cloud-nio - 0.127.13 - - - com.google.cloud - google-cloud-resourcemanager - 1.38.0 - - - com.google.cloud - google-cloud-storage - 2.34.0 - - - com.google.http-client - google-http-client - 1.44.1 - - - com.google.http-client - google-http-client-apache-v2 - 1.44.1 - - - com.google.http-client - google-http-client-appengine - 1.44.1 - - - com.google.http-client - google-http-client-gson - 1.44.1 - - - com.google.http-client - google-http-client-jackson2 - 1.44.1 - - - com.google.http-client - google-http-client-xml - 1.44.1 - - - io.grpc - grpc-context - 1.62.2 - - - com.google.code.gson - gson - 2.10.1 - - - com.google.guava - guava - 33.0.0-jre - - - io.humble - humble-video-all - 0.3.0 - - - hsqldb - hsqldb - 1.8.0.10 - - - com.itextpdf - itextpdf - 5.5.13.3 - - - com.google.j2objc - j2objc-annotations - 2.8 - - - org.apache.jackrabbit - jackrabbit-webdav - 2.21.22 - - - org.slf4j - jcl-over-slf4j - - - - - com.fasterxml.jackson.core - jackson-annotations - 2.16.1 - - - com.fasterxml.jackson.core - jackson-core - 2.16.1 - - - com.fasterxml.jackson.core - jackson-databind - 2.16.1 - - - com.fasterxml.jackson.dataformat - jackson-dataformat-cbor - 2.16.1 - - - com.fasterxml.jackson.dataformat - jackson-dataformat-yaml - 2.16.1 - - - com.sun.media - jai-codec - 1.1.3 - - - javax.media - jai-core - 1.1.3 - - - gov.nist.math - jama - 1.0.3 - - - org.scijava - j3dcore - 1.6.0-scijava-2 - - - org.scijava - j3dutils - 1.6.0-scijava-2 - - - org.scijava - vecmath - 1.6.0-scijava-2 - - - org.bytedeco - javacpp - 1.5.10 - - - org.bytedeco - javacv - 1.5.10 - - - org.bytedeco - ffmpeg - 6.1.1-1.5.10 - - - org.bytedeco - hdf5 - 1.14.3-1.5.10 - - - org.bytedeco - leptonica - 1.84.1-1.5.10 - - - org.bytedeco - openblas - 0.3.26-1.5.10 - - - org.bytedeco - opencv - 4.9.0-1.5.10 - - - org.bytedeco - tesseract - 5.3.4-1.5.10 - - - org.bytedeco - ffmpeg - 6.1.1-1.5.10 - linux-x86_64 - - - org.bytedeco - hdf5 - 1.14.3-1.5.10 - linux-x86_64 - - - org.bytedeco - leptonica - 1.84.1-1.5.10 - linux-x86_64 - - - org.bytedeco - openblas - 0.3.26-1.5.10 - linux-x86_64 - - - org.bytedeco - opencv - 4.9.0-1.5.10 - linux-x86_64 - - - org.bytedeco - tesseract - 5.3.4-1.5.10 - linux-x86_64 - - - org.javassist - javassist - 3.30.2-GA - - - org.jruby.jcodings - jcodings - 1.0.58 - - - org.jdom - jdom2 - 2.0.6.1 - - - org.scijava - jep - 2.4.2 - - - org.eclipse.jetty - jetty-annotations - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-client - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-continuation - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-deploy - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-http - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-http-spi - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-io - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-jaspi - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-jmx - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-jndi - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-nosql - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-plus - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-proxy - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-rewrite - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-security - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-server - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-servlet - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-servlets - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-spring - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-start - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-util - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-util-ajax - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-webapp - 9.4.54.v20240208 - - - org.eclipse.jetty - jetty-xml - 9.4.54.v20240208 - - - org.jfree - jfreechart - 1.5.4 - - - org.jfree - jfreesvg - 3.4.3 - - - org.jgrapht - jgrapht-core - 1.4.0 - - - org.jgrapht - jgrapht-demo - 1.4.0 - - - org.jgrapht - jgrapht-ext - 1.4.0 - - - org.jgrapht - jgrapht-guava - 1.4.0 - - - org.jgrapht - jgrapht-io - 1.4.0 - - - org.jgrapht - jgrapht-opt - 1.4.0 - - - it.unimi.dsi - fastutil - - - - - com.github.vlsi.mxgraph - jgraphx - 4.2.2 - - - cisd - jhdf5 - 19.04.1 - - - org.jheaps - jheaps - 0.14 - - - jline - jline - 2.14.6 - - - org.jline - jline-builtins - 3.25.1 - - - org.jline - jline-console - 3.25.1 - - - org.jline - jline-reader - 3.25.1 - - - org.jline - jline-remote-ssh - 3.25.1 - - - org.jline - jline-remote-telnet - 3.25.1 - - - org.jline - jline-style - 3.25.1 - - - org.jline - jline-terminal - 3.25.1 - - - org.jline - jline-terminal-jna - 3.25.1 - - - net.java.dev.jna - jna - 5.14.0 - - - net.java.dev.jna - jna-platform - 5.14.0 - - - com.github.jnr - jffi - 1.3.13 - - - com.github.jnr - jffi - 1.3.13 - native - - - com.github.jnr - jnr-constants - 0.10.4 - - - com.github.jnr - jnr-ffi - 2.2.16 - - - com.github.jnr - jnr-posix - 3.1.19 - - - joda-time - joda-time - 2.12.7 - - - org.jocl - jocl - 2.0.5 - - - org.jogamp.gluegen - gluegen - 2.5.0 - - - org.jogamp.gluegen - gluegen-rt - 2.5.0 - - - org.jogamp.joal - joal - 2.5.0 - - - org.jogamp.jocl - jocl - 2.5.0 - - - org.jogamp.jogl - jogl-all - 2.5.0 - - - org.jogamp.jogl - jogl-all-noawt - 2.5.0 - - - org.jogamp.gluegen - gluegen-rt - 2.5.0 - natives-android-aarch64 - - - org.jogamp.gluegen - gluegen-rt - 2.5.0 - natives-linux-aarch64 - - - org.jogamp.gluegen - gluegen-rt - 2.5.0 - natives-linux-amd64 - - - org.jogamp.gluegen - gluegen-rt - 2.5.0 - natives-linux-armv6hf - - - org.jogamp.gluegen - gluegen-rt - 2.5.0 - natives-macosx-universal - - - org.jogamp.gluegen - gluegen-rt - 2.5.0 - natives-windows-amd64 - - - org.jogamp.joal - joal - 2.5.0 - natives-android-aarch64 - - - org.jogamp.joal - joal - 2.5.0 - natives-linux-aarch64 - - - org.jogamp.joal - joal - 2.5.0 - natives-linux-amd64 - - - org.jogamp.joal - joal - 2.5.0 - natives-linux-armv6hf - - - org.jogamp.joal - joal - 2.5.0 - natives-macosx-universal - - - org.jogamp.joal - joal - 2.5.0 - natives-windows-amd64 - - - org.jogamp.jocl - jocl - 2.5.0 - natives-android-aarch64 - - - org.jogamp.jocl - jocl - 2.5.0 - natives-linux-aarch64 - - - org.jogamp.jocl - jocl - 2.5.0 - natives-linux-amd64 - - - org.jogamp.jocl - jocl - 2.5.0 - natives-linux-armv6hf - - - org.jogamp.jocl - jocl - 2.5.0 - natives-macosx-universal - - - org.jogamp.jocl - jocl - 2.5.0 - natives-windows-amd64 - - - org.jogamp.jogl - jogl-all - 2.5.0 - natives-android-aarch64 - - - org.jogamp.jogl - jogl-all - 2.5.0 - natives-linux-aarch64 - - - org.jogamp.jogl - jogl-all - 2.5.0 - natives-linux-amd64 - - - org.jogamp.jogl - jogl-all - 2.5.0 - natives-linux-armv6hf - - - org.jogamp.jogl - jogl-all - 2.5.0 - natives-macosx-universal - - - org.jogamp.jogl - jogl-all - 2.5.0 - natives-windows-amd64 - - - org.jogamp.jogl - jogl-all-noawt - 2.5.0 - natives-android-aarch64 - - - org.jogamp.jogl - jogl-all-noawt - 2.5.0 - natives-linux-aarch64 - - - org.jogamp.jogl - jogl-all-noawt - 2.5.0 - natives-linux-amd64 - - - org.jogamp.jogl - jogl-all-noawt - 2.5.0 - natives-linux-armv6hf - - - org.jogamp.jogl - jogl-all-noawt - 2.5.0 - natives-macosx-universal - - - org.jogamp.jogl - jogl-all-noawt - 2.5.0 - natives-windows-amd64 - - - org.jogamp.java3d - java3d-core - 1.7.2 - - - org.jogamp.java3d - java3d-utils - 1.7.2 - - - org.jogamp.java3d - vecmath - 1.7.2 - - - org.joml - joml - 1.10.5 - - - org.jruby.joni - joni - 2.2.1 - - - org.jpedal - jpedalSTD - 2.80b11 - - - org.smurn - jply - 0.2.1 - - - com.jcraft - jsch - 0.1.55 - - - org.json - json - 20240205 - - - org.python - jython-slim - 2.7.3 - - - com.jcraft - jzlib - 1.1.3 - - - org.jzy3d - jzy3d-core - 2.2.1 - - - org.jzy3d - jzy3d-core-awt - 2.2.1 - - - org.jzy3d - jzy3d-emul-gl-awt - 2.2.1 - - - org.jzy3d - jzy3d-jGL-awt - 2.2.1 - - - org.jzy3d - jzy3d-jdt-core - 2.2.1 - - - org.jzy3d - jzy3d-native-jogl-awt - 2.2.1 - - - org.jogamp.gluegen - gluegen-rt-natives-macosx-universal - - - org.jogamp.gluegen - gluegen-rt-natives-linux-aarch64 - - - org.jogamp.gluegen - gluegen-rt-natives-linux-amd64 - - - org.jogamp.gluegen - gluegen-rt-natives-linux-armv6hf - - - org.jogamp.gluegen - gluegen-rt-natives-linux-i586 - - - org.jogamp.gluegen - gluegen-rt-natives-macosx-universal - - - org.jogamp.gluegen - gluegen-rt-natives-windows-amd64 - - - org.jogamp.gluegen - gluegen-rt-natives-windows-i586 - - - org.jogamp.jogl - jogl-all-natives-linux-aarch64 - - - org.jogamp.jogl - jogl-all-natives-linux-amd64 - - - org.jogamp.jogl - jogl-all-natives-linux-armv6hf - - - org.jogamp.jogl - jogl-all-natives-linux-i586 - - - org.jogamp.jogl - jogl-all-natives-macosx-universal - - - org.jogamp.jogl - jogl-all-natives-windows-amd64 - - - org.jogamp.jogl - jogl-all-natives-windows-i586 - - - - - org.jzy3d - jzy3d-native-jogl-core - 2.2.1 - - - org.jogamp.gluegen - gluegen-rt-natives-macosx-universal - - - org.jogamp.gluegen - gluegen-rt-natives-linux-aarch64 - - - org.jogamp.gluegen - gluegen-rt-natives-linux-amd64 - - - org.jogamp.gluegen - gluegen-rt-natives-linux-armv6hf - - - org.jogamp.gluegen - gluegen-rt-natives-linux-i586 - - - org.jogamp.gluegen - gluegen-rt-natives-macosx-universal - - - org.jogamp.gluegen - gluegen-rt-natives-windows-amd64 - - - org.jogamp.gluegen - gluegen-rt-natives-windows-i586 - - - org.jogamp.jogl - jogl-all-natives-linux-aarch64 - - - org.jogamp.jogl - jogl-all-natives-linux-amd64 - - - org.jogamp.jogl - jogl-all-natives-linux-armv6hf - - - org.jogamp.jogl - jogl-all-natives-linux-i586 - - - org.jogamp.jogl - jogl-all-natives-macosx-universal - - - org.jogamp.jogl - jogl-all-natives-windows-amd64 - - - org.jogamp.jogl - jogl-all-natives-windows-i586 - - - - - org.jzy3d - jzy3d-native-jogl-swing - 2.2.1 - - - com.miglayout - miglayout - - - - - org.jzy3d - jzy3d-tester - 2.2.1 - - - org.jetbrains.kotlin - kotlin-compiler-embeddable - 1.9.22 - - - org.jetbrains.kotlin - kotlin-daemon-embeddable - 1.9.22 - - - org.jetbrains.kotlin - kotlin-reflect - 1.9.22 - - - org.jetbrains.kotlin - kotlin-script-runtime - 1.9.22 - - - org.jetbrains.kotlin - kotlin-scripting-common - 1.9.22 - - - org.jetbrains.kotlin - kotlin-scripting-compiler-embeddable - 1.9.22 - - - org.jetbrains.kotlin - kotlin-scripting-jsr223 - 1.9.22 - - - org.jetbrains.kotlin - kotlin-scripting-jvm - 1.9.22 - - - org.jetbrains.kotlin - kotlin-stdlib - 1.9.22 - - - org.jetbrains.kotlin - kotlin-stdlib-common - 1.9.22 - - - org.jetbrains.kotlin - kotlin-stdlib-jdk8 - 1.9.22 - - - org.jetbrains.kotlinx - kotlinx-coroutines-core - 1.8.0 - - - org.jetbrains.kotlinx - kotlinx-coroutines-core-jvm - 1.8.0 - - - com.esotericsoftware - kryo - 5.6.0 - - - com.esotericsoftware - minlog - 1.3.1 - - - com.esotericsoftware - reflectasm - 1.11.9 - - - ch.qos.logback - logback-classic - 1.2.12 - - - javax.activation - activation - - - - - ch.qos.logback - logback-core - 1.2.12 - - - org.lz4 - lz4-java - 1.8.0 - - - org.mapdb - mapdb - 3.1.0 - - - net.jpountz.lz4 - lz4 - - - - - com.miglayout - miglayout-core - 5.3 - - - com.miglayout - miglayout-swing - 5.3 - - - com.miglayout - miglayout-swt - 5.3 - - - edu.mines - mines-jtk - 20151125 - - - org.objenesis - objenesis - 3.3 - - - com.squareup.okhttp3 - okhttp - 4.12.0 - - - com.squareup.okio - okio - 3.8.0 - - - org.ojalgo - ojalgo - 45.1.1 - - - com.opencsv - opencsv - 5.9 - - - info.picocli - picocli - 4.7.5 - - - org.postgresql - postgresql - 42.7.2 - - - com.google.protobuf - protobuf-java - 3.23.0 - - - com.google.protobuf - protobuf-java-util - 3.23.0 - - - com.google.protobuf - protobuf-kotlin - 3.23.0 - - - com.google.re2j - re2j - 1.7 - - - ch.qos.reload4j - reload4j - 1.2.25 - - - com.fifesoft - rsyntaxtextarea - 3.4.0 - - - com.fifesoft - autocomplete - 3.3.1 - - - com.fifesoft - languagesupport - 3.3.0 - - - org.slf4j - slf4j-api - 1.7.36 - - - org.slf4j - slf4j-ext - 1.7.36 - - - org.slf4j - slf4j-jcl - 1.7.36 - - - org.slf4j - slf4j-jdk14 - 1.7.36 - - - org.slf4j - slf4j-nop - 1.7.36 - - - org.slf4j - slf4j-simple - 1.7.36 - - - org.slf4j - jcl-over-slf4j - 1.7.36 - - - org.yaml - snakeyaml - 2.2 - - - org.snakeyaml - snakeyaml-engine - 2.7 - - - org.springframework - spring-aop - 3.2.9.RELEASE - - - org.springframework - spring-beans - 3.2.9.RELEASE - - - org.springframework - spring-core - 3.2.9.RELEASE - - - org.tensorflow - tensorflow - 1.12.0 - - - org.tensorflow - libtensorflow - 1.12.0 - - - org.tensorflow - libtensorflow_jni - 1.12.0 - - - org.tensorflow - libtensorflow_jni_gpu - 1.12.0 - - - org.tensorflow - proto - 1.12.0 - - - org.threeten - threetenbp - 1.6.8 - - - net.sf.trove4j - trove4j - 3.0.3 - - - nz.ac.waikato.cms.weka - weka-dev - 3.9.6 - - - com.github.fommil.netlib - all - - - com.github.vbmacher - java-cup-runtime - - - com.googlecode.netlib-java - netlib-java - - - com.sun.activation - jakarta.activation - - - nz.ac.waikato.cms.weka.thirdparty - java-cup-11b - - - nz.ac.waikato.cms.weka.thirdparty - java-cup-11b-runtime - - - net.sourceforge.f2j - arpack_combined_all - - - - - org.tukaani - xz - 1.9 - - - com.github.luben - zstd-jni - 1.5.5-11 - - - org.scijava - scijava-common - 2.98.0 - tests - test - - - net.imagej - imagej-legacy - 1.2.1 - tests - test - - - net.imagej - imagej-ops - 2.0.0 - tests - test - - - net.imagej - imagej-updater - 1.0.1 - tests - test - - - net.imglib2 - imglib2 - 6.3.0 - tests - test - - - org.janelia.saalfeldlab - n5 - 3.1.3 - tests - test - - - junit - junit - 4.13.2 - test - - - org.junit.jupiter - junit-jupiter-api - 5.10.2 - test - - - org.junit.jupiter - junit-jupiter-engine - 5.10.2 - test - - - org.junit.jupiter - junit-jupiter-migrationsupport - 5.10.2 - test - - - org.junit.jupiter - junit-jupiter-params - 5.10.2 - test - - - org.junit.vintage - junit-vintage-engine - 5.10.2 - test - - - org.scijava - junit-benchmarks - 0.7.4-scijava - test - - - org.jmockit - jmockit - 1.49 - test - - - org.mockito - mockito-core - 2.19.0 - test - - - org.openjdk.jmh - jmh-core - 1.37 - test - - - org.openjdk.jmh - jmh-generator-annprocess - 1.37 - test - - - - - - - false - - central - Central Repository - https://repo.maven.apache.org/maven2 - - - - - - never - - - false - - central - Central Repository - https://repo.maven.apache.org/maven2 - - - - /home/elect/IdeaProjects/pom-scijava/src/main/java - /home/elect/IdeaProjects/pom-scijava/src/main/scripts - /home/elect/IdeaProjects/pom-scijava/src/test/java - /home/elect/IdeaProjects/pom-scijava/target/classes - /home/elect/IdeaProjects/pom-scijava/target/test-classes - - - org.apache.maven.wagon - wagon-webdav-jackrabbit - 1.0 - - - install - - - /home/elect/IdeaProjects/pom-scijava/src/main/resources - - - - - /home/elect/IdeaProjects/pom-scijava/src/test/resources - - - /home/elect/IdeaProjects/pom-scijava/target - pom-scijava-38.0.0-SNAPSHOT - - - - maven-antrun-plugin - 3.1.0 - - - maven-assembly-plugin - 3.6.0 - - - maven-clean-plugin - 3.3.2 - - - maven-compiler-plugin - 3.8.1 - - - maven-dependency-plugin - 3.6.1 - - - maven-deploy-plugin - 3.1.1 - - - maven-enforcer-plugin - 3.4.1 - - - org.codehaus.mojo - extra-enforcer-rules - 1.7.0 - compile - - - org.scijava - scijava-maven-plugin - 3.0.0 - compile - - - - - maven-failsafe-plugin - 3.2.5 - - - - integration-test - verify - - - - - - maven-gpg-plugin - 3.1.0 - - - sign-artifacts - verify - - sign - - - true - - - - - true - - - - maven-help-plugin - 3.4.0 - - - maven-install-plugin - 3.1.1 - - - maven-jar-plugin - 3.3.0 - - - - test-jar - - - - - true - true - true - - ${package-guess} - - - - ${buildNumber} - 2024-03-03T16:51:20+0000 - ${package-guess} - - - true - - - - - - - true - true - true - - ${package-guess} - - - - ${buildNumber} - 2024-03-03T16:51:20+0000 - ${package-guess} - - - true - - - - maven-javadoc-plugin - 3.6.3 - - 1024m - - https://javadoc.scijava.org/Java8/ - https://javadoc.scijava.org/JavaFX8/ - https://javadoc.scijava.org/SciJava/ - https://javadoc.scijava.org/Alida/ - https://javadoc.scijava.org/Bio-Formats/ - https://javadoc.scijava.org/FLIMLib/ - https://javadoc.scijava.org/Fiji/ - https://javadoc.scijava.org/Icy/ - https://javadoc.scijava.org/ImageJ/ - https://javadoc.scijava.org/ImageJ1/ - https://javadoc.scijava.org/ImgLib2/ - https://javadoc.scijava.org/Java3D/ - https://javadoc.scijava.org/KNIME/ - https://javadoc.scijava.org/LOCI/ - https://javadoc.scijava.org/MiToBo/ - https://javadoc.scijava.org/Micro-Manager-Core/ - https://javadoc.scijava.org/Micro-Manager-Studio/ - https://javadoc.scijava.org/MorphoLibJ/ - https://javadoc.scijava.org/OMERO/ - https://javadoc.scijava.org/SCIFIO/ - https://javadoc.scijava.org/Apache-Commons-IO/ - https://javadoc.scijava.org/Apache-Commons-Lang/ - https://javadoc.scijava.org/Apache-Commons-Math/ - https://javadoc.scijava.org/Apache-Commons-Text/ - https://javadoc.scijava.org/BoneJ/ - https://javadoc.scijava.org/Eclipse/ - https://javadoc.scijava.org/Guava/ - https://javadoc.scijava.org/JAMA/ - https://javadoc.scijava.org/JFreeChart/ - https://javadoc.scijava.org/JGraphT/ - https://javadoc.scijava.org/JHotDraw/ - https://javadoc.scijava.org/JOML/ - https://javadoc.scijava.org/Javassist/ - https://javadoc.scijava.org/MigLayout/ - https://javadoc.scijava.org/NetBeans/ - https://javadoc.scijava.org/Pivot/ - https://javadoc.scijava.org/VisAD/ - https://javadoc.scijava.org/Weka/ - https://javadoc.scijava.org/ojAlgo/ - - - - - maven-plugin-plugin - 3.11.0 - - - maven-project-info-reports-plugin - 3.5.0 - - - maven-release-plugin - 3.0.1 - - - maven-resources-plugin - 3.3.1 - - - maven-shade-plugin - 3.5.2 - - - maven-site-plugin - 3.12.1 - - - maven-source-plugin - 3.3.0 - - - attach-sources - none - - - attach-sources-jar - - jar - - - - - - maven-surefire-plugin - 3.2.5 - - @{argLine} -Xms512m -Xmx512m -Dapple.awt.UIElement=true - - - - org.codehaus.mojo - build-helper-maven-plugin - 3.5.0 - - - sanitize-version - - regex-property - - - sanitizedVersion - 38.0.0-SNAPSHOT - ^([0-9]+)\.([0-9]+)\.([0-9]+).*$ - $1.$2.$3 - false - - - - guess-package - - regex-property - - - package-guess - org.scijava.pom-scijava - [^a-z0-9_.]+ - _ - false - - - - - - org.codehaus.mojo - buildnumber-maven-plugin - 3.2.0 - - - validate - - create - - - true - UNKNOWN - - - - - - net.java.dev.jna - platform - 3.5.2 - compile - - - - true - UNKNOWN - - - - org.codehaus.mojo - cobertura-maven-plugin - 2.7 - - - html - xml - - - - - org.codehaus.mojo - exec-maven-plugin - 3.2.0 - - - org.codehaus.mojo - license-maven-plugin - 2.4.0 - - false - true - true - - java - properties - java - - - - - org.codehaus.mojo - tidy-maven-plugin - 1.2.0 - - - org.codehaus.mojo - versions-maven-plugin - 2.16.2 - - - org.scijava - scijava-maven-plugin - 3.0.0 - - - set-rootdir - validate - - set-rootdir - - - - - - com.zenjava - javafx-maven-plugin - 8.8.3 - - SciJava Parent POM - SciJava Parent POM - SciJava Parent POM.jar - - ${sanitizedVersion} - true - - - - net.revelc.code - impsort-maven-plugin - 1.9.0 - - - none - - java.,javax.,com.,net.,org. - java,* - true - - - - - java.,javax.,com.,net.,org. - java,* - true - - - - net.revelc.code.formatter - formatter-maven-plugin - 2.23.0 - - - org.scijava - scijava-coding-style - 2.1.1 - compile - - - - eclipse-formatter-settings/scijava-coding-style.xml - - - - org.fusesource.mvnplugins - maven-graph-plugin - 1.45 - - provided,runtime,system,test - true - - /home/elect/IdeaProjects/pom-scijava/target/dependency-graph.dot - - - - org.honton.chas - exists-maven-plugin - 0.12.0 - - - - remote - - - - - - org.jacoco - jacoco-maven-plugin - 0.8.11 - - - jacoco-initialize - - prepare-agent - - - - jacoco-site - package - - report - - - - - - org.revapi - revapi-maven-plugin - 0.15.0 - - - org.revapi - revapi-java - 0.28.1 - - - - - org.sonarsource.scanner.maven - sonar-maven-plugin - 3.10.0.2594 - - - - - - maven-enforcer-plugin - 3.4.1 - - - enforce-rules - - enforce - - - - - 3.6.3 - - - Plugins need to be versioned! - - - [1.8.0-101,) - - - No Duplicate Classes Allowed! -- For duplicate transitive dependencies, add dependency exclusions. -- For duplications between direct dependencies, resolve or add - ignored classes to this rule's configuration. - true - com.google.inject.*,javax.xml.namespace.QName,jnr.ffi.*,org.apache.hadoop.yarn.*.package-info,org.apache.spark.unused.UnusedStubClass,org.eclipse.aether.*,org.hibernate.stat.ConcurrentStatisticsImpl,org.junit.runner.Runner,org.jzy3d.plot3d.pipelines.* - - - founder,lead,developer,debugger,reviewer,support,maintainer - - - founder,lead,developer,debugger,reviewer,support,maintainer - - - 8 - - com.headius:invokebinder - com.sun:tools - - - module-info - - - test - - - - - name - description - url - inceptionYear - organization - licenses - developers - contributors - mailingLists - scm - issueManagement - ciManagement - properties//license.licenseName - properties//license.copyrightOwners - - - - org.scijava,net.imagej,net.imglib2,io.scif,sc.fiji - - - - - - - - org.codehaus.mojo - extra-enforcer-rules - 1.7.0 - compile - - - org.scijava - scijava-maven-plugin - 3.0.0 - compile - - - - - - 3.6.3 - - - Plugins need to be versioned! - - - [1.8.0-101,) - - - No Duplicate Classes Allowed! -- For duplicate transitive dependencies, add dependency exclusions. -- For duplications between direct dependencies, resolve or add - ignored classes to this rule's configuration. - true - com.google.inject.*,javax.xml.namespace.QName,jnr.ffi.*,org.apache.hadoop.yarn.*.package-info,org.apache.spark.unused.UnusedStubClass,org.eclipse.aether.*,org.hibernate.stat.ConcurrentStatisticsImpl,org.junit.runner.Runner,org.jzy3d.plot3d.pipelines.* - - - founder,lead,developer,debugger,reviewer,support,maintainer - - - founder,lead,developer,debugger,reviewer,support,maintainer - - - 8 - - com.headius:invokebinder - com.sun:tools - - - module-info - - - test - - - - - name - description - url - inceptionYear - organization - licenses - developers - contributors - mailingLists - scm - issueManagement - ciManagement - properties//license.licenseName - properties//license.copyrightOwners - - - - org.scijava,net.imagej,net.imglib2,io.scif,sc.fiji - - - - - - maven-failsafe-plugin - 3.2.5 - - - - integration-test - verify - - - - - - maven-source-plugin - 3.3.0 - - - attach-sources - none - - - attach-sources-jar - - jar - - - - - - maven-surefire-plugin - 3.2.5 - - @{argLine} -Xms512m -Xmx512m -Dapple.awt.UIElement=true - - - - org.codehaus.mojo - build-helper-maven-plugin - 3.5.0 - - - sanitize-version - - regex-property - - - sanitizedVersion - 38.0.0-SNAPSHOT - ^([0-9]+)\.([0-9]+)\.([0-9]+).*$ - $1.$2.$3 - false - - - - guess-package - - regex-property - - - package-guess - org.scijava.pom-scijava - [^a-z0-9_.]+ - _ - false - - - - - - org.codehaus.mojo - buildnumber-maven-plugin - 3.2.0 - - - validate - - create - - - true - UNKNOWN - - - - - - net.java.dev.jna - platform - 3.5.2 - compile - - - - true - UNKNOWN - - - - org.scijava - scijava-maven-plugin - 3.0.0 - - - set-rootdir - validate - - set-rootdir - - - older - - - - populate-app - install - - populate-app - - - older - - - - - older - - - - com.zenjava - javafx-maven-plugin - 8.8.3 - - SciJava Parent POM - SciJava Parent POM - SciJava Parent POM.jar - - ${sanitizedVersion} - true - - - - net.revelc.code - impsort-maven-plugin - 1.9.0 - - - none - - java.,javax.,com.,net.,org. - java,* - true - - - - - java.,javax.,com.,net.,org. - java,* - true - - - - net.revelc.code.formatter - formatter-maven-plugin - 2.23.0 - - - org.scijava - scijava-coding-style - 2.1.1 - compile - - - - eclipse-formatter-settings/scijava-coding-style.xml - - - - org.fusesource.mvnplugins - maven-graph-plugin - 1.45 - - provided,runtime,system,test - true - - /home/elect/IdeaProjects/pom-scijava/target/dependency-graph.dot - - - - org.jacoco - jacoco-maven-plugin - 0.8.11 - - - jacoco-initialize - - prepare-agent - - - - jacoco-site - package - - report - - - - - - maven-javadoc-plugin - 3.6.3 - - /usr/lib/jvm/jdk-19/bin/javadoc - 1024m - - https://javadoc.scijava.org/Java8/ - https://javadoc.scijava.org/JavaFX8/ - https://javadoc.scijava.org/SciJava/ - https://javadoc.scijava.org/Alida/ - https://javadoc.scijava.org/Bio-Formats/ - https://javadoc.scijava.org/FLIMLib/ - https://javadoc.scijava.org/Fiji/ - https://javadoc.scijava.org/Icy/ - https://javadoc.scijava.org/ImageJ/ - https://javadoc.scijava.org/ImageJ1/ - https://javadoc.scijava.org/ImgLib2/ - https://javadoc.scijava.org/Java3D/ - https://javadoc.scijava.org/KNIME/ - https://javadoc.scijava.org/LOCI/ - https://javadoc.scijava.org/MiToBo/ - https://javadoc.scijava.org/Micro-Manager-Core/ - https://javadoc.scijava.org/Micro-Manager-Studio/ - https://javadoc.scijava.org/MorphoLibJ/ - https://javadoc.scijava.org/OMERO/ - https://javadoc.scijava.org/SCIFIO/ - https://javadoc.scijava.org/Apache-Commons-IO/ - https://javadoc.scijava.org/Apache-Commons-Lang/ - https://javadoc.scijava.org/Apache-Commons-Math/ - https://javadoc.scijava.org/Apache-Commons-Text/ - https://javadoc.scijava.org/BoneJ/ - https://javadoc.scijava.org/Eclipse/ - https://javadoc.scijava.org/Guava/ - https://javadoc.scijava.org/JAMA/ - https://javadoc.scijava.org/JFreeChart/ - https://javadoc.scijava.org/JGraphT/ - https://javadoc.scijava.org/JHotDraw/ - https://javadoc.scijava.org/JOML/ - https://javadoc.scijava.org/Javassist/ - https://javadoc.scijava.org/MigLayout/ - https://javadoc.scijava.org/NetBeans/ - https://javadoc.scijava.org/Pivot/ - https://javadoc.scijava.org/VisAD/ - https://javadoc.scijava.org/Weka/ - https://javadoc.scijava.org/ojAlgo/ - - - - - maven-clean-plugin - 3.3.2 - - - default-clean - clean - - clean - - - - - - maven-install-plugin - 3.1.1 - - - default-install - install - - install - - - - - - maven-deploy-plugin - 3.1.1 - - - default-deploy - deploy - - deploy - - - - - - maven-site-plugin - 3.12.1 - - - default-site - site - - site - - - /home/elect/IdeaProjects/pom-scijava/target/site - - - org.apache.maven.plugins - maven-javadoc-plugin - - - org.apache.maven.plugins - maven-project-info-reports-plugin - - - - - - default-deploy - site-deploy - - deploy - - - /home/elect/IdeaProjects/pom-scijava/target/site - - - org.apache.maven.plugins - maven-javadoc-plugin - - - org.apache.maven.plugins - maven-project-info-reports-plugin - - - - - - - /home/elect/IdeaProjects/pom-scijava/target/site - - - org.apache.maven.plugins - maven-javadoc-plugin - - - org.apache.maven.plugins - maven-project-info-reports-plugin - - - - - - - - /home/elect/IdeaProjects/pom-scijava/target/site - - - maven-javadoc-plugin - - - - diff --git a/gradle/platform/gradle/wrapper/gradle-wrapper.jar b/gradle/platform/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index d64cd4917707c1f8861d8cb53dd15194d4248596..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43462 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 diff --git a/gradle/platform/gradle/wrapper/gradle-wrapper.properties b/gradle/platform/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index b82aa23..0000000 --- a/gradle/platform/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/gradle/platform/gradlew b/gradle/platform/gradlew deleted file mode 100755 index 1aa94a4..0000000 --- a/gradle/platform/gradlew +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/gradle/platform/gradlew.bat b/gradle/platform/gradlew.bat deleted file mode 100644 index 93e3f59..0000000 --- a/gradle/platform/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/gradle/platform/settings.gradle.kts b/gradle/platform/settings.gradle.kts deleted file mode 100644 index dd1d779..0000000 --- a/gradle/platform/settings.gradle.kts +++ /dev/null @@ -1,31 +0,0 @@ -/* - * This file was generated by the Gradle 'init' task. - * - * The settings file is used to specify which projects to include in your build. - * - * Detailed information about configuring a multi-project build in Gradle can be found - * in the user manual at https://docs.gradle.org/7.2/userguide/multi_project_builds.html - */ - -rootProject.name = "gradle-platform" - -dependencyResolutionManagement { - - // repositories { .. } - versionCatalogs { - // create("libs") { - // from("org.scijava:gradle-catalog:0.11") - // library("my-lib", "com.mycompany:mylib:1.2") - // } - // maybeCreate("libs").version("groovy", "3.0.9") - // maybeCreate("libs").library("groovy-core", "org.codehaus.groovy:groovy:2.4.15") - - // fails with "Could not resolve all artifacts for configuration 'incomingCatalogForLibs0'." - if (file("../catalog/build/version-catalog/libs.versions.toml").exists()) - create("libs").from(files("../catalog/build/version-catalog/libs.versions.toml")) - } - - includeBuild("../catalog") -} - -enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") \ No newline at end of file diff --git a/gradle/playground/build.gradle.kts b/gradle/playground/build.gradle.kts deleted file mode 100644 index b40c122..0000000 --- a/gradle/playground/build.gradle.kts +++ /dev/null @@ -1,119 +0,0 @@ -import org.gradle.api.publish.maven.internal.publication.DefaultMavenPom - -plugins { - embeddedKotlin("jvm") - id("org.gradlex.java-ecosystem-capabilities") version "1.5.2.00" - id("dev.jacomet.logging-capabilities") version "0.11.1" - id("io.fuchs.gradle.classpath-collision-detector") version "0.3" - `maven-publish` -} - -repositories { - mavenCentral() - maven("https://maven.scijava.org/content/repositories/releases") - maven("https://maven.scijava.org/content/groups/public") -} - -// @CacheableRule is more verbose but more efficient, because the rule will be applied before the dependency get cached -// in Gradle, it will appear as this was the original downloaded metadata of the given dependency - -inline fun ComponentMetadataHandler.withModules(vararg modules: String) { - for (module in modules) withModule(module) -} - -abstract class Rule : ComponentMetadataRule { - fun ComponentMetadataContext.remove(vararg modules: String) = details.allVariants { withDependencies { removeIf { it.module.toString() in modules } } } -} -dependencies { - components { - @CacheableRule open class NoXalan : Rule() { - override fun execute(context: ComponentMetadataContext) = context.remove("xalan:serializer", "xalan:xalan") - } - withModules("org.openmicroscopy:ome-common", "ome:bio-formats-tools", "ome:formats-api", "ome:formats-bsd", - "org.apache.xmlgraphics:batik-bridge", "org.apache.xmlgraphics:batik-dom") - - @CacheableRule open class NoUeberJars : Rule() { - override fun execute(context: ComponentMetadataContext) = context.remove("org.apache.xmlgraphics:batik-all", "it.unimi.dsi:fastutil") - } - withModules("org.openmicroscopy:omero-blitz", "org.openmicroscopy:omero-server") - - @CacheableRule open class NoAndroid : Rule() { - override fun execute(context: ComponentMetadataContext) = context.remove("com.google.android.tools:dx") - } - withModules("net.clearcontrol:coremem", "com.nativelibs4java:bridj") - - @CacheableRule open class ClearGl : Rule() { - override fun execute(context: ComponentMetadataContext) = context.remove("org.jogamp.gluegen:gluegen-rt-main", "org.jogamp.jogl:jogl-all-main") - } - withModule("net.clearvolume:cleargl") - - @CacheableRule open class SparkCore211 : Rule() { - override fun execute(context: ComponentMetadataContext) = context.remove("io.netty:netty-all") - } - withModule("org.apache.spark:spark-core_2.11") - - @CacheableRule open class NoBatikExtensions : Rule() { - override fun execute(context: ComponentMetadataContext) = context.remove("org.apache.xmlgraphics:batik-extensions") - } - withModules("org.apache.xmlgraphics:batik-rasterizer-ext", "org.apache.xmlgraphics:batik-squiggle-ext") - - @CacheableRule open class NoJogampNatives : Rule() { - override fun execute(context: ComponentMetadataContext) { - // Conflicts with properly packaged jogamp native classifiers. - val libs = listOf("gluegen:gluegen-rt", "jogl:jogl-all") - val modules = listOf("linux-aarch64", "linux-amd64", "linux-armv6hf", "linux-i586", "macosx-universal", "windows-amd64", "windows-i586") - .flatMap { p -> libs.map { "org.jogamp.$it-natives-$p" } }.toTypedArray() - context.remove(*modules) - } - } - withModules("org.jzy3d:jzy3d-native-jogl-awt", "org.jzy3d:jzy3d-native-jogl-core") - - @CacheableRule open class Weka : Rule() { - val exclusions = listOf( - "com.github.fommil.netlib:all", "com.googlecode.netlib-java:netlib-java", "net.sourceforge.f2j:arpack_combined_all", - "nz.ac.waikato.cms.weka.thirdparty:java-cup-11b", "nz.ac.waikato.cms.weka.thirdparty:java-cup-11b-runtime") - - override fun execute(context: ComponentMetadataContext) { - context.details.allVariants { - withDependencies { - removeIf { it.module.toString() in exclusions } - add("runtimeClasspath", "com.github.vbmacher:java-cup-runtime") - } - } - } - } - withModule("nz.ac.waikato.cms.weka:weka-dev") - } - // implementation("org.jzy3d:jzy3d-emul-gl:+") - // implementation("org.jzy3d:jzy3d-emul-gl-awt:+") - - implementation("junit:junit:4.4") - // implementation("org.hamcrest:hamcrest-core:1.2") -} - -tasks.detectCollisions { - // detectCollisions() // to detect on configuration time - // configurations.from(project.configurations.testRuntimeClasspath) -} - -publishing { - publications.register("maven") { - pom { - this as DefaultMavenPom - println(name.orNull) - println(licenses) - this.licenses { - license { - this.name = "Nich" - url = "URL" - comments = "com" - distribution = "dis" - } - } - println(licenses[0].name.orNull) - println(licenses[0].url.orNull) - println(licenses[0].comments.orNull) - println(licenses[0].distribution.orNull) - } - } -} \ No newline at end of file diff --git a/gradle/playground/settings.gradle.kts b/gradle/playground/settings.gradle.kts deleted file mode 100644 index b4fc304..0000000 --- a/gradle/playground/settings.gradle.kts +++ /dev/null @@ -1,31 +0,0 @@ -/* - * This file was generated by the Gradle 'init' task. - * - * The settings file is used to specify which projects to include in your build. - * - * Detailed information about configuring a multi-project build in Gradle can be found - * in the user manual at https://docs.gradle.org/7.2/userguide/multi_project_builds.html - */ - -rootProject.name = "gradle-playground" - -pluginManagement.repositories { - gradlePluginPortal() - maven("https://maven.scijava.org/content/repositories/releases") -} - -dependencyResolutionManagement { - - // repositories { .. } - versionCatalogs { - create("libs").from("org.scijava:gradle-catalog") - - // fails with "Could not resolve all artifacts for configuration 'incomingCatalogForLibs0'." - // create("libs").from(files("../catalog/build/version-catalog/libs.versions.toml")) - } - - includeBuild("../catalog") - // includeBuild("../../../java-ecosystem-capabilities") -} - -enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") \ No newline at end of file diff --git a/gradle/settings.gradle.kts b/gradle/settings.gradle.kts deleted file mode 100644 index 3544372..0000000 --- a/gradle/settings.gradle.kts +++ /dev/null @@ -1,14 +0,0 @@ -// This is an empty umbrella build including all the component builds. -// This build is not necessarily needed. The component builds work independently. - -rootProject.name = "gradle" - -includeBuild("catalog") -includeBuild("platform") -includeBuild("manifest-dependencies") -includeBuild("declarative") -includeBuild("declarative-playground") -//includeBuild("playground") -//includeBuild("enforcer") - -enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") \ No newline at end of file diff --git a/pom.xml b/pom.xml index f173dc9..b379f5b 100644 --- a/pom.xml +++ b/pom.xml @@ -6875,83 +6875,57 @@ - - - - gradle-catalog - - - - gradle/platform - - - - - - org.codehaus.mojo - exec-maven-plugin - - - generate-gradle-catalog - generate-sources - - exec - - - ../gradlew - gradle/catalog - - generateCatalogAsToml - - - - - generate-gradle-platform - generate-sources - - exec - - - ../gradlew - gradle/platform - - generateMetadataFileForSciJavaPlatformPublication - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - attach-gradle-catalog - - package - - - attach-artifact - - - - - gradle/catalog/build/version-catalog/libs.versions.toml - toml - - - gradle/platform/build/publications/sciJavaPlatform/module.json - - module - - - - - - - - - - + + + + org.codehaus.mojo + exec-maven-plugin + + + generate-gradle-catalog-and-platform + generate-sources + + exec + + + ./gradlew + gradle-scijava + + generateCatalogAndPlatform + + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + + + attach-gradle-catalog + + package + + + attach-artifact + + + + + target/gradle/version-catalog/libs.versions.toml + toml + + + target/gradle/publications/pomScijava/module.json + + module + + + + + + + + From 683503efb86a43e4a4478cdb8a7f759873fd60b9 Mon Sep 17 00:00:00 2001 From: Giuseppe Barbieri Date: Tue, 7 May 2024 10:24:43 +0200 Subject: [PATCH 025/294] idea files + gitignore --- .gitignore | 3 ++- .idea/misc.xml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 3f23446..831dc36 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /.project /.settings/ /target/ -/gradle-scijava/.gradle \ No newline at end of file +/gradle-scijava/.gradle +.idea \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index a4e60c8..48041f5 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,7 +3,7 @@ - +

+ From 323c606916752e567ab4eaa2c227da79a4bdcaa0 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Thu, 28 May 2026 13:07:11 -0500 Subject: [PATCH 236/294] Add includes to pombast team, to limit org search Without this, 65 orgs get searched, most of which are not under the purview of SciJava maintenance. --- pombast.toml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/pombast.toml b/pombast.toml index e781527..13b00c8 100644 --- a/pombast.toml +++ b/pombast.toml @@ -25,7 +25,21 @@ cuttable = [ ] [team] -excludes = ["ome:*", "org.openmicroscopy:*"] +includes = [ + "de.nanoimaging:*", + "fr.inra.ijpb:*", + "io.scif:*", + "jitk:*", + "mpicbg:*", + "net.imagej:*", + "net.imglib2:*", + "net.preibisch:*", + "org.bonej:*", + "org.janelia*:*", + "org.morphonets:*", + "org.scijava:*", + "sc.fiji:*", +] [badges] includes = [ From 92181dd2135b2dd30b99357e0779f1f096ff440d Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Thu, 28 May 2026 16:51:05 -0500 Subject: [PATCH 237/294] Let status and team pages share common navigation --- footer.html => footer-status.html | 3 ++ footer-team.html | 2 ++ header-status.html | 47 +++++++++++++++++++++++++++++++ header-team.html | 27 ++++++++++++++++++ header.html | 22 --------------- pombast.toml | 9 ++++-- 6 files changed, 85 insertions(+), 25 deletions(-) rename footer.html => footer-status.html (99%) create mode 100644 footer-team.html create mode 100644 header-status.html create mode 100644 header-team.html delete mode 100644 header.html diff --git a/footer.html b/footer-status.html similarity index 99% rename from footer.html rename to footer-status.html index 2227e84..e5c038d 100644 --- a/footer.html +++ b/footer-status.html @@ -36,3 +36,6 @@ + +
+👍 diff --git a/footer-team.html b/footer-team.html new file mode 100644 index 0000000..64db37f --- /dev/null +++ b/footer-team.html @@ -0,0 +1,2 @@ +
+👍 diff --git a/header-status.html b/header-status.html new file mode 100644 index 0000000..923b0e6 --- /dev/null +++ b/header-status.html @@ -0,0 +1,47 @@ + + + + diff --git a/header-team.html b/header-team.html new file mode 100644 index 0000000..41befe7 --- /dev/null +++ b/header-team.html @@ -0,0 +1,27 @@ + + diff --git a/header.html b/header.html deleted file mode 100644 index 832e4d5..0000000 --- a/header.html +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/pombast.toml b/pombast.toml index 13b00c8..18c1889 100644 --- a/pombast.toml +++ b/pombast.toml @@ -4,9 +4,9 @@ repositories = ["scijava.public=https://maven.scijava.org/content/groups/public" [status] rules = "rules.xml" -html = "index.html" -header = "header.html" -footer = "footer.html" +html = "../status.scijava.org/index.html" +header = "header-status.html" +footer = "footer-status.html" nexus-base = "https://maven.scijava.org" cuttable = [ "de.nanoimaging:*", @@ -25,6 +25,9 @@ cuttable = [ ] [team] +html = "../status.scijava.org/team.html" +header = "header-team.html" +footer = "footer-team.html" includes = [ "de.nanoimaging:*", "fr.inra.ijpb:*", From 71be2ef092b5ea3e7e3baa70c9e1055464802b91 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Sat, 30 May 2026 12:58:03 -0500 Subject: [PATCH 238/294] CI: generate badges.json as part of status refresh --- .github/status.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/status.sh b/.github/status.sh index 096e57c..81186a0 100755 --- a/.github/status.sh +++ b/.github/status.sh @@ -1,5 +1,6 @@ #!/bin/sh uv tool install "git+https://github.com/scijava/pombast.git" pombast status . -pombast team . --html team.html -.github/publish.sh "Update status reports" index.html team.html +pombast badges -o badges.json . +pombast team . +.github/publish.sh "Update status reports" index.html badges.json team.html From 319bf40f2b3f28be626cba40ca3cdad27df8e361 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Sat, 30 May 2026 15:46:35 -0500 Subject: [PATCH 239/294] Downgrade recommended JavaFX version to v19 This is so that the recommended/default JavaFX aligns with the recommended/default version of Java: currently version 11. When scijava.jvm.version is increased, we can/should/will also increase the recommended/default version of JavaFX. This alignment is necessary for pombast validation checks; whereas with them misaligned, the javafx components in the pombast melt dependency graph result in enforcer validation errors: [ERROR] Rule 6: org.codehaus.mojo.extraenforcer.dependencies.EnforceBytecodeVersion failed with message: [ERROR] Found Banned Dependency: org.openjfx:javafx-media:jar:linux:23.0.2 [ERROR] Found Banned Dependency: org.openjfx:javafx-swing:jar:linux:23.0.2 [ERROR] Found Banned Dependency: org.openjfx:javafx-fxml:jar:linux:23.0.2 [ERROR] Found Banned Dependency: org.openjfx:javafx-web:jar:linux:23.0.2 [ERROR] Found Banned Dependency: org.openjfx:javafx-base:jar:linux:23.0.2 [ERROR] Found Banned Dependency: org.openjfx:javafx-controls:jar:linux:23.0.2 [ERROR] Found Banned Dependency: org.openjfx:javafx-graphics:jar:linux:23.0.2 [ERROR] Use 'mvn dependency:tree' to locate the source of the banned dependencies. The reason the javafx components are part of the pombast melt's dependency graph is because several other included components (OMEVisual, FilamentDetector, multiview-reconstruction) depend on javafx, so even with javafx components excluded from the melt operation's direct dependency graph, they still come in transitively. We could alternately work around the issue by excluding all the components depending on javafx, but that would be a hacky workaround compared to just unifying expectations here. With this adjustment, errors could now surface in the "other direction": if a component Foo21 overrides scijava.jvm.version to 21 and javafx.version to v23, it will be buildable and releasable -- but if that Foo21 component is then added to the pom-scijava BOM, it will be smelted with JavaFX v19, meaning any too-new API of JavaFX v23 will not be available, and the Foo21 smelt will fail accordingly. But this is actually correct: we are asserting that all versions of components in the BOM actually work together, and if Foo21 tries to make use of a too-new JavaFX, it *would* fail at runtime if a downstream component added dependencies on Foo21 and JavaFX at the BOM's declared versions. So: working as intended! --- pom.xml | 2 +- pombast.toml | 7 ------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index 19eaad6..8b7d450 100644 --- a/pom.xml +++ b/pom.xml @@ -2115,7 +2115,7 @@ 26 | 24 27 | 25 --> - 23.0.2 + 19.0.2.1 ${javafx.version} ${javafx.version} ${javafx.version} diff --git a/pombast.toml b/pombast.toml index 18c1889..5b6af95 100644 --- a/pombast.toml +++ b/pombast.toml @@ -109,13 +109,6 @@ excludes = [ 'mpicbg:mpicbg', 'mpicbg:mpicbg_', # NB: Skip artifacts requiring minimum Java version >11. 'net.algart:algart-tiff', - 'org.openjfx:javafx-base', - 'org.openjfx:javafx-controls', - 'org.openjfx:javafx-fxml', - 'org.openjfx:javafx-graphics', - 'org.openjfx:javafx-media', - 'org.openjfx:javafx-swing', - 'org.openjfx:javafx-web', 'org.morphonets:SNT', # NB: Skip closed-source artifacts. 'org.bonej:bonej-plus', From 1b70c2a07e32803ffbe61ea6724aa57f4c8d529f Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Mon, 1 Jun 2026 14:09:50 -0500 Subject: [PATCH 240/294] Tidy up the pombast/mega-melt configuration * Move pombast-specific templates into pombast subfolder. * Remove tests subfolder containing obsolete shell scripts. --- pombast.toml | 10 +- .../footer-status.html | 0 footer-team.html => pombast/footer-team.html | 0 .../header-status.html | 0 header-team.html => pombast/header-team.html | 0 {tests => pombast}/mega-melt-template.xml | 0 tests/filter-build-log.py | 48 -- tests/generate-mega-melt.py | 147 ------ tests/run.sh | 484 ------------------ 9 files changed, 5 insertions(+), 684 deletions(-) rename footer-status.html => pombast/footer-status.html (100%) rename footer-team.html => pombast/footer-team.html (100%) rename header-status.html => pombast/header-status.html (100%) rename header-team.html => pombast/header-team.html (100%) rename {tests => pombast}/mega-melt-template.xml (100%) delete mode 100644 tests/filter-build-log.py delete mode 100644 tests/generate-mega-melt.py delete mode 100755 tests/run.sh diff --git a/pombast.toml b/pombast.toml index 5b6af95..613fd82 100644 --- a/pombast.toml +++ b/pombast.toml @@ -5,8 +5,8 @@ repositories = ["scijava.public=https://maven.scijava.org/content/groups/public" [status] rules = "rules.xml" html = "../status.scijava.org/index.html" -header = "header-status.html" -footer = "footer-status.html" +header = "pombast/header-status.html" +footer = "pombast/footer-status.html" nexus-base = "https://maven.scijava.org" cuttable = [ "de.nanoimaging:*", @@ -26,8 +26,8 @@ cuttable = [ [team] html = "../status.scijava.org/team.html" -header = "header-team.html" -footer = "footer-team.html" +header = "pombast/header-team.html" +footer = "pombast/footer-team.html" includes = [ "de.nanoimaging:*", "fr.inra.ijpb:*", @@ -71,7 +71,7 @@ includes = [ # Setting scijava.jvm.version to 21 by default would avoid the issue, but... # is that really a good idea? Setting to 11 seems like a nice baseline compromise right now. java-version = 21 # Maximum Java version of all included component + deps. -template = "tests/mega-melt-template.xml" +template = "pombast/mega-melt-template.xml" excludes = [ # TEMP: Exclude org.bytedeco:hdf5 until cisd:jhdf5 is gone. 'org.bytedeco:hdf5', diff --git a/footer-status.html b/pombast/footer-status.html similarity index 100% rename from footer-status.html rename to pombast/footer-status.html diff --git a/footer-team.html b/pombast/footer-team.html similarity index 100% rename from footer-team.html rename to pombast/footer-team.html diff --git a/header-status.html b/pombast/header-status.html similarity index 100% rename from header-status.html rename to pombast/header-status.html diff --git a/header-team.html b/pombast/header-team.html similarity index 100% rename from header-team.html rename to pombast/header-team.html diff --git a/tests/mega-melt-template.xml b/pombast/mega-melt-template.xml similarity index 100% rename from tests/mega-melt-template.xml rename to pombast/mega-melt-template.xml diff --git a/tests/filter-build-log.py b/tests/filter-build-log.py deleted file mode 100644 index 4e8f194..0000000 --- a/tests/filter-build-log.py +++ /dev/null @@ -1,48 +0,0 @@ -# -# filter-build-log.py - Cuts out cruft to focus on build failure details. -# - -# This script filters build logs down to only [WARNING] and [ERROR] lines, -# and consolidates lengthy duplicate class listings down to packages only. - -import sys - -def print_filtered_log(log): - dups = [] - parsingdups = False - atbeginning = True - for line in log: - line = line.rstrip('\n') - if line.startswith('[INFO]'): - # Filter out non-error build messages. - continue - if line.startswith('Download') or line.startswith('Progress'): - # Filter out details of remote resource queries. - continue - if atbeginning and not line.strip(): - # Filter out leading blank lines. - continue - atbeginning = False - if parsingdups: - if line.startswith(' '): - if line.find('/') >= 0: - # Strip to containing package only. - line = line[:line.rindex('/')] - dups.append(line) - else: - parsingdups = False - for dup in sorted(set(dups)): - print(dup) - print('') - dups = [] - else: - if line == ' Duplicate classes:': - print(' Duplicate packages:') - parsingdups = True - else: - print(line) - -for arg in sys.argv[1:]: - with open(arg) as f: - print_filtered_log(f) - diff --git a/tests/generate-mega-melt.py b/tests/generate-mega-melt.py deleted file mode 100644 index fef2758..0000000 --- a/tests/generate-mega-melt.py +++ /dev/null @@ -1,147 +0,0 @@ -# -# generate-mega-melt.py - Make a POM depending on everything in pom-scijava. -# - -import os, re, sys -from xml.dom import minidom - -def child(node, tag): - nodes = node.getElementsByTagName(tag) - return None if len(nodes) == 0 else nodes[0] - -script_dir = os.path.dirname(os.path.realpath(__file__)) if __file__ else '.' -out = minidom.parse(os.path.join(script_dir, 'mega-melt-template.xml')) -out.getElementsByTagName('project')[0].appendChild(out.createElement('dependencies')) -outDeps = out.getElementsByTagName('dependencies')[0] - -psj = minidom.parse(os.path.join(script_dir, '..', 'pom.xml')) -depMgmt = psj.getElementsByTagName('dependencyManagement')[0] -deps = depMgmt.getElementsByTagName('dependencies')[0] -depList = deps.getElementsByTagName('dependency') - -# Artifacts to exclude from the mega melt. -ignoredArtifacts = [ - # TEMP: Exclude org.bytedeco:hdf5 until cisd:jhdf5 is gone. - 'hdf5', - # TEMP: The original ImageJ requires Java 9+ to compile, - # because it has a module-info.java, so skip it until the - # component collection is updated from Java 8 to Java 11. - 'ij', - # TEMP: Skip components within multi-module reactors. - # Neither melting-pot.sh nor release-version.sh understand - # multi-module repositories; release-version.sh needs to learn - # how to tag and release individual components from multi-module - # repos, so that when melting-pot.sh shallow clones the repo at - # that tag and invokes a build, it will be building only the - # released component as it does with single-component repos. - 'scijava-collections', - 'scijava-common3', - 'scijava-concurrent', - 'scijava-discovery-test', - 'scijava-discovery', - 'scijava-function', - 'scijava-legacy', - 'scijava-meta', - 'scijava-ops-api', - 'scijava-ops-benchmarks', - 'scijava-ops-engine', - 'scijava-ops-ext-parser', - 'scijava-ops-flim', - 'scijava-ops-image', - 'scijava-ops-indexer', - 'scijava-ops-opencv', - 'scijava-ops-spi', - 'scijava-ops-tutorial', - 'scijava-priority', - 'scijava-progress', - 'scijava-struct', - 'scijava-taglets', - 'scijava-testutil', - 'scijava-types', - 'mpicbg', 'mpicbg_', - # NB: Skip artifacts requiring minimum Java version >8. - 'algart-tiff', - 'javafx-base', - 'javafx-controls', - 'javafx-fxml', - 'javafx-graphics', - 'javafx-media', - 'javafx-swing', - 'javafx-web', - 'SNT', - # NB: Skip closed-source artifacts. - 'bonej-plus', - # NB: The following artifacts have messy dependency trees. - # Too many problems to test as part of the mega-melt. - # See WARNING block in pom-scijava's pom.xml for details. - 'imagej-server', - 'spark-core_2.11', - # NB: Skip scijava forks of third-party projects. - # These are very stable, with few/no dependencies, and - # don't need to be retested as pom-scijava evolves. - 'j3dcore', - 'j3dutils', - 'jep', - 'junit-benchmarks', - 'vecmath', - # NB: Skip alternate flavors of other managed components. - 'gluegen', # uberjar flavor of gluegen-rt - 'jogl-all-noawt', # slimmed down flavor of jogl-all - # NB: All the SWT platform JARs have the same classes. - # The current platform will be brought in transitively. - 'org.eclipse.swt.cocoa.macosx', - 'org.eclipse.swt.cocoa.macosx.x86_64', - 'org.eclipse.swt.gtk.aix.ppc', - 'org.eclipse.swt.gtk.aix.ppc64', - 'org.eclipse.swt.gtk.hpux.ia64', - 'org.eclipse.swt.gtk.linux.ppc', - 'org.eclipse.swt.gtk.linux.ppc64', - 'org.eclipse.swt.gtk.linux.s390', - 'org.eclipse.swt.gtk.linux.s390x', - 'org.eclipse.swt.gtk.linux.x86', - 'org.eclipse.swt.gtk.linux.x86_64', - 'org.eclipse.swt.gtk.solaris.sparc', - 'org.eclipse.swt.gtk.solaris.x86', - 'org.eclipse.swt.win32.win32.x86', - 'org.eclipse.swt.win32.win32.x86_64', - # NB: All SLF4J bindings have the same classes. - # We'll rely on logback-classic being present here. - 'slf4j-jcl', - 'slf4j-jdk14', - 'slf4j-nop', - 'slf4j-simple', - # NB: Cannot include both commons-logging and jcl-over-slf4j; - # see: http://www.slf4j.org/codes.html#jclDelegationLoop - 'jcl-over-slf4j' -] - -for dep in depList: - # Harvest relevant information (ignore exclusions and version). - groupId = child(dep, 'groupId') - artifactId = child(dep, 'artifactId') - classifier = child(dep, 'classifier') - scope = child(dep, 'scope') - - if artifactId.firstChild.data in ignoredArtifacts: - continue - - outDep = out.createElement('dependency') - outDep.appendChild(groupId) - outDep.appendChild(artifactId) - if classifier: - outDep.appendChild(classifier) - if scope: - outDep.appendChild(scope) - outDeps.appendChild(outDep) - -# Filter XML through a hacky substitution to avoid unwanted whitespace. -xml = re.sub('\n[\n\r\t]*\n', '\n', out.toprettyxml()) - -outDir = sys.argv[1] if len(sys.argv) > 1 else 'mega-melt' -try: - os.mkdir(outDir) -except: - pass - -with open(os.path.join(outDir, 'pom.xml'), 'w') as outPOM: - outPOM.write(xml) diff --git a/tests/run.sh b/tests/run.sh deleted file mode 100755 index 6ddc871..0000000 --- a/tests/run.sh +++ /dev/null @@ -1,484 +0,0 @@ -#!/bin/sh - -# -# run.sh - Tests correctness of the pom-scijava BOM. -# - -die () { echo "$*" >&2; exit 1; } - -changed () { ! diff $@ >/dev/null; } - -sectionStart() { - startTime=$(date +%s) - echo - printf "$1... " -} - -sectionEnd() { - endTime=$(date +%s) - echo "Done! [$((endTime-startTime))s]" -} - -# Check prerequisites. - -# HACK: Work around macOS Python naming inconsistency. -if command -v python3 >/dev/null 2>&1; then - PYTHON=python3 -elif command -v python >/dev/null 2>&1; then - PYTHON=python -else - die "This script requires Python." -fi - -sectionStart 'Generating mega-melt project' - -dir=$(cd "$(dirname "$0")" && pwd) -pom="$dir/../pom.xml" -test -f "$pom" || die 'Where is pom.xml?!' - -generateMegaMeltScript="$dir/generate-mega-melt.py" -filterBuildLogScript="$dir/filter-build-log.py" - -megaMeltDir="$dir/../target/mega-melt" -megaMeltDir=$(mkdir -p "$megaMeltDir" && cd "$megaMeltDir" && pwd) -pomParent="$megaMeltDir/../pom.xml" -versionSwapLog="$megaMeltDir/version-swap.log" -dependencyTreeLog="$megaMeltDir/dependency-tree.log" -validationLog="$megaMeltDir/validation.log" -validationErrorsLog="$megaMeltDir/validation-errors.log" -megaMeltPOM="$megaMeltDir/pom.xml" -meltingPotLocal="$dir/../../scijava-scripts/melting-pot.sh" -meltingPotURL=https://raw.githubusercontent.com/scijava/scijava-scripts/main/melting-pot.sh -meltingPotScript="$megaMeltDir/melting-pot.sh" -meltingPotLog="$megaMeltDir/melting-pot.log" -meltingPotDir="$megaMeltDir/melting-pot" -skipTestsFile="$meltingPotDir/skipTests.txt" -meltScript="$meltingPotDir/melt.sh" - -# HACK: List of artifacts with known-duplicate short version properties. -shortVersionClashes=\ -'net.sourceforge.findbugs.annotations'\ -'|antlr.antlr'\ -'|org.jogamp.jocl.jocl'\ -'|net.sf.opencsv.opencsv'\ -'|org.jetbrains.intellij.deps.trove4j' - -rm -rf "$megaMeltDir" && mkdir -p "$megaMeltDir" || die "Creation of $megaMeltDir failed!" -cp "$pom" "$pomParent" && -mvn -B -f "$pomParent" versions:set -DnewVersion=999-mega-melt > "$versionSwapLog" && - mvn -B -f "$pomParent" install:install >> "$versionSwapLog" || - die "pom-scijava version update failed:\n$(cat "$versionSwapLog")" -$PYTHON "$generateMegaMeltScript" "$megaMeltDir" || die 'Generation failed!' -sectionEnd # Generating mega-melt project - -# Ensure the mega-melt dependency structure validates. -# In particular, this runs our enforcer rules: the build -# will fail if there are any snapshot dependencies, or -# any duplicate classes across artifacts on the classpath. -sectionStart 'Validating mega-melt project' -mvn -B -f "$megaMeltPOM" dependency:tree > "$dependencyTreeLog" || - die "Invalid dependency tree:\n$(cat "$dependencyTreeLog")" -mvn -B -f "$megaMeltPOM" -U clean package > "$validationLog" || { - $PYTHON "$filterBuildLogScript" "$validationLog" > "$validationErrorsLog" - die "Validation build failed!\n\nDependency tree:\n$(cat "$dependencyTreeLog")\n\nBuild log:\n$(cat "$validationErrorsLog")" -} -sectionEnd # Validating mega-melt project - -# Run mega-melt through the melting pot, with all SciJava-affiliated groupIds, -# minus excluded artifacts (see ignoredArtifacts in generate-mega-melt.py). -echo && -echo 'Generating melting pot...' && -if [ -e "$meltingPotLocal" ] -then - cp "$meltingPotLocal" "$meltingPotScript" -else - curl -fsL "$meltingPotURL" > "$meltingPotScript" -fi || - die "Failed to obtain melting pot script!" - -# Build the melting pot structure. -chmod +x "$meltingPotScript" && -"$meltingPotScript" "$megaMeltDir" \ - -r scijava.public::::https://maven.scijava.org/content/groups/public \ - -o "$meltingPotDir" \ - -i 'ca.mcgill:*' \ - -i 'io.scif:*' \ - -i 'jitk:*' \ - -i 'mpicbg:*' \ - -i 'net.imagej:*' \ - -i 'net.imglib2:*' \ - -i 'net.preibisch:*' \ - -i 'org.bonej:*' \ - -i 'org.janelia.saalfeldlab:*' \ - -i 'org.janelia:*' \ - -i 'org.morphonets:*' \ - -i 'org.scijava:*' \ - -i 'sc.fiji:*' \ - -e 'net.imagej:ij' \ - -e 'net.imglib2:imglib2-mesh' \ - -e 'org.bonej:bonej-plus' \ - -e 'org.openjfx:*' \ - -e 'org.scijava:j3dcore' \ - -e 'org.scijava:j3dutils' \ - -e 'org.scijava:jep' \ - -e 'org.scijava:junit-benchmarks' \ - -e 'org.scijava:vecmath' \ - -f -v -s $@ 2>&1 | tee "$meltingPotLog" - -# NB: The pipe to tee eats the melting-pot error code. -# Even with the POSIX-unfriendly pipefail flag set. -# So we resort to this hacky error check of the log. -test "$(grep -F "[ERROR]" "$meltingPotLog" | grep -v "using default branch")" && - die 'Melting pot generation failed!' - -buildScript="$meltingPotDir/build.sh" -versionPins="$meltingPotDir/version-pins.xml" - -echo -echo 'Hacking in any changed components...' - -# Mix in changed components. Syntax is: -# -# groupId|artifactId|path-to-remote|remote-ref -# -# Example: -# -# components=' -# org.janelia.saalfeldlab|n5-imglib2|git@github.com:saalfeldlab/n5-imglib2|pull/54/head -# sc.fiji|SPIM_Registration|git@github.com:fiji/SPIM_Registration|pull/142/head -# sc.fiji|labkit-ui|git@github.com:juglab/labkit-ui|pull/115/head -# sc.fiji|labkit-pixel-classification|git@github.com:juglab/labkit-pixel-classification|pull/12/head -# sc.fiji|z_spacing|git@github.com:saalfeldlab/z-spacing|pull/28/head -# net.imagej|imagej-common|git@github.com:imagej/imagej-common|pull/112/head -# sc.fiji|TrackMate|git@github.com:trackmate-sc/TrackMate|pull/289/head -# sc.fiji|TrackMate-Skeleton|git@github.com:trackmate-sc/TrackMate-Skeleton|pull/2/head -# sc.fiji|bigwarp_fiji|git@github.com:saalfeldlab/bigwarp|pull/170/head -# net.imagej|imagej-ops|git@github.com:imagej/imagej-ops|pull/654/head -# ' -# -# One entry per line inside the components variable declaration. -# No leading or trailing whitespace anywhere. -# -# Each component will: -# 1. Be updated to that ref (cloning as needed); -# 2. Have its version adjusted to 999 in its pom.xml and gav marker; -# 3. Be `mvn install`ed to the local repo cache at that version; -# 4. Have its version adjusted to 999 in melting pot's build.sh; -# 5. Be added to the list of components to build in melt.sh (if not already present). -components=' -' -failFile="$meltingPotDir/fail" -rm -f "$failFile" -echo "$components" | while read component -do - test "$component" || continue - - g=${component%%|*}; r=${component#*|} - a=${r%%|*}; r=${r#*|} - remote=${r%%|*}; ref=${r#*|} - test "$g" -a "$a" -a "$remote" -a "$ref" || { - touch "$failFile" - die "Invalid component line: $component" - } - d="$meltingPotDir/$g/$a" - printf "[$g:$a] " - - # Update component working copy to desired ref (cloning as needed). - mkdir -p "$d" && - echo "Log of actions for custom version of $g:$a" > "$d/surgery.log" && - echo >> "$d/surgery.log" && - test -f "$d/.git" || git init "$d" >> "$d/surgery.log" || { - touch "$failFile" - die "Failed to access or initialize repository in directory $d" - } - printf . - cd "$d" && - git remote add mega-melt "$remote" >> surgery.log && - printf . && - git fetch mega-melt --depth 1 "$ref":mega-melt >> surgery.log 2>&1 && - printf . && - git switch mega-melt >> surgery.log 2>&1 || { - touch "$failFile" - die "$g:$a: failed to fetch ref '$ref' from remote $remote" - } - printf . - - # Adjust component version to 999. - mvn versions:set -DnewVersion=999 >> surgery.log || { - touch "$failFile" - die "$g:$a: failed to adjust pom.xml version" - } - printf . - if [ -f gav ] - then - mv gav gav.prehacks - sed -E "s;:[^:]*$;:999;" gav.prehacks > gav && changed gav.prehacks gav || { - touch "$failFile" - die "$g:$a: failed to adjust gav version" - } - fi - printf . - - # Install changed component into the local repo cache. - mvn -Denforcer.skip -Dmaven.test.skip install >> surgery.log || { - touch "$failFile" - die "$g:$a: failed to build and install component" - } - printf . - - # Adjust component version to 999 in melting pot's version-pins.xml. - cd "$meltingPotDir" - test -f "$versionPins.prehacks" || cp "$versionPins" "$versionPins.prehacks" || { - touch "$failFile" - die "$g:$a: failed to back up $versionPins" - } - printf . - echo "$a" | grep -q '^[0-9]' && aa="_$a" || aa="$a" - mv -f "$versionPins" "$versionPins.tmp" && - sed -E "s;<\($g\\.$a\|$aa\)\\.version>[^<]*;<\1.version>999;g" "$versionPins.tmp" > "$versionPins" && - changed "$versionPins.tmp" "$versionPins" || - { - touch "$failFile" - die "$g:$a: failed to adjust component version in $versionPins" - } - printf . - - # Add component to the build list in melt.sh (if not already present). - grep -q "\b$g/$a\b" "$meltScript" || { - test -f "$meltScript.prehacks" || cp "$meltScript" "$meltScript.prehacks" - mv -f "$meltScript" "$meltScript.tmp" && - perl -0777 -pe 's;\n+do\n;\n '"$g/$a"' \\$&;igs' "$meltScript.tmp" > "$meltScript" - } || { - touch "$failFile" - die "$g:$a: failed to add component to the build list in $meltScript" - } - printf ".\n" -done -rm -f "$versionPins.tmp" "$meltScript.tmp" -test ! -f "$failFile" || - die "Failed to hack in changed components!" - -sectionStart 'Adjusting the melting pot: version-pins.xml configuration' - -cp "$versionPins" "$versionPins.original" && - -# HACK: Remove known-duplicate short version properties, keeping -# the short version declaration only for the more common groupId. -# E.g.: org.antlr:antlr is preferred over antlr:antlr, so we set -# antlr.version to match org.antlr:antlr, not antlr:antlr. -mv -f "$versionPins" "$versionPins.tmp" && -sed -E 's;(<('"$shortVersionClashes"')\.version>[^ ]*) <[^ ]*;\1;' "$versionPins.tmp" > "$versionPins" && - changed "$versionPins.tmp" "$versionPins" || - die 'Error adjusting melting pot version pins! [1]' - -# HACK: Add non-standard version properties used prior to -# pom-scijava 32.0.0-beta-1; see d0bf752070d96a2613c42e4e1ab86ebdd07c29ee. -mv -f "$versionPins" "$versionPins.tmp" && -sed -E 's; ([^<]*);& \1;' "$versionPins.tmp" > "$versionPins" && - changed "$versionPins.tmp" "$versionPins" && -mv -f "$versionPins" "$versionPins.tmp" && -sed -E 's; ([^<]*);& \2;' "$versionPins.tmp" > "$versionPins" && - changed "$versionPins.tmp" "$versionPins" || - die 'Error adjusting melting pot version pins! [2]' - -# HACK: Add non-standard net.imagej:ij version property used prior to -# pom-scijava 28.0.0; see 7d2cc442b107b3ac2dcb799d282f2c0b5822649d. -mv -f "$versionPins" "$versionPins.tmp" && -sed -E 's; ([^<]*);& \1;' "$versionPins.tmp" > "$versionPins" && - changed "$versionPins.tmp" "$versionPins" || - die 'Error adjusting melting pot version pins! [3]' - -rm "$versionPins.tmp" || - die 'Error adjusting melting pot version pins! [4]' - -sectionEnd # Adjusting the melting pot: version-pins.xml configuration - -sectionStart 'Adjusting the melting pot: build.sh script' - -cp "$buildScript" "$buildScript.original" && - -# HACK: Add explicit kotlin.version to match our pom-scijava-base. -# Otherwise, components built on older pom-scijava-base will have -# mismatched kotlin component versions. The sed expression avoids -# a bug in mvn's batch mode that results in [0m[0m still -# appearing as a leading ANSI sequence when echoing the property. -kotlinVersion=$( - mvn -B -U -q -Denforcer.skip=true -Dexec.executable=echo \ - -Dexec.args='${kotlin.version}' --non-recursive validate exec:exec 2>&1 | - head -n1 | sed 's;\(.\[[0-9]m\)*;;') && -# TEMP: Also fix the version of maven-enforcer-plugin, to prevent n5 from -# overriding it with a too-old version. Even though we pass enforcer.skip, -# so that the enforcer plugin does not actually do any checking, this version -# mismatch still triggers a problem: -# -# [ERROR] Failed to execute goal -# org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce -# (enforce-rules) on project n5-blosc: Unable to parse configuration of -# mojo org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce -# for parameter banDuplicateClasses: Cannot create instance of interface -# org.apache.maven.enforcer.rule.api.EnforcerRule: -# org.apache.maven.enforcer.rule.api.EnforcerRule.() -> [Help 1] -# -# Once n5 components stop doing that version pin, we can remove this here. -enforcerVersion=$( - mvn -B -U -q -Denforcer.skip=true -Dexec.executable=echo \ - -Dexec.args='${maven-enforcer-plugin.version}' --non-recursive validate exec:exec 2>&1 | - head -n1 | sed 's;\(.\[[0-9]m\)*;;') && -mv -f "$buildScript" "$buildScript.tmp" && -sed -E "s;mvn .*-Denforcer.skip;& -Dmaven-enforcer-plugin.version=$enforcerVersion -Dkotlin.version=$kotlinVersion;" "$buildScript.tmp" > "$buildScript" && - changed "$buildScript.tmp" "$buildScript" && - -chmod +x "$buildScript" && -rm "$buildScript.tmp" || - die 'Error adjusting melting pot build script!' - -sectionEnd # Adjusting the melting pot: build.sh script - -sectionStart 'Adjusting the melting pot: component POMs' - -# HACK: Adjust component POMs to satisfy Maven HTTPS strictness. -find "$meltingPotDir" -name pom.xml | - while read pom -do - mv "$pom" "$pom.original" && - sed -E -e 's_(https?://maven.imagej.net|http://maven.scijava.org)_https://maven.scijava.org_g' \ - -e 's_http://maven.apache.org/xsd_https://maven.apache.org/xsd_g' "$pom.original" > "$pom" || - die "Failed to adjust $pom" -done - -# HACK: Make component POMs extend the same version of pom-scijava -# being tested. This reduces dependency skew for transitively inherited -# components that were not managed at the time of that component release. -find "$meltingPotDir" -name pom.xml | while read pom -do - perl -0777 -i -pe 's/(\s*org.scijava<\/groupId>\s*pom-scijava<\/artifactId>\s*)[^\n]*/${1}999-mega-melt<\/version>/igs' "$pom" -done - -sectionEnd # Adjusting the melting pot: component POMs - -sectionStart 'Adjusting the melting pot: melt.sh script' - -# HACK: Skip tests for projects with known problems. - -mv "$meltScript" "$meltScript.original" && -sed 's_\s*"$dir/build.sh"_\ -# HACK: If project is on the skipTests list, then skip the tests.\ -buildFlags=-Djava.awt.headless=true\ -grep -qxF "$f" $dir/skipTests.txt \&\& buildFlags=-DskipTests\ -\ -& $buildFlags_' "$meltScript.original" > "$meltScript" && -chmod +x "$meltScript" || - die "Failed to adjust $meltScript" - -sectionEnd # Adjusting the melting pot: melt.sh script - -sectionStart 'Adjusting the melting pot: unit test hacks' - -# Remove flaky tests. - -# CachedOpEnvironmentTest fails intermittently. Of course, it should be -# somehow fixed in imagej-ops. But for now, let's not let it ruin the melt. -rm -f "$meltingPotDir/net.imagej/imagej-ops/src/test/java/net/imagej/ops/cached/CachedOpEnvironmentTest.java" - -# In org.janelia.saalfeldlab.n5.metadata.ome.ngff.v04.WriteAxesTests.testXYT: -# java.util.NoSuchElementException: No value present -rm -f "$meltingPotDir/org.janelia.saalfeldlab/n5-ij/src/test/java/org/janelia/saalfeldlab/n5/metadata/ome/ngff/v04/WriteAxesTests.java" - -# Avoid notNull assertion error at -# org.janelia.saalfeldlab.n5.universe.metadata.MetadataTests.testEmptyBase(MetadataTests.java:346) -rm -f "$meltingPotDir/org.janelia.saalfeldlab/n5-universe/src/test/java/org/janelia/saalfeldlab/n5/universe/metadata/MetadataTests.java" - -# In org.janelia.saalfeldlab.n5.zarr.ZarrCachedFSTest.cacheBehaviorTest: -# arrays first differed at element [0]; expected:<[a]> but was:<[c]> -rm -f "$meltingPotDir/org.janelia.saalfeldlab/n5-zarr/src/test/java/org/janelia/saalfeldlab/n5/zarr/ZarrCachedFSTest.java" -# Note: The above test is fixed with saalfeldlab/n5-zarr@e7edcec3, -# but the fix is only available in n5-zarr 2.0.0-alpha-1, and we -# do not want to update the SciJava BOM to the alpha version. - -# In sc.fiji.labkit.ui.plugin.CalculateProbabilityMapWithLabkitIJ1PluginTest.test: -# Macro Error: "probability map for blobs.tif" not found in line 4 -# selectImage ( <"probability map for blobs.tif"> ) ; -# java.lang.RuntimeException: Macro canceled -# at ij.macro.Interpreter.error(Interpreter.java:1403) -# at ij.macro.Functions.selectImage(Functions.java:3225) -# at ij.macro.Functions.doFunction(Functions.java:136) -# at ij.macro.Interpreter.doStatement(Interpreter.java:280) -# at ij.macro.Interpreter.doStatements(Interpreter.java:266) -# at ij.macro.Interpreter.run(Interpreter.java:162) -# at ij.macro.Interpreter.run(Interpreter.java:92) -# at sc.fiji.labkit.ui.plugin.CalculateProbabilityMapWithLabkitIJ1PluginTest.test(CalculateProbabilityMapWithLabkitIJ1PluginTest.java:65) -rm -f "$meltingPotDir/sc.fiji/labkit-ui/src/test/java/sc/fiji/labkit/ui/plugin/CalculateProbabilityMapWithLabkitIJ1PluginTest.java" - -# Skip testing of components with non-working tests. - -# java.lang.AssertionError -# at org.scijava.minimaven.BasicTest.testClassifiers(BasicTest.java:216) -echo "org.scijava/minimaven" >> "$skipTestsFile" || - die "Failed to generate $skipTestsFile" - -# Error while checking the CLIJ2 installation: null -echo "sc.fiji/labkit-pixel-classification" >> "$skipTestsFile" || - die "Failed to generate $skipTestsFile" - -sectionEnd # Adjusting the melting pot: unit test hacks - -# Run the melting pot now, unless -s flag was given. -doMelt=t -for arg in "$@" -do - if [ "$arg" = '-s' ] || [ "$arg" = '--skipBuild' ] - then - doMelt= - fi -done -if [ "$doMelt" ] -then - echo - cd "$meltingPotDir" - sh melt.sh - meltResult=$? - - # Dump logs for failing builds and/or tests. - for d in */* - do - test -d "$d" || continue - - # Check for failing build log. - buildLog="$d/build.log" - if [ -f "$buildLog" ] - then - if grep -qF 'BUILD FAILURE' "$buildLog" - then - echo - echo "[$buildLog]" - cat "$buildLog" - fi - fi - - # Check for failing test logs. - testLogsDir="$dir/target/surefire-reports" - if [ -d "$testLogsDir" ] - then - find "$testLogsDir" -name '*.txt' | - while read report - do - if grep -qF 'FAILURE!' "$report" - then - echo - echo "[$report]" - cat "$report" - fi - done - fi - done - - # Terminate the script with same exit code if the melt failed. - test "$meltResult" -eq 0 || exit "$meltResult" -else - echo && - echo 'Melting the pot... SKIPPED' -fi - -# Complete! -echo -echo 'All checks succeeded! :-D' From fdc0b4f62210b7b93b6c3f1c4602a3bc05665c66 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Mon, 1 Jun 2026 14:58:10 -0500 Subject: [PATCH 241/294] pombast: remove overridden MaMuT badge It confirms to standard naming now. --- pombast.toml | 3 --- 1 file changed, 3 deletions(-) diff --git a/pombast.toml b/pombast.toml index 613fd82..654b6b1 100644 --- a/pombast.toml +++ b/pombast.toml @@ -885,9 +885,6 @@ last-vetted = "20230309000000" ci-build = "build-main" last-vetted = "20230309000000" -[components."sc.fiji:MaMuT"] -ci-build = "build-main" - [components."sc.fiji:Manual_Tracking"] ci-build = "build-main" last-vetted = "20230309000000" From 41dc88a352c96376ec3046a61e2cf36088a10c1c Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Mon, 8 Jun 2026 11:18:54 -0500 Subject: [PATCH 242/294] pombast: improve the melt action Due to some components targeting Java 21+, the scijava.jvm.version property for the aggregated melting pot also needs to be set to 21, to satisfy the enforcer's bytecode checks across all components. For melt validation, we do not need to exclude very old components or multi-module-structured components, only components containing duplicate classes that we intentionally allow within the BOM. Reasons for these allowances are commented in the TOML config. --- pombast.toml | 60 +++++++--------------------------------------------- 1 file changed, 8 insertions(+), 52 deletions(-) diff --git a/pombast.toml b/pombast.toml index 654b6b1..b3c6a36 100644 --- a/pombast.toml +++ b/pombast.toml @@ -64,67 +64,23 @@ includes = [ ] [melt] -# Some managed components require Java 21+. So it makes sense to melt with that version of Java. -# Unfortunately, the scijava.jvm.version is currently set to 11 by default. -# So even though OpenJDK 21 is being used to run Maven, the enforcer plugin still -# complains when encountering any Java libraries with bytecode newer than 11. -# Setting scijava.jvm.version to 21 by default would avoid the issue, but... -# is that really a good idea? Setting to 11 seems like a nice baseline compromise right now. -java-version = 21 # Maximum Java version of all included component + deps. +# Some managed components require Java 21+, so we melt with that Java +# version. But pom-scijava sets scijava.jvm.version to 11 by default. +# So beyond just using OpenJDK 21 to run Maven, we also need to set the +# scijava.jvm.version property to target the right bytecode version. +# Otherwise, the enforcer complains about any Java libraries targeting >11. +java-version = 21 +properties = { "scijava.jvm.version" = "21" } + template = "pombast/mega-melt-template.xml" excludes = [ # TEMP: Exclude org.bytedeco:hdf5 until cisd:jhdf5 is gone. 'org.bytedeco:hdf5', - # TEMP: Skip components within multi-module reactors. - # Neither pombast nor release-version.sh understand multi- - # module repositories; release-version.sh needs to learn how - # to tag and release individual components from multi-module - # repos, so that when pombast shallow clones the repo at that - # tag and invokes a build, it will be building only the - # released component as it does with single-component repos. - 'org.scijava:scijava-collections', - 'org.scijava:scijava-common3', - 'org.scijava:scijava-concurrent', - 'org.scijava:scijava-discovery-test', - 'org.scijava:scijava-discovery', - 'org.scijava:scijava-function', - 'org.scijava:scijava-legacy', - 'org.scijava:scijava-meta', - 'org.scijava:scijava-ops-api', - 'org.scijava:scijava-ops-benchmarks', - 'org.scijava:scijava-ops-engine', - 'org.scijava:scijava-ops-ext-parser', - 'org.scijava:scijava-ops-flim', - 'org.scijava:scijava-ops-image', - 'org.scijava:scijava-ops-indexer', - 'org.scijava:scijava-ops-opencv', - 'org.scijava:scijava-ops-spi', - 'org.scijava:scijava-ops-tutorial', - 'org.scijava:scijava-priority', - 'org.scijava:scijava-progress', - 'org.scijava:scijava-struct', - 'org.scijava:scijava-taglets', - 'org.scijava:scijava-testutil', - 'org.scijava:scijava-types', - 'mpicbg:mpicbg', 'mpicbg:mpicbg_', - # NB: Skip artifacts requiring minimum Java version >11. - 'net.algart:algart-tiff', - 'org.morphonets:SNT', - # NB: Skip closed-source artifacts. - 'org.bonej:bonej-plus', # NB: The following artifacts have messy dependency trees. # Too many problems to test as part of the melt action. # See WARNING block in pom-scijava's pom.xml for details. 'net.imagej:imagej-server', 'org.apache.spark:spark-core_2.11', - # NB: Skip scijava forks of third-party projects. - # These are very stable, with few/no dependencies, and - # don't need to be retested as pom-scijava evolves. - 'org.scijava:j3dcore', - 'org.scijava:j3dutils', - 'org.scijava:jep', - 'org.scijava:junit-benchmarks', - 'org.scijava:vecmath', # NB: Skip alternate flavors of other managed components. 'org.jogamp.gluegen:gluegen', # uberjar flavor of gluegen-rt 'org.jogamp.jogl:jogl-all-noawt', # slimmed down flavor of jogl-all From d562d382e6b37415881b35d11cf5cb1e4e926d36 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Wed, 10 Jun 2026 13:04:17 -0500 Subject: [PATCH 243/294] Sort ImageJ2 component in correct alphabetic order --- pom.xml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/pom.xml b/pom.xml index 8b7d450..d31d5e8 100644 --- a/pom.xml +++ b/pom.xml @@ -513,11 +513,6 @@ - - 2.17.0 - ${imagej2.version} - ${imagej.version} - 1.54p ${imagej1.version} @@ -527,6 +522,11 @@ 2.0.0 ${ij1-patcher.version} + + 2.17.0 + ${imagej2.version} + ${imagej.version} + 2.1.1 ${imagej-common.version} @@ -2892,13 +2892,6 @@ - - - net.imagej - imagej - ${net.imagej.imagej.version} - - net.imagej @@ -2919,6 +2912,13 @@ ${net.imagej.ij1-patcher.version} + + + net.imagej + imagej + ${net.imagej.imagej.version} + + net.imagej From fc1f084d13654f7317986f1bfd8d7fb30ab6d772 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Wed, 10 Jun 2026 13:04:39 -0500 Subject: [PATCH 244/294] Manage versions of FLIMLib Java components * flimj-ops: 2.1.2 * flimj-ui: 2.0.0 * flimlib: 2.2.5 --- pom.xml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/pom.xml b/pom.xml index d31d5e8..33fb8e2 100644 --- a/pom.xml +++ b/pom.xml @@ -1208,6 +1208,15 @@ + + 2.1.2 + 2.0.0 + 2.2.5 + ${flimj-ops.version} + ${flimj-ui.version} + ${flimlib.version} + ${scijava.natives.classifier} + 1.6.4 ${MorphoLibJ.version} @@ -3951,6 +3960,29 @@ + + + flimlib + flimj-ops + ${flimlib.flimj-ops.version} + + + flimlib + flimj-ui + ${flimlib.flimj-ui.version} + + + flimlib + flimlib + ${flimlib.flimlib.version} + + + flimlib + flimlib + ${flimlib.flimlib.version} + ${scijava.natives.classifier.flimlib} + + fr.inra.ijpb From e916952afb1202d30dd89982f2d137f36bce6952 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Wed, 10 Jun 2026 13:39:43 -0500 Subject: [PATCH 245/294] Update component versions * scijava-search: 3.0.0 -> 3.0.1 * scripting-kotlin: 0.2.1 -> 1.0.0 * imagej-tensorflow: 1.1.8 -> 1.1.9 * scifio: 0.48.0 -> 0.49.0 * FilamentDetector: 2.0.1 -> 3.0.0 * OMEVisual: 2.0.0 -> 3.0.0 * mpicbg: 1.6.5 -> 1.6.6 * bigdataviewer-server: 3.1.2 -> 4.0.0 * TrackMate: 7.14.0 -> 8.0.0 * TrackMate-Cellpose: 0.1.2 -> 1.0.1 * TrackMate-CSVImporter: 3.1.4 -> 4.0.0 * TrackMate-Ilastik: 1.4.0 -> 2.0.0 * TrackMate-MorphoLibJ: 1.2.1 -> 2.0.0 * TrackMate-Skeleton: 2.0.3 -> 3.0.0 * TrackMate-StarDist: 1.2.1 -> 2.0.0 * TrackMate-Weka: 1.3.1 -> 2.0.0 * BigStitcher: 2.5.2 -> 2.6.1 * multiview-reconstruction: 7.0.6 -> 9.0.0 * MaMuT: 7.1.1 -> 8.0.1 --- pom.xml | 38 +++++++++++++++++++------------------- pombast.toml | 8 +++++++- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/pom.xml b/pom.xml index 33fb8e2..ad79a4f 100644 --- a/pom.xml +++ b/pom.xml @@ -428,7 +428,7 @@ ${scijava-plugins-text-plain.version} - 3.0.0 + 3.0.1 ${scijava-search.version} @@ -484,7 +484,7 @@ ${scripting-jython.version} - 0.2.1 + 1.0.0 ${scripting-kotlin.version} @@ -600,7 +600,7 @@ ${imagej-server.version} - 1.1.8 + 1.1.9 ${imagej-tensorflow.version} @@ -672,7 +672,7 @@ - 0.48.0 + 0.49.0 ${scifio.version} @@ -806,7 +806,7 @@ 3.2.0 ${Fiji_Plugins.version} - 2.0.1 + 3.0.0 ${FilamentDetector.version} 2.0.1 @@ -887,7 +887,7 @@ 3.0.1 ${Multi_Kymograph.version} - 2.0.0 + 3.0.0 ${OMEVisual.version} 2.0.0 @@ -1042,7 +1042,7 @@ ${bigwarp_fiji.version} - 1.6.5 + 1.6.6 ${mpicbg.version} ${mpicbg.version} ${mpicbg_.version} @@ -1062,7 +1062,7 @@ ${bigdataviewer-core.version} - 3.1.2 + 4.0.0 ${bigdataviewer-server.version} @@ -1088,15 +1088,15 @@ - 7.14.0 + 8.0.0 ${TrackMate.version} - 0.1.2 + 1.0.1 ${TrackMate-Cellpose.version} - 3.1.4 + 4.0.0 ${TrackMate-CSVImporter.version} @@ -1110,11 +1110,11 @@ ${TrackMate-ExTrack.version} - 1.4.0 + 2.0.0 ${TrackMate-Ilastik.version} - 1.2.1 + 2.0.0 ${TrackMate-MorphoLibJ.version} @@ -1122,15 +1122,15 @@ ${TrackMate-Oneat.version} - 2.0.3 + 3.0.0 ${TrackMate-Skeleton.version} - 1.2.1 + 2.0.0 ${TrackMate-StarDist.version} - 1.3.1 + 2.0.0 ${TrackMate-Weka.version} @@ -1241,8 +1241,8 @@ ${clijx-weka_.version} - 2.5.2 - 7.0.6 + 2.6.1 + 9.0.0 0.2.0 ${BigStitcher.version} ${multiview-reconstruction.version} @@ -1266,7 +1266,7 @@ ${SNT.version} - 7.1.1 + 8.0.1 ${MaMuT.version} diff --git a/pombast.toml b/pombast.toml index b3c6a36..e203711 100644 --- a/pombast.toml +++ b/pombast.toml @@ -327,6 +327,9 @@ last-vetted = "20230309000000" [components."net.imglib2:imglib2-mesh"] java-version = 11 +[components."net.preibisch:multiview-reconstruction"] +java-version = 11 + [components."net.preibisch:multiview-simulation"] ci-build = "build-main" @@ -764,6 +767,9 @@ ci-build = "build-main" ci-build = "build-main" last-vetted = "20230309000000" +[components."sc.fiji:FilamentDetector"] +java-version = 11 + [components."sc.fiji:FlowJ_"] ci-build = "build-main" last-vetted = "20230309000000" @@ -850,7 +856,7 @@ ci-build = "build-main" last-vetted = "20230309000000" [components."sc.fiji:OMEVisual"] -last-vetted = "20230309000000" +java-version = 11 [components."sc.fiji:PIV_analyser"] ci-build = "build-main" From 9a5351a2e18024021a2319c15c5f826870b307fb Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Thu, 11 Jun 2026 16:14:11 -0500 Subject: [PATCH 246/294] pombast: allow bigvolumeviewer to use of Unsafe It has a hack in its own POM to configure the maven-compiler-plugin to run in a mode that allows use of sun.misc.Unsafe. But pombast's execution does not honor the hack. Fortunately, setting maven.compiler.release to empty disables the plugin's passing of the --release flag, which is what triggers the use of ct.sym, the sealed API catalog for Java 8's public API. --- pombast.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pombast.toml b/pombast.toml index e203711..c632fb6 100644 --- a/pombast.toml +++ b/pombast.toml @@ -991,6 +991,10 @@ ci-build = "build-main" [components."sc.fiji:bigdataviewer_fiji"] ci-build = "build-main" +[components."sc.fiji:bigvolumeviewer"] +# NOTE: Using the release flag disallows access to sun.misc.Unsafe. +properties = { "maven.compiler.release" = "" } + [components."sc.fiji:bij"] ci-build = "build-main" last-vetted = "20230309000000" From 13f9bdbc227b977e69acafc6a2b9d0331ed078b6 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Sat, 13 Jun 2026 13:07:19 -0500 Subject: [PATCH 247/294] Update jgrapht: 1.4.0 -> 1.5.2 This increases its minimum bytecode target from Java 8 to 11. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ad79a4f..6cb47e0 100644 --- a/pom.xml +++ b/pom.xml @@ -2036,7 +2036,7 @@ ${jfreesvg.version} - 1.4.0 + 1.5.2 ${jgrapht.version} ${jgrapht.version} ${jgrapht.version} From 55ee95cec84598937c6db500bcfa8043b36fbd9a Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Sat, 13 Jun 2026 13:24:09 -0500 Subject: [PATCH 248/294] CI: pass latest smelt.json to status command Co-authored-by: Claude Opus 4.8 --- .github/status.sh | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/.github/status.sh b/.github/status.sh index 81186a0..a5587e7 100755 --- a/.github/status.sh +++ b/.github/status.sh @@ -1,6 +1,21 @@ #!/bin/sh uv tool install "git+https://github.com/scijava/pombast.git" -pombast status . + +# Pull the most recently published smelt results so that `pombast status` can +# classify each available version bump by its bytecode-floor blast radius +# (flat / local / cascading / excluded). This is the same smelt.json the status +# page itself fetches client-side, so the generator and the browser agree. +# +# Best-effort: if smelt.json is not published yet (or the fetch fails), status +# still runs -- just without the bytecode classification overlay. +smelt_arg="" +if curl -fsSLO https://status.scijava.org/smelt.json; then + smelt_arg="--smelt smelt.json" +else + echo "== smelt.json unavailable; running status without classification ==" +fi + +pombast status $smelt_arg . pombast badges -o badges.json . pombast team . .github/publish.sh "Update status reports" index.html badges.json team.html From c31af769376cd9f7ab1bc41e04d698a96216ccdb Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Sat, 13 Jun 2026 13:58:24 -0500 Subject: [PATCH 249/294] CI: feed smelt.json into status and cache cjdk/jgo/m2 status.sh now pulls the most recent smelt.json straight from the status.scijava.org gh-pages branch (raw.githubusercontent.com) and passes it to `pombast status --smelt`, so version bumps are classified by bytecode-floor blast radius. Reading the branch directly avoids waiting on the asynchronous GitHub Pages deploy. Best-effort: status still runs if smelt.json is absent. status.yml gains a workflow_run trigger on the build workflow, guarded to master pushes (the only builds that republish smelt.json), so the status page refreshes its classification immediately instead of waiting for the daily cron. The direct push trigger is dropped since build-then-status now covers master pushes with the freshly published smelt.json. Caching: - build.yml: add ~/.cache/cjdk (downloaded JDKs + Maven) and ~/.cache/jgo (per-artifact bytecode-scan results) to the build cache. cjdk is the big win, since smelt provisions a JDK per component. - status.yml: add ~/.cache/jgo and ~/.m2/repository so the daily bump classification stops re-downloading and re-scanning candidate JARs each run. setup-java stays: its JDK 11+fx serves the Maven CI deploy build (ci-build.sh), which is independent of pombast's cjdk-provisioned JDKs. Co-Authored-By: Claude Opus 4.8 --- .github/status.sh | 8 +++++--- .github/workflows/build.yml | 13 +++++++++++-- .github/workflows/status.yml | 30 +++++++++++++++++++++++++----- 3 files changed, 41 insertions(+), 10 deletions(-) diff --git a/.github/status.sh b/.github/status.sh index a5587e7..4e212d3 100755 --- a/.github/status.sh +++ b/.github/status.sh @@ -3,13 +3,15 @@ uv tool install "git+https://github.com/scijava/pombast.git" # Pull the most recently published smelt results so that `pombast status` can # classify each available version bump by its bytecode-floor blast radius -# (flat / local / cascading / excluded). This is the same smelt.json the status -# page itself fetches client-side, so the generator and the browser agree. +# (flat / local / cascading / excluded). Read straight from the gh-pages branch +# rather than https://status.scijava.org/, so we pick up a freshly committed +# smelt.json immediately instead of waiting on the asynchronous Pages deploy. # # Best-effort: if smelt.json is not published yet (or the fetch fails), status # still runs -- just without the bytecode classification overlay. smelt_arg="" -if curl -fsSLO https://status.scijava.org/smelt.json; then +smelt_url=https://raw.githubusercontent.com/scijava/status.scijava.org/gh-pages/smelt.json +if curl -fsSLO "$smelt_url"; then smelt_arg="--smelt smelt.json" else echo "== smelt.json unavailable; running status without classification ==" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a29e656..4624a36 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -54,7 +54,13 @@ jobs: - name: Restore pombast cache uses: actions/cache/restore@v4 with: - path: ~/.cache/pombast + # pombast: success/timestamp caches; cjdk: downloaded JDKs + Maven; + # jgo: per-artifact bytecode-scan results. (~/.m2 is cached above by + # setup-java's cache: 'maven'.) + path: | + ~/.cache/pombast + ~/.cache/cjdk + ~/.cache/jgo key: ${{ runner.os }}-pombast-build - name: Run pombast melt+smelt commands @@ -72,7 +78,10 @@ jobs: if: always() uses: actions/cache/save@v4 with: - path: ~/.cache/pombast + path: | + ~/.cache/pombast + ~/.cache/cjdk + ~/.cache/jgo key: ${{ runner.os }}-pombast-build - name: Publish smelt results diff --git a/.github/workflows/status.yml b/.github/workflows/status.yml index c14eaf3..0243292 100644 --- a/.github/workflows/status.yml +++ b/.github/workflows/status.yml @@ -4,13 +4,23 @@ on: schedule: # Run daily at 0500 UTC. - cron: '0 5 * * *' - push: - branches: - - master + # Run right after the build workflow publishes a fresh smelt.json, so the + # status page picks up new bytecode classification immediately rather than + # waiting for the next daily run. The job-level guard below restricts this to + # master pushes, the only builds that republish smelt.json. + workflow_run: + workflows: [build] + types: [completed] jobs: status: runs-on: ubuntu-latest + # Scheduled runs always proceed. workflow_run runs only when the triggering + # build was a push to master (i.e. one that republished smelt.json). + if: >- + github.event_name != 'workflow_run' || + (github.event.workflow_run.event == 'push' && + github.event.workflow_run.head_branch == 'master') permissions: actions: write # needed to delete and re-save caches @@ -26,7 +36,14 @@ jobs: - name: Restore pombast cache uses: actions/cache/restore@v4 with: - path: ~/.cache/pombast + # pombast: status caches; jgo: per-artifact bytecode-scan results; + # ~/.m2: candidate JARs that bump classification downloads to scan. + # Persisting these keeps the daily classification from re-downloading + # and re-scanning every candidate on each run. + path: | + ~/.cache/pombast + ~/.cache/jgo + ~/.m2/repository key: ${{ runner.os }}-pombast-status # The monoqueue library is used by pombast to read GitHub issues. @@ -53,7 +70,10 @@ jobs: if: always() uses: actions/cache/save@v4 with: - path: ~/.cache/pombast + path: | + ~/.cache/pombast + ~/.cache/jgo + ~/.m2/repository key: ${{ runner.os }}-pombast-status - name: Delete old monoqueue cache From 8526f78b877fa66a340bd1a84c2fea4ec72d2541 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Sat, 13 Jun 2026 21:50:04 -0500 Subject: [PATCH 250/294] Update CI badge locations * scijava-search: build-main -> build * scripting-groovy: build-main -> build * scripting-kotlin: build-main -> build --- pombast.toml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/pombast.toml b/pombast.toml index c632fb6..f3ea774 100644 --- a/pombast.toml +++ b/pombast.toml @@ -585,9 +585,6 @@ last-vetted = "20230309000000" [components."org.scijava:scijava-plugins-text-plain"] ci-build = "build-main" -[components."org.scijava:scijava-search"] -ci-build = "build-main" - [components."org.scijava:scijava-table"] ci-build = "build-main" @@ -609,9 +606,6 @@ ci-build = "build-main" [components."org.scijava:scripting-clojure"] ci-build = "build-main" -[components."org.scijava:scripting-groovy"] -ci-build = "build-main" - [components."org.scijava:scripting-javascript"] ci-build = "build-main" @@ -622,9 +616,6 @@ last-vetted = "20230309000000" [components."org.scijava:scripting-jython"] ci-build = "build-main" -[components."org.scijava:scripting-kotlin"] -ci-build = "build-main" - [components."org.scijava:scripting-matlab"] ci-build = "build-main" last-vetted = "20230309000000" From 20aca6d774769978cff58c8d4c853c003aaef793 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Sun, 14 Jun 2026 19:46:21 -0500 Subject: [PATCH 251/294] Update scripting-java: 1.0.0 -> 1.0.1 This fixes a bug when using the Java script language with Java 11 (and only 11 -- with 8, 17, and 21, it was working with 1.0.0). But we need this fix to smelt imagej-legacy, which is built and tested with Java 11, and makes use of the Java script language in its tests. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6cb47e0..50059ef 100644 --- a/pom.xml +++ b/pom.xml @@ -468,7 +468,7 @@ ${scripting-groovy.version} - 1.0.0 + 1.0.1 ${scripting-java.version} From 27bd2fb9cf3e264f2a0224143556f048dadeea0e Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Mon, 15 Jun 2026 10:51:27 -0500 Subject: [PATCH 252/294] pombast: skip slow labkit-ui tests --- pombast.toml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pombast.toml b/pombast.toml index f3ea774..32a3de5 100644 --- a/pombast.toml +++ b/pombast.toml @@ -215,7 +215,13 @@ skip-tests = [ # at ij.macro.Interpreter.run(Interpreter.java:162) # at ij.macro.Interpreter.run(Interpreter.java:92) # at sc.fiji.labkit.ui.plugin.CalculateProbabilityMapWithLabkitIJ1PluginTest.test(CalculateProbabilityMapWithLabkitIJ1PluginTest.java:65) -"sc.fiji:labkit-ui" = ["sc.fiji.labkit.ui.plugin.CalculateProbabilityMapWithLabkitIJ1PluginTest"] +"sc.fiji:labkit-ui" = [ + "sc.fiji.labkit.ui.plugin.CalculateProbabilityMapWithLabkitIJ1PluginTest", # Failing (see above) + "sc.fiji.labkit.ui.GarbageCollectionTest", # Too slow (7 s) + "sc.fiji.labkit.ui.plugin.LabkitProbabilityMapForImagesInDirectoryPluginTest", # Too slow (65 s) + "sc.fiji.labkit.ui.plugin.SegmentRGBImageTest", # Too slow (35 s) + "sc.fiji.labkit.ui.segmentation.SegmentationToolTest", # Too slow (34 s) +] [components."fr.inra.ijpb:MorphoLibJ_"] ci-build = "build-main" From 30ee18990c7fd5434d3d258e3986317b89cdac43 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Mon, 15 Jun 2026 10:53:09 -0500 Subject: [PATCH 253/294] Update minimaven: 2.2.2 -> 2.2.3 This makes MiniMaven work again with Maven Central's HTTPS-only policy. --- pom.xml | 2 +- pombast.toml | 7 ------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index 50059ef..6984b14 100644 --- a/pom.xml +++ b/pom.xml @@ -360,7 +360,7 @@ ${junit-benchmarks.version} - 2.2.2 + 2.2.3 ${minimaven.version} diff --git a/pombast.toml b/pombast.toml index 32a3de5..efcfbc0 100644 --- a/pombast.toml +++ b/pombast.toml @@ -174,10 +174,6 @@ excludes = [ 'org.scijava:scijava-types', ] skip-tests = [ - # java.lang.AssertionError - # at org.scijava.minimaven.BasicTest.testClassifiers(BasicTest.java:216) - "org.scijava:minimaven", - # Error while checking the CLIJ2 installation: null "sc.fiji:labkit-pixel-classification", ] @@ -551,9 +547,6 @@ last-vetted = "20171225120000" ci-build = false last-vetted = "20180905120000" -[components."org.scijava:minimaven"] -last-vetted = "20230309000000" - [components."org.scijava:scijava-cache"] ci-build = "build-main" last-vetted = "20230309000000" From 1fa7fe217a65dba0bec1b1d7ecf97d178dbad85e Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Mon, 15 Jun 2026 12:14:49 -0500 Subject: [PATCH 254/294] Update bigdataviewer-core: 10.6.7 -> 10.6.11 This updates BDV to use N5 at version 4. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6984b14..26435e3 100644 --- a/pom.xml +++ b/pom.xml @@ -1058,7 +1058,7 @@ - 10.6.7 + 10.6.11 ${bigdataviewer-core.version} From 63d3770298a5eb0e465b875b49c9d43b2e87f1ce Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Mon, 15 Jun 2026 14:22:16 -0500 Subject: [PATCH 255/294] pombast: re-enable now-passing labkit-ui test --- pombast.toml | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/pombast.toml b/pombast.toml index efcfbc0..3fbc615 100644 --- a/pombast.toml +++ b/pombast.toml @@ -199,20 +199,7 @@ skip-tests = [ # but the fix is only available in n5-zarr 2.0.0-alpha-1, and we # do not want to update the SciJava BOM to the alpha version. -# In sc.fiji.labkit.ui.plugin.CalculateProbabilityMapWithLabkitIJ1PluginTest.test: -# Macro Error: "probability map for blobs.tif" not found in line 4 -# selectImage ( <"probability map for blobs.tif"> ) ; -# java.lang.RuntimeException: Macro canceled -# at ij.macro.Interpreter.error(Interpreter.java:1403) -# at ij.macro.Functions.selectImage(Functions.java:3225) -# at ij.macro.Functions.doFunction(Functions.java:136) -# at ij.macro.Interpreter.doStatement(Interpreter.java:280) -# at ij.macro.Interpreter.doStatements(Interpreter.java:266) -# at ij.macro.Interpreter.run(Interpreter.java:162) -# at ij.macro.Interpreter.run(Interpreter.java:92) -# at sc.fiji.labkit.ui.plugin.CalculateProbabilityMapWithLabkitIJ1PluginTest.test(CalculateProbabilityMapWithLabkitIJ1PluginTest.java:65) "sc.fiji:labkit-ui" = [ - "sc.fiji.labkit.ui.plugin.CalculateProbabilityMapWithLabkitIJ1PluginTest", # Failing (see above) "sc.fiji.labkit.ui.GarbageCollectionTest", # Too slow (7 s) "sc.fiji.labkit.ui.plugin.LabkitProbabilityMapForImagesInDirectoryPluginTest", # Too slow (65 s) "sc.fiji.labkit.ui.plugin.SegmentRGBImageTest", # Too slow (35 s) From f3d254484d3087b4b2ebc8582694acae1df2afff Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Mon, 15 Jun 2026 18:03:15 -0500 Subject: [PATCH 256/294] pombast: skip n5 aws-s3 and universe tests for now Hopefully only temporarily! --- pombast.toml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pombast.toml b/pombast.toml index 3fbc615..1b4a98d 100644 --- a/pombast.toml +++ b/pombast.toml @@ -176,6 +176,17 @@ excludes = [ skip-tests = [ # Error while checking the CLIJ2 installation: null "sc.fiji:labkit-pixel-classification", + + # TEMP: Until n5-aws-sw test failures are resolved; see also: + # https://github.com/scijava/pom-scijava/pull/304#issuecomment-4684120110 + # Errors are of the form: + # Unable to execute HTTP request: Connect to localhost:9000 + # [localhost/127.0.0.1] failed: Connection refused (Connection refused) + "org.janelia.saalfeldlab:n5-aws-s3", + + # TEMP: Until n5-universe test failures are resolved; see also: + # https://github.com/scijava/pom-scijava/pull/304#issuecomment-4684417746 + "org.janelia.saalfeldlab:n5-universe", ] [remove-tests] From 79d4ab7c429fe6321089889c84be23acb41614c5 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Mon, 15 Jun 2026 20:38:08 -0500 Subject: [PATCH 257/294] Remove bigdataviewer-vistools It merged into bigdataviewer-core as of 10.5.0. See: bigdataviewer/bigdataviewer-core@156cd8a80831c63eac8df81e232420581b17e7a9 --- pom.xml | 9 --------- pombast.toml | 3 --- 2 files changed, 12 deletions(-) diff --git a/pom.xml b/pom.xml index 26435e3..f397f11 100644 --- a/pom.xml +++ b/pom.xml @@ -1065,10 +1065,6 @@ 4.0.0 ${bigdataviewer-server.version} - - 1.0.0-beta-36 - ${bigdataviewer-vistools.version} - 6.4.1 ${bigdataviewer_fiji.version} @@ -3781,11 +3777,6 @@ bigdataviewer-server ${sc.fiji.bigdataviewer-server.version} - - sc.fiji - bigdataviewer-vistools - ${sc.fiji.bigdataviewer-vistools.version} - sc.fiji bigdataviewer_fiji diff --git a/pombast.toml b/pombast.toml index 1b4a98d..9a94e20 100644 --- a/pombast.toml +++ b/pombast.toml @@ -973,9 +973,6 @@ last-vetted = "20230309000000" [components."sc.fiji:bigdataviewer-server"] ci-build = "build-main" -[components."sc.fiji:bigdataviewer-vistools"] -ci-build = "build-main" - [components."sc.fiji:bigdataviewer_fiji"] ci-build = "build-main" From d459e6b3a3154021cce3ebefd0996e25bfb6f445 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Mon, 15 Jun 2026 20:45:12 -0500 Subject: [PATCH 258/294] Update bigvolumeviewer: 0.4.1 -> 0.5.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f397f11..18a0a51 100644 --- a/pom.xml +++ b/pom.xml @@ -1074,7 +1074,7 @@ ${bigdataviewer-n5.version} - 0.4.1 + 0.5.0 ${bigvolumeviewer.version} From 50ebc9bcc099883ed312e761e874614df44e98dd Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Wed, 17 Jun 2026 14:58:14 -0500 Subject: [PATCH 259/294] pombast: skip tests for org.bonej:bonej-plugins I filed a PR addressing the issue: https://github.com/bonej-org/BoneJ2/pull/414 But until it is merged and release, let's skip the problematic tests. --- pombast.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pombast.toml b/pombast.toml index 9a94e20..52c60b3 100644 --- a/pombast.toml +++ b/pombast.toml @@ -356,6 +356,8 @@ ci-build = "build-main" [components."org.bonej:bonej-plugins"] java-version = 11 +# TEMP: Until a BoneJ release exists incorporating bonej-org/BoneJ2#414. +properties = { "skipTests" = "true" } ci-build = "build-main" [components."org.bonej:bonej-utilities"] From 0b2c9bc904dd4ee658e6623b73b86d4f141f1067 Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Wed, 17 Jun 2026 15:09:28 -0400 Subject: [PATCH 260/294] Bump n5-related component versions * imglib2-algorithm: 0.18.1 -> 0.18.3 * imglib2-realtransform: 4.0.4 -> 4.0.5 * imglib2-label-multisets: 0.15.1 -> 0.15.2 * n5-aws-s3: 5.0.0 -> 5.0.1 * n5-universe: 3.0.1 -> 3.0.2 * multiview-simulation: 0.2.0 -> 0.3.1 The updated n5-aws-s3 and n5-universe libraries now skip any tests for which prereqs are not met locally. Signed-off-by: Curtis Rueden --- pom.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 18a0a51..296a44e 100644 --- a/pom.xml +++ b/pom.xml @@ -626,7 +626,7 @@ ${imglib2.version} - 0.18.1 + 0.18.3 ${imglib2-algorithm.version} @@ -658,7 +658,7 @@ ${imglib2-mesh.version} - 4.0.4 + 4.0.5 ${imglib2-realtransform.version} @@ -1155,7 +1155,7 @@ - 0.15.1 + 0.15.2 ${imglib2-label-multisets.version} @@ -1163,7 +1163,7 @@ ${n5.version} - 5.0.0 + 5.0.1 ${n5-aws-s3.version} @@ -1187,7 +1187,7 @@ ${n5-imglib2.version} - 3.0.1 + 3.0.2 ${n5-universe.version} @@ -1239,7 +1239,7 @@ 2.6.1 9.0.0 - 0.2.0 + 0.3.1 ${BigStitcher.version} ${multiview-reconstruction.version} ${multiview-simulation.version} From d0e609e8198e7508ecd4783d6c0ff15c9f93690d Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Wed, 17 Jun 2026 23:17:32 -0500 Subject: [PATCH 261/294] pombast: enable smelt of new scijava components The pombast software now handles components deployed as part of a multi-module reactor, so the new scijava components can finally be smelted properly. --- pombast.toml | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/pombast.toml b/pombast.toml index 52c60b3..14bd20c 100644 --- a/pombast.toml +++ b/pombast.toml @@ -141,37 +141,6 @@ excludes = [ 'org.scijava:jep', 'org.scijava:junit-benchmarks', 'org.scijava:vecmath', - # TEMP: Skip components within multi-module reactors. - # Neither pombast nor release-version.sh understand multi- - # module repositories; release-version.sh needs to learn how - # to tag and release individual components from multi-module - # repos, so that when pombast shallow clones the repo at that - # tag and invokes a build, it will be building only the - # released component as it does with single-component repos. - 'org.scijava:scijava-collections', - 'org.scijava:scijava-common3', - 'org.scijava:scijava-concurrent', - 'org.scijava:scijava-discovery-test', - 'org.scijava:scijava-discovery', - 'org.scijava:scijava-function', - 'org.scijava:scijava-legacy', - 'org.scijava:scijava-meta', - 'org.scijava:scijava-ops-api', - 'org.scijava:scijava-ops-benchmarks', - 'org.scijava:scijava-ops-engine', - 'org.scijava:scijava-ops-ext-parser', - 'org.scijava:scijava-ops-flim', - 'org.scijava:scijava-ops-image', - 'org.scijava:scijava-ops-indexer', - 'org.scijava:scijava-ops-opencv', - 'org.scijava:scijava-ops-spi', - 'org.scijava:scijava-ops-tutorial', - 'org.scijava:scijava-priority', - 'org.scijava:scijava-progress', - 'org.scijava:scijava-struct', - 'org.scijava:scijava-taglets', - 'org.scijava:scijava-testutil', - 'org.scijava:scijava-types', ] skip-tests = [ # Error while checking the CLIJ2 installation: null From 4bdb6dcfccebd18ab7b7ec16d70a2ce16814e0bf Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Wed, 17 Jun 2026 23:19:21 -0500 Subject: [PATCH 262/294] pombast: update n5-related test workarounds Some tests are fixed, others are now broken... good times! --- pombast.toml | 57 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/pombast.toml b/pombast.toml index 14bd20c..a41778b 100644 --- a/pombast.toml +++ b/pombast.toml @@ -145,17 +145,6 @@ excludes = [ skip-tests = [ # Error while checking the CLIJ2 installation: null "sc.fiji:labkit-pixel-classification", - - # TEMP: Until n5-aws-sw test failures are resolved; see also: - # https://github.com/scijava/pom-scijava/pull/304#issuecomment-4684120110 - # Errors are of the form: - # Unable to execute HTTP request: Connect to localhost:9000 - # [localhost/127.0.0.1] failed: Connection refused (Connection refused) - "org.janelia.saalfeldlab:n5-aws-s3", - - # TEMP: Until n5-universe test failures are resolved; see also: - # https://github.com/scijava/pom-scijava/pull/304#issuecomment-4684417746 - "org.janelia.saalfeldlab:n5-universe", ] [remove-tests] @@ -166,18 +155,40 @@ skip-tests = [ # In org.janelia.saalfeldlab.n5.metadata.ome.ngff.v04.WriteAxesTests.testXYT: # java.util.NoSuchElementException: No value present -"org.janelia.saalfeldlab:n5-ij" = ["org.janelia.saalfeldlab.n5.metadata.ome.ngff.v04.WriteAxesTests"] - -# Avoid notNull assertion error at -# org.janelia.saalfeldlab.n5.universe.metadata.MetadataTests.testEmptyBase(MetadataTests.java:346) -"org.janelia.saalfeldlab:n5-universe" = ["org.janelia.saalfeldlab.n5.universe.metadata.MetadataTests"] - -# In org.janelia.saalfeldlab.n5.zarr.ZarrCachedFSTest.cacheBehaviorTest: -# arrays first differed at element [0]; expected:<[a]> but was:<[c]> -"org.janelia.saalfeldlab:n5-zarr" = ["org.janelia.saalfeldlab.n5.zarr.ZarrCachedFSTest"] -# Note: The above test is fixed with saalfeldlab/n5-zarr@e7edcec3, -# but the fix is only available in n5-zarr 2.0.0-alpha-1, and we -# do not want to update the SciJava BOM to the alpha version. +#"org.janelia.saalfeldlab:n5-ij" = ["org.janelia.saalfeldlab.n5.metadata.ome.ngff.v04.WriteAxesTests"] + +# In org.janelia.saalfeldlab.n5.s3.AmazonS3UtilsTest.testUriParsing: +# SdkClient Unable to load region from any of the providers in the chain +# software.amazon.awssdk.regions.providers.DefaultAwsRegionProviderChain@427475a2: +# [software.amazon.awssdk.regions.providers.SystemSettingsRegionProvider@768b79db: +# Unable to load region from system settings. Region must be specified either +# via environment variable (AWS_REGION) or system property (aws.region)., +# software.amazon.awssdk.regions.providers.AwsProfileRegionProvider@3b59d246: +# No region provided in profile: default, +# software.amazon.awssdk.regions.providers.InstanceProfileRegionProvider@11b0cf30: +# Unable to contact EC2 metadata service.] +"org.janelia.saalfeldlab:n5-aws-s3" = ["org.janelia.saalfeldlab.n5.s3.AmazonS3UtilsTest"] + +# Skip n5-universe'slow tests. +"org.janelia.saalfeldlab:n5-universe" = [ + "org.janelia.saalfeldlab.n5.universe.storage.zarr.ZarrStorageTests", # Time elapsed: 1753 s + "org.janelia.saalfeldlab.n5.universe.storage.zarr.zarr2.Zarr2HttpFactoryTest", # Time elapsed: 947.2 s + "org.janelia.saalfeldlab.n5.universe.storage.n5.N5StorageTests", # Time elapsed: 843.5 s + "org.janelia.saalfeldlab.n5.universe.storage.n5.N5HttpFactoryTest", # Time elapsed: 832.3 s + "org.janelia.saalfeldlab.n5.universe.storage.zarr.zarr3.Zarr3HttpFactoryTest", # Time elapsed: 785.5 s + + # And these are all dependent on the above removed classes. :-( + "org.janelia.saalfeldlab.n5.universe.BackendStorageFormatTests", + "org.janelia.saalfeldlab.n5.universe.storage.n5.N5AmazonS3FactoryTest", + "org.janelia.saalfeldlab.n5.universe.storage.n5.N5FileSystemTest", + "org.janelia.saalfeldlab.n5.universe.storage.n5.N5GoogleCloudFactoryTest", + "org.janelia.saalfeldlab.n5.universe.storage.zarr.zarr2.Zarr2AmazonS3FactoryTest", + "org.janelia.saalfeldlab.n5.universe.storage.zarr.zarr2.Zarr2FileSystemTest", + "org.janelia.saalfeldlab.n5.universe.storage.zarr.zarr2.Zarr2GoogleCloudFactoryTest", + "org.janelia.saalfeldlab.n5.universe.storage.zarr.zarr3.Zarr3AmazonS3FactoryTest", + "org.janelia.saalfeldlab.n5.universe.storage.zarr.zarr3.Zarr3FileSystemTest", + "org.janelia.saalfeldlab.n5.universe.storage.zarr.zarr3.Zarr3GoogleCloudFactoryTest", +] "sc.fiji:labkit-ui" = [ "sc.fiji.labkit.ui.GarbageCollectionTest", # Too slow (7 s) From 02a603f268185f99009a4b4472a00e445e2441c7 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Wed, 17 Jun 2026 23:19:50 -0500 Subject: [PATCH 263/294] pombast: tweak comment --- pombast.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pombast.toml b/pombast.toml index a41778b..2ddb73a 100644 --- a/pombast.toml +++ b/pombast.toml @@ -150,7 +150,7 @@ skip-tests = [ [remove-tests] # CachedOpEnvironmentTest fails intermittently. Of course, it should be -# somehow fixed in imagej-ops. But for now, let's not let it ruin the melt. +# somehow fixed in imagej-ops. But for now, let's not let it ruin the smelt. "net.imagej:imagej-ops" = ["net.imagej.ops.cached.CachedOpEnvironmentTest"] # In org.janelia.saalfeldlab.n5.metadata.ome.ngff.v04.WriteAxesTests.testXYT: From 16ef03b7b4a99365689785557c931178d0901861 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Thu, 18 Jun 2026 10:40:57 -0500 Subject: [PATCH 264/294] pombast: update bonej components ci-build path --- pombast.toml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pombast.toml b/pombast.toml index 2ddb73a..1fe1db0 100644 --- a/pombast.toml +++ b/pombast.toml @@ -324,25 +324,20 @@ ci-build = "maven" [components."org.bonej:bonej-legacy-plugins_"] java-version = 11 -ci-build = "build-main" [components."org.bonej:bonej-legacy-util_"] java-version = 11 -ci-build = "build-main" [components."org.bonej:bonej-ops"] java-version = 11 -ci-build = "build-main" [components."org.bonej:bonej-plugins"] java-version = 11 # TEMP: Until a BoneJ release exists incorporating bonej-org/BoneJ2#414. properties = { "skipTests" = "true" } -ci-build = "build-main" [components."org.bonej:bonej-utilities"] java-version = 11 -ci-build = "build-main" [components."org.codehaus.groovy:groovy"] last-vetted = "20250101000000" From eb6afaa9e9b02c29e7d3a6960a890c6e3b1c6fb8 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Thu, 18 Jun 2026 22:05:36 -0500 Subject: [PATCH 265/294] pombast: update config for 2026-06-18 revision --- pombast.toml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pombast.toml b/pombast.toml index 1fe1db0..abdcd23 100644 --- a/pombast.toml +++ b/pombast.toml @@ -3,8 +3,9 @@ default-java-version = 8 repositories = ["scijava.public=https://maven.scijava.org/content/groups/public"] [status] +output = "../status.scijava.org/index.html" +smelt = "../status.scijava.org/smelt.json" rules = "rules.xml" -html = "../status.scijava.org/index.html" header = "pombast/header-status.html" footer = "pombast/footer-status.html" nexus-base = "https://maven.scijava.org" @@ -25,7 +26,7 @@ cuttable = [ ] [team] -html = "../status.scijava.org/team.html" +output = "../status.scijava.org/team.html" header = "pombast/header-team.html" footer = "pombast/footer-team.html" includes = [ @@ -45,6 +46,7 @@ includes = [ ] [badges] +output = "../status.scijava.org/badges.json" includes = [ "de.nanoimaging:*", "fr.inra.ijpb:*", @@ -113,6 +115,7 @@ excludes = [ ] [smelt] +output = "../status.scijava.org/smelt.json" includes = [ "ca.mcgill:*", "de.nanoimaging:*", From 5ca84e680c52fc2732a79b4796be2f9c94001b8a Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Fri, 19 Jun 2026 13:21:52 -0500 Subject: [PATCH 266/294] Update multiview-reconstruction: 9.0.0 -> 9.0.1 Realigned with n5 v4! --- pom.xml | 2 +- pombast.toml | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 296a44e..bc2673d 100644 --- a/pom.xml +++ b/pom.xml @@ -1238,7 +1238,7 @@ 2.6.1 - 9.0.0 + 9.0.1 0.3.1 ${BigStitcher.version} ${multiview-reconstruction.version} diff --git a/pombast.toml b/pombast.toml index abdcd23..584cd56 100644 --- a/pombast.toml +++ b/pombast.toml @@ -310,9 +310,6 @@ last-vetted = "20230309000000" [components."net.imglib2:imglib2-mesh"] java-version = 11 -[components."net.preibisch:multiview-reconstruction"] -java-version = 11 - [components."net.preibisch:multiview-simulation"] ci-build = "build-main" From 0f9f94cf7a14ce4bacaa7581870b5ee461d0abb5 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Fri, 19 Jun 2026 13:22:36 -0500 Subject: [PATCH 267/294] pombast: mega-melt-template -> melt-template The "mega" is a less important distinction now that the pombast infrastructure is in place. It's the melt operation of pombast, so for consistency, the template can be melt-template.xml. --- pombast.toml | 2 +- pombast/{mega-melt-template.xml => melt-template.xml} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename pombast/{mega-melt-template.xml => melt-template.xml} (100%) diff --git a/pombast.toml b/pombast.toml index 584cd56..99514ee 100644 --- a/pombast.toml +++ b/pombast.toml @@ -74,7 +74,7 @@ includes = [ java-version = 21 properties = { "scijava.jvm.version" = "21" } -template = "pombast/mega-melt-template.xml" +template = "pombast/melt-template.xml" excludes = [ # TEMP: Exclude org.bytedeco:hdf5 until cisd:jhdf5 is gone. 'org.bytedeco:hdf5', diff --git a/pombast/mega-melt-template.xml b/pombast/melt-template.xml similarity index 100% rename from pombast/mega-melt-template.xml rename to pombast/melt-template.xml From 4c2c73072269256d533e2724655f452e3eaf253b Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Fri, 19 Jun 2026 13:23:30 -0500 Subject: [PATCH 268/294] pombast: add FLIMLib artifacts to operations --- pombast.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pombast.toml b/pombast.toml index 99514ee..a17fb73 100644 --- a/pombast.toml +++ b/pombast.toml @@ -11,6 +11,7 @@ footer = "pombast/footer-status.html" nexus-base = "https://maven.scijava.org" cuttable = [ "de.nanoimaging:*", + "flimlib:*", "fr.inra.ijpb:*", "io.scif:*", "jitk:*", @@ -31,6 +32,7 @@ header = "pombast/header-team.html" footer = "pombast/footer-team.html" includes = [ "de.nanoimaging:*", + "flimlib:*", "fr.inra.ijpb:*", "io.scif:*", "jitk:*", @@ -49,6 +51,7 @@ includes = [ output = "../status.scijava.org/badges.json" includes = [ "de.nanoimaging:*", + "flimlib:*", "fr.inra.ijpb:*", "io.scif:*", "jitk:*", @@ -119,6 +122,7 @@ output = "../status.scijava.org/smelt.json" includes = [ "ca.mcgill:*", "de.nanoimaging:*", + "flimlib:*", "fr.inra.ijpb:*", "io.scif:*", "jitk:*", From bb4d4d09115618b94886427e7666b0d6519dd3b4 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Fri, 19 Jun 2026 13:52:50 -0500 Subject: [PATCH 269/294] pombast: better align included groupIds across ops --- pombast.toml | 102 +++++++++++++++++++++++++-------------------------- 1 file changed, 50 insertions(+), 52 deletions(-) diff --git a/pombast.toml b/pombast.toml index a17fb73..e1bd287 100644 --- a/pombast.toml +++ b/pombast.toml @@ -79,63 +79,61 @@ properties = { "scijava.jvm.version" = "21" } template = "pombast/melt-template.xml" excludes = [ - # TEMP: Exclude org.bytedeco:hdf5 until cisd:jhdf5 is gone. - 'org.bytedeco:hdf5', - # NB: The following artifacts have messy dependency trees. - # Too many problems to test as part of the melt action. - # See WARNING block in pom-scijava's pom.xml for details. - 'net.imagej:imagej-server', - 'org.apache.spark:spark-core_2.11', - # NB: Skip alternate flavors of other managed components. - 'org.jogamp.gluegen:gluegen', # uberjar flavor of gluegen-rt - 'org.jogamp.jogl:jogl-all-noawt', # slimmed down flavor of jogl-all - # NB: All the SWT platform JARs have the same classes. - # The current platform will be brought in transitively. - 'org.eclipse.swt:org.eclipse.swt.cocoa.macosx', - 'org.eclipse.swt:org.eclipse.swt.cocoa.macosx.x86_64', - 'org.eclipse.swt:org.eclipse.swt.gtk.aix.ppc', - 'org.eclipse.swt:org.eclipse.swt.gtk.aix.ppc64', - 'org.eclipse.swt:org.eclipse.swt.gtk.hpux.ia64', - 'org.eclipse.swt:org.eclipse.swt.gtk.linux.ppc', - 'org.eclipse.swt:org.eclipse.swt.gtk.linux.ppc64', - 'org.eclipse.swt:org.eclipse.swt.gtk.linux.s390', - 'org.eclipse.swt:org.eclipse.swt.gtk.linux.s390x', - 'org.eclipse.swt:org.eclipse.swt.gtk.linux.x86', - 'org.eclipse.swt:org.eclipse.swt.gtk.linux.x86_64', - 'org.eclipse.swt:org.eclipse.swt.gtk.solaris.sparc', - 'org.eclipse.swt:org.eclipse.swt.gtk.solaris.x86', - 'org.eclipse.swt:org.eclipse.swt.win32.win32.x86', - 'org.eclipse.swt:org.eclipse.swt.win32.win32.x86_64', - # NB: All SLF4J bindings have the same classes. - # We'll rely on logback-classic being present here. - 'org.slf4j:slf4j-jcl', - 'org.slf4j:slf4j-jdk14', - 'org.slf4j:slf4j-nop', - 'org.slf4j:slf4j-simple', - # NB: Cannot include both commons-logging and jcl-over-slf4j; - # see: http://www.slf4j.org/codes.html#jclDelegationLoop - 'org.slf4j:jcl-over-slf4j', + # TEMP: Exclude org.bytedeco:hdf5 until cisd:jhdf5 is gone. + 'org.bytedeco:hdf5', + # NB: The following artifacts have messy dependency trees. + # Too many problems to test as part of the melt action. + # See WARNING block in pom-scijava's pom.xml for details. + 'net.imagej:imagej-server', + 'org.apache.spark:spark-core_2.11', + # NB: Skip alternate flavors of other managed components. + 'org.jogamp.gluegen:gluegen', # uberjar flavor of gluegen-rt + 'org.jogamp.jogl:jogl-all-noawt', # slimmed down flavor of jogl-all + # NB: All the SWT platform JARs have the same classes. + # The current platform will be brought in transitively. + 'org.eclipse.swt:org.eclipse.swt.cocoa.macosx', + 'org.eclipse.swt:org.eclipse.swt.cocoa.macosx.x86_64', + 'org.eclipse.swt:org.eclipse.swt.gtk.aix.ppc', + 'org.eclipse.swt:org.eclipse.swt.gtk.aix.ppc64', + 'org.eclipse.swt:org.eclipse.swt.gtk.hpux.ia64', + 'org.eclipse.swt:org.eclipse.swt.gtk.linux.ppc', + 'org.eclipse.swt:org.eclipse.swt.gtk.linux.ppc64', + 'org.eclipse.swt:org.eclipse.swt.gtk.linux.s390', + 'org.eclipse.swt:org.eclipse.swt.gtk.linux.s390x', + 'org.eclipse.swt:org.eclipse.swt.gtk.linux.x86', + 'org.eclipse.swt:org.eclipse.swt.gtk.linux.x86_64', + 'org.eclipse.swt:org.eclipse.swt.gtk.solaris.sparc', + 'org.eclipse.swt:org.eclipse.swt.gtk.solaris.x86', + 'org.eclipse.swt:org.eclipse.swt.win32.win32.x86', + 'org.eclipse.swt:org.eclipse.swt.win32.win32.x86_64', + # NB: All SLF4J bindings have the same classes. + # We'll rely on logback-classic being present here. + 'org.slf4j:slf4j-jcl', + 'org.slf4j:slf4j-jdk14', + 'org.slf4j:slf4j-nop', + 'org.slf4j:slf4j-simple', + # NB: Cannot include both commons-logging and jcl-over-slf4j; + # see: http://www.slf4j.org/codes.html#jclDelegationLoop + 'org.slf4j:jcl-over-slf4j', ] [smelt] output = "../status.scijava.org/smelt.json" includes = [ - "ca.mcgill:*", - "de.nanoimaging:*", - "flimlib:*", - "fr.inra.ijpb:*", - "io.scif:*", - "jitk:*", - "mpicbg:*", - "net.imagej:*", - "net.imglib2:*", - "net.preibisch:*", - "org.bonej:*", - "org.janelia.saalfeldlab:*", - "org.janelia:*", - "org.morphonets:*", - "org.scijava:*", - "sc.fiji:*", + "de.nanoimaging:*", + "flimlib:*", + "fr.inra.ijpb:*", + "io.scif:*", + "jitk:*", + "mpicbg:*", + "net.imagej:*", + "net.imglib2:*", + "net.preibisch:*", + "org.bonej:*", + "org.janelia*:*", + "org.morphonets:*", + "org.scijava:*", + "sc.fiji:*", ] excludes = [ # NB: Skip closed-source artifacts. From e2087c8bd3dfed16bf630361e2b514e2ffe9a43b Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Fri, 19 Jun 2026 13:56:17 -0500 Subject: [PATCH 270/294] pombast: standardize on double quote symbols --- pombast.toml | 64 ++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/pombast.toml b/pombast.toml index e1bd287..5c9d1ba 100644 --- a/pombast.toml +++ b/pombast.toml @@ -80,41 +80,41 @@ properties = { "scijava.jvm.version" = "21" } template = "pombast/melt-template.xml" excludes = [ # TEMP: Exclude org.bytedeco:hdf5 until cisd:jhdf5 is gone. - 'org.bytedeco:hdf5', + "org.bytedeco:hdf5", # NB: The following artifacts have messy dependency trees. # Too many problems to test as part of the melt action. # See WARNING block in pom-scijava's pom.xml for details. - 'net.imagej:imagej-server', - 'org.apache.spark:spark-core_2.11', + "net.imagej:imagej-server", + "org.apache.spark:spark-core_2.11", # NB: Skip alternate flavors of other managed components. - 'org.jogamp.gluegen:gluegen', # uberjar flavor of gluegen-rt - 'org.jogamp.jogl:jogl-all-noawt', # slimmed down flavor of jogl-all + "org.jogamp.gluegen:gluegen", # uberjar flavor of gluegen-rt + "org.jogamp.jogl:jogl-all-noawt", # slimmed down flavor of jogl-all # NB: All the SWT platform JARs have the same classes. # The current platform will be brought in transitively. - 'org.eclipse.swt:org.eclipse.swt.cocoa.macosx', - 'org.eclipse.swt:org.eclipse.swt.cocoa.macosx.x86_64', - 'org.eclipse.swt:org.eclipse.swt.gtk.aix.ppc', - 'org.eclipse.swt:org.eclipse.swt.gtk.aix.ppc64', - 'org.eclipse.swt:org.eclipse.swt.gtk.hpux.ia64', - 'org.eclipse.swt:org.eclipse.swt.gtk.linux.ppc', - 'org.eclipse.swt:org.eclipse.swt.gtk.linux.ppc64', - 'org.eclipse.swt:org.eclipse.swt.gtk.linux.s390', - 'org.eclipse.swt:org.eclipse.swt.gtk.linux.s390x', - 'org.eclipse.swt:org.eclipse.swt.gtk.linux.x86', - 'org.eclipse.swt:org.eclipse.swt.gtk.linux.x86_64', - 'org.eclipse.swt:org.eclipse.swt.gtk.solaris.sparc', - 'org.eclipse.swt:org.eclipse.swt.gtk.solaris.x86', - 'org.eclipse.swt:org.eclipse.swt.win32.win32.x86', - 'org.eclipse.swt:org.eclipse.swt.win32.win32.x86_64', + "org.eclipse.swt:org.eclipse.swt.cocoa.macosx", + "org.eclipse.swt:org.eclipse.swt.cocoa.macosx.x86_64", + "org.eclipse.swt:org.eclipse.swt.gtk.aix.ppc", + "org.eclipse.swt:org.eclipse.swt.gtk.aix.ppc64", + "org.eclipse.swt:org.eclipse.swt.gtk.hpux.ia64", + "org.eclipse.swt:org.eclipse.swt.gtk.linux.ppc", + "org.eclipse.swt:org.eclipse.swt.gtk.linux.ppc64", + "org.eclipse.swt:org.eclipse.swt.gtk.linux.s390", + "org.eclipse.swt:org.eclipse.swt.gtk.linux.s390x", + "org.eclipse.swt:org.eclipse.swt.gtk.linux.x86", + "org.eclipse.swt:org.eclipse.swt.gtk.linux.x86_64", + "org.eclipse.swt:org.eclipse.swt.gtk.solaris.sparc", + "org.eclipse.swt:org.eclipse.swt.gtk.solaris.x86", + "org.eclipse.swt:org.eclipse.swt.win32.win32.x86", + "org.eclipse.swt:org.eclipse.swt.win32.win32.x86_64", # NB: All SLF4J bindings have the same classes. # We'll rely on logback-classic being present here. - 'org.slf4j:slf4j-jcl', - 'org.slf4j:slf4j-jdk14', - 'org.slf4j:slf4j-nop', - 'org.slf4j:slf4j-simple', + "org.slf4j:slf4j-jcl", + "org.slf4j:slf4j-jdk14", + "org.slf4j:slf4j-nop", + "org.slf4j:slf4j-simple", # NB: Cannot include both commons-logging and jcl-over-slf4j; # see: http://www.slf4j.org/codes.html#jclDelegationLoop - 'org.slf4j:jcl-over-slf4j', + "org.slf4j:jcl-over-slf4j", ] [smelt] @@ -137,15 +137,15 @@ includes = [ ] excludes = [ # NB: Skip closed-source artifacts. - 'org.bonej:bonej-plus', + "org.bonej:bonej-plus", # NB: Skip scijava forks of third-party projects. # These are very stable, with few/no dependencies, and # don't need to be retested as pom-scijava evolves. - 'org.scijava:j3dcore', - 'org.scijava:j3dutils', - 'org.scijava:jep', - 'org.scijava:junit-benchmarks', - 'org.scijava:vecmath', + "org.scijava:j3dcore", + "org.scijava:j3dutils", + "org.scijava:jep", + "org.scijava:junit-benchmarks", + "org.scijava:vecmath", ] skip-tests = [ # Error while checking the CLIJ2 installation: null @@ -174,7 +174,7 @@ skip-tests = [ # Unable to contact EC2 metadata service.] "org.janelia.saalfeldlab:n5-aws-s3" = ["org.janelia.saalfeldlab.n5.s3.AmazonS3UtilsTest"] -# Skip n5-universe'slow tests. +# Skip n5-universe slow tests. "org.janelia.saalfeldlab:n5-universe" = [ "org.janelia.saalfeldlab.n5.universe.storage.zarr.ZarrStorageTests", # Time elapsed: 1753 s "org.janelia.saalfeldlab.n5.universe.storage.zarr.zarr2.Zarr2HttpFactoryTest", # Time elapsed: 947.2 s From 9fe0dbc915f947e14fff4396e0fdd96398d37246 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Fri, 19 Jun 2026 13:56:34 -0500 Subject: [PATCH 271/294] pombast: ignore scijava-ops build issues for now New releases are needed... soon. --- pombast.toml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pombast.toml b/pombast.toml index 5c9d1ba..00d9c1e 100644 --- a/pombast.toml +++ b/pombast.toml @@ -136,6 +136,8 @@ includes = [ "sc.fiji:*", ] excludes = [ + # TEMP: Until scijava-ops-image 2.0.0 is released. + "org.scijava:scijava-ops-image", # NB: Skip closed-source artifacts. "org.bonej:bonej-plus", # NB: Skip scijava forks of third-party projects. @@ -195,6 +197,13 @@ skip-tests = [ "org.janelia.saalfeldlab.n5.universe.storage.zarr.zarr3.Zarr3GoogleCloudFactoryTest", ] +# TEMP: Until scijava-ops-flim 1.0.1 is released. +# FitTest.testGlobalFitImg:214->assertSampleEquals:254 array contents differ at index [0], expected: <2.5887516> but was: <1.2488503> +# FitTest.testGlobalFitImgMultiExp:228->assertSampleEquals:254 array contents differ at index [0], expected: <301.6971> but was: <193.0> +"org.scijava:scijava-ops-flim" = [ + "org.scijava.ops.flim.FitTest", +] + "sc.fiji:labkit-ui" = [ "sc.fiji.labkit.ui.GarbageCollectionTest", # Too slow (7 s) "sc.fiji.labkit.ui.plugin.LabkitProbabilityMapForImagesInDirectoryPluginTest", # Too slow (65 s) From 11b84bf0d4bb8ba19e851ed49b173438948358fa Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Fri, 19 Jun 2026 15:17:34 -0500 Subject: [PATCH 272/294] pombast: fix leading whitespace --- pombast.toml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pombast.toml b/pombast.toml index 00d9c1e..1f4ff47 100644 --- a/pombast.toml +++ b/pombast.toml @@ -150,8 +150,8 @@ excludes = [ "org.scijava:vecmath", ] skip-tests = [ - # Error while checking the CLIJ2 installation: null - "sc.fiji:labkit-pixel-classification", + # Error while checking the CLIJ2 installation: null + "sc.fiji:labkit-pixel-classification", ] [remove-tests] @@ -205,10 +205,10 @@ skip-tests = [ ] "sc.fiji:labkit-ui" = [ - "sc.fiji.labkit.ui.GarbageCollectionTest", # Too slow (7 s) - "sc.fiji.labkit.ui.plugin.LabkitProbabilityMapForImagesInDirectoryPluginTest", # Too slow (65 s) - "sc.fiji.labkit.ui.plugin.SegmentRGBImageTest", # Too slow (35 s) - "sc.fiji.labkit.ui.segmentation.SegmentationToolTest", # Too slow (34 s) + "sc.fiji.labkit.ui.GarbageCollectionTest", # Too slow (7 s) + "sc.fiji.labkit.ui.plugin.LabkitProbabilityMapForImagesInDirectoryPluginTest", # Too slow (65 s) + "sc.fiji.labkit.ui.plugin.SegmentRGBImageTest", # Too slow (35 s) + "sc.fiji.labkit.ui.segmentation.SegmentationToolTest", # Too slow (34 s) ] [components."fr.inra.ijpb:MorphoLibJ_"] From 63fd51e405279919c40c3b78994caf6774d1bd8e Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Fri, 19 Jun 2026 15:17:48 -0500 Subject: [PATCH 273/294] pombast: remove unneeded Java version pins Pombast got smarter about detecting the right Java version to use. --- pombast.toml | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/pombast.toml b/pombast.toml index 1f4ff47..9f4605f 100644 --- a/pombast.toml +++ b/pombast.toml @@ -319,6 +319,10 @@ ci-build = "build-main" last-vetted = "20230309000000" [components."net.imglib2:imglib2-mesh"] +# NOTE: Workaround for: error: Could not load processor class file due to +# 'org/scijava/ops/indexer/OpImplNoteParser has been compiled by a more recent +# version of the Java Runtime (class file version 55.0), this version of the +# Java Runtime only recognizes class file versions up to 52.0'. java-version = 11 [components."net.preibisch:multiview-simulation"] @@ -333,23 +337,10 @@ ci-build = "maven" [components."ome:formats-gpl"] ci-build = "maven" -[components."org.bonej:bonej-legacy-plugins_"] -java-version = 11 - -[components."org.bonej:bonej-legacy-util_"] -java-version = 11 - -[components."org.bonej:bonej-ops"] -java-version = 11 - [components."org.bonej:bonej-plugins"] -java-version = 11 # TEMP: Until a BoneJ release exists incorporating bonej-org/BoneJ2#414. properties = { "skipTests" = "true" } -[components."org.bonej:bonej-utilities"] -java-version = 11 - [components."org.codehaus.groovy:groovy"] last-vetted = "20250101000000" @@ -458,9 +449,6 @@ ci-build = "build-main" [components."org.mockito:mockito-core"] last-vetted = "20250101000000" -[components."org.morphonets:SNT"] -java-version = 21 - [components."org.ojalgo:ojalgo"] last-vetted = "20250101000000" @@ -743,9 +731,6 @@ ci-build = "build-main" ci-build = "build-main" last-vetted = "20230309000000" -[components."sc.fiji:FilamentDetector"] -java-version = 11 - [components."sc.fiji:FlowJ_"] ci-build = "build-main" last-vetted = "20230309000000" @@ -831,9 +816,6 @@ last-vetted = "20230309000000" ci-build = "build-main" last-vetted = "20230309000000" -[components."sc.fiji:OMEVisual"] -java-version = 11 - [components."sc.fiji:PIV_analyser"] ci-build = "build-main" last-vetted = "20230309000000" From 512e3f9d191a61c4811281cae0af04507fe2a4f7 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Mon, 22 Jun 2026 13:53:59 -0400 Subject: [PATCH 274/294] Manage Amazon AWS SDK v2 components This is done by importing its official BOM. Which is a bit silly, because all the AWS components are monoversioned in alignment with the BOM itself. But it's what their documentation says to do, so OK! https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup-project-maven.html --- pom.xml | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index bc2673d..337ced5 100644 --- a/pom.xml +++ b/pom.xml @@ -1372,13 +1372,17 @@ 1.5.0 ${algart-tiff.version} - + 1.12.791 ${aws.version} ${aws.version} ${aws-java-sdk-core.version} ${aws-java-sdk-s3.version} + + + 2.46.15 + 4.3.4 2.7.7 @@ -4427,7 +4431,7 @@ ${net.algart.algart-tiff.version} - + com.amazonaws aws-java-sdk-core @@ -4439,6 +4443,15 @@ ${com.amazonaws.aws-java-sdk-s3.version} + + + software.amazon.awssdk + bom + ${software.amazon.awssdk.bom.version} + pom + import + + antlr From 043e710e2a71cb3b0a2fc93bd18100144a1f49d8 Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Mon, 22 Jun 2026 13:55:30 -0400 Subject: [PATCH 275/294] Update BigStitcher components * BigStitcher: 2.6.1 -> 3.0.1 * multiview-reconstruction: 9.0.1 -> 9.0.2 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 337ced5..707c952 100644 --- a/pom.xml +++ b/pom.xml @@ -1237,8 +1237,8 @@ ${clijx-weka_.version} - 2.6.1 - 9.0.1 + 3.0.1 + 9.0.2 0.3.1 ${BigStitcher.version} ${multiview-reconstruction.version} From 42bc2b3ff004291f7b783e8e288872215d8ffa3a Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Mon, 22 Jun 2026 14:07:04 -0500 Subject: [PATCH 276/294] Remove flimlib components They do not smelt successfully with the currently managed ImgLib2, and there is a compatibility issue with FLIMLib >=2.2.0. Some related discussion is at: https://imagesc.zulipchat.com/#narrow/channel/604400-COBA/topic/FLIMLib.20breakage.20between.202.2E1.2E1.20and.202.2E2.2E3/with/605875091 Until these issues are resolved, pom-scijava cannot document compatible versions, because there are none. --- pom.xml | 2 +- pombast.toml | 11 ----------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/pom.xml b/pom.xml index 707c952..908406b 100644 --- a/pom.xml +++ b/pom.xml @@ -1207,7 +1207,7 @@ 2.1.2 2.0.0 - 2.2.5 + 2.1.1 ${flimj-ops.version} ${flimj-ui.version} ${flimlib.version} diff --git a/pombast.toml b/pombast.toml index 9f4605f..208918f 100644 --- a/pombast.toml +++ b/pombast.toml @@ -11,7 +11,6 @@ footer = "pombast/footer-status.html" nexus-base = "https://maven.scijava.org" cuttable = [ "de.nanoimaging:*", - "flimlib:*", "fr.inra.ijpb:*", "io.scif:*", "jitk:*", @@ -32,7 +31,6 @@ header = "pombast/header-team.html" footer = "pombast/footer-team.html" includes = [ "de.nanoimaging:*", - "flimlib:*", "fr.inra.ijpb:*", "io.scif:*", "jitk:*", @@ -51,7 +49,6 @@ includes = [ output = "../status.scijava.org/badges.json" includes = [ "de.nanoimaging:*", - "flimlib:*", "fr.inra.ijpb:*", "io.scif:*", "jitk:*", @@ -121,7 +118,6 @@ excludes = [ output = "../status.scijava.org/smelt.json" includes = [ "de.nanoimaging:*", - "flimlib:*", "fr.inra.ijpb:*", "io.scif:*", "jitk:*", @@ -197,13 +193,6 @@ skip-tests = [ "org.janelia.saalfeldlab.n5.universe.storage.zarr.zarr3.Zarr3GoogleCloudFactoryTest", ] -# TEMP: Until scijava-ops-flim 1.0.1 is released. -# FitTest.testGlobalFitImg:214->assertSampleEquals:254 array contents differ at index [0], expected: <2.5887516> but was: <1.2488503> -# FitTest.testGlobalFitImgMultiExp:228->assertSampleEquals:254 array contents differ at index [0], expected: <301.6971> but was: <193.0> -"org.scijava:scijava-ops-flim" = [ - "org.scijava.ops.flim.FitTest", -] - "sc.fiji:labkit-ui" = [ "sc.fiji.labkit.ui.GarbageCollectionTest", # Too slow (7 s) "sc.fiji.labkit.ui.plugin.LabkitProbabilityMapForImagesInDirectoryPluginTest", # Too slow (65 s) From bc44c9421c43d6299fd02c822a1eeebf22464ad1 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Mon, 22 Jun 2026 19:50:23 -0500 Subject: [PATCH 277/294] Manage only software.amazon.awssdk:s3, not all 446 The AWS v2 BOM brings in 446 managed components with groupId software.amazon.awssdk. But our ecosystem only uses one of them: s3. If/when that changes, we can manage more of them. --- pom.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 908406b..78f3985 100644 --- a/pom.xml +++ b/pom.xml @@ -1380,8 +1380,10 @@ ${aws-java-sdk-s3.version} - - 2.46.15 + 2.46.15 + ${awssdk.version} + ${s3.version} + 4.3.4 @@ -4446,10 +4448,8 @@ software.amazon.awssdk - bom - ${software.amazon.awssdk.bom.version} - pom - import + s3 + ${software.amazon.awssdk.s3.version} From 28ac3de79a6d956230ab2f91f92b9f8383ad9b9f Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Tue, 23 Jun 2026 11:51:45 -0500 Subject: [PATCH 278/294] Update CI for better separation of concerns Co-authored-by: Claude Opus 4.8 --- .github/melt.sh | 4 ---- .github/publish.sh | 14 +++++++++++--- .github/status.sh | 28 ++++++++++++++++------------ .github/workflows/build.yml | 11 ++++++++--- .github/workflows/status.yml | 6 ++++++ bin/check.sh | 22 ++++++++++++++++++++++ bin/report.sh | 24 ++++++++++++++++++++++++ pombast.toml | 9 ++++----- 8 files changed, 91 insertions(+), 27 deletions(-) delete mode 100755 .github/melt.sh create mode 100755 bin/check.sh create mode 100755 bin/report.sh diff --git a/.github/melt.sh b/.github/melt.sh deleted file mode 100755 index 0785de6..0000000 --- a/.github/melt.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -uv tool install "git+https://github.com/scijava/pombast.git" -pombast melt . || true -pombast smelt --json smelt.json . diff --git a/.github/publish.sh b/.github/publish.sh index be5b074..0e8bd6d 100755 --- a/.github/publish.sh +++ b/.github/publish.sh @@ -12,8 +12,8 @@ datestamp="$(TZ=UTC date +'%Y-%m-%d %H:%M:%S UTC')" message="$1 ($datestamp)" shift -git config --global user.name github-actions -git config --global user.email github-actions@github.com +git config --global user.name "SciJava CI" +git config --global user.email ci@scijava.org dest_dir=site-publish @@ -36,5 +36,13 @@ then else echo "== Committing changes ==" git commit -m "$message" - git push + # Retry against concurrent publishers (the build and status workflows both + # push here), rebasing onto whatever landed in between. + n=0 + until git push + do + n=$((n + 1)) + test "$n" -lt 5 || { echo "push failed after $n attempts" >&2; exit 1; } + git pull --rebase + done fi diff --git a/.github/status.sh b/.github/status.sh index 4e212d3..0ff5595 100755 --- a/.github/status.sh +++ b/.github/status.sh @@ -1,5 +1,9 @@ #!/bin/sh -uv tool install "git+https://github.com/scijava/pombast.git" +# CI orchestrator for the status dashboard: fetch the most recently published +# smelt.json, regenerate the status/badges/team reports from it, and publish +# them to status.scijava.org. The report generation itself lives in +# bin/report.sh so it can be run outside CI too. +set -e # Pull the most recently published smelt results so that `pombast status` can # classify each available version bump by its bytecode-floor blast radius @@ -7,17 +11,17 @@ uv tool install "git+https://github.com/scijava/pombast.git" # rather than https://status.scijava.org/, so we pick up a freshly committed # smelt.json immediately instead of waiting on the asynchronous Pages deploy. # -# Best-effort: if smelt.json is not published yet (or the fetch fails), status -# still runs -- just without the bytecode classification overlay. -smelt_arg="" +# Best-effort: if smelt.json is not published yet (or the fetch fails), +# bin/report.sh still generates the reports -- just without the classification. smelt_url=https://raw.githubusercontent.com/scijava/status.scijava.org/gh-pages/smelt.json -if curl -fsSLO "$smelt_url"; then - smelt_arg="--smelt smelt.json" -else +mkdir -p target/pombast +curl -fsSL -o target/pombast/smelt.json "$smelt_url" || echo "== smelt.json unavailable; running status without classification ==" -fi -pombast status $smelt_arg . -pombast badges -o badges.json . -pombast team . -.github/publish.sh "Update status reports" index.html badges.json team.html +bin/report.sh + +.github/publish.sh "Update status reports" \ + target/pombast/index.html \ + target/pombast/badges.json \ + target/pombast/team.html \ + target/pombast/team.json diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4624a36..9b31bda 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,6 +11,11 @@ on: # Run weekly on Sunday to keep the Maven cache alive. - cron: '4 5 * * 0' +# Queue runs of the same ref; cancel superseded PR builds (they never publish). +concurrency: + group: build-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + jobs: build: runs-on: ubuntu-latest @@ -63,8 +68,8 @@ jobs: ~/.cache/jgo key: ${{ runner.os }}-pombast-build - - name: Run pombast melt+smelt commands - run: .github/melt.sh + - name: Run pombast checks (melt + smelt) + run: bin/check.sh shell: bash - name: Delete old pombast cache @@ -86,5 +91,5 @@ jobs: - name: Publish smelt results if: always() && github.ref == 'refs/heads/master' && github.event_name == 'push' - run: .github/publish.sh "Update smelt results" smelt.json + run: .github/publish.sh "Update smelt results" target/pombast/smelt.json shell: bash diff --git a/.github/workflows/status.yml b/.github/workflows/status.yml index 0243292..11d114e 100644 --- a/.github/workflows/status.yml +++ b/.github/workflows/status.yml @@ -12,6 +12,12 @@ on: workflows: [build] types: [completed] +# Serialize status runs (daily cron + each build completion) so two never push +# to the status.scijava.org gh-pages branch at the same time. +concurrency: + group: status-publish + cancel-in-progress: false + jobs: status: runs-on: ubuntu-latest diff --git a/bin/check.sh b/bin/check.sh new file mode 100755 index 0000000..87fe6f1 --- /dev/null +++ b/bin/check.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# Validate a Maven BOM's managed components against each other: +# +# melt -- mega-melt classpath check (duplicate classes, SNAPSHOTs, enforcer) +# smelt -- per-component build + test against the BOM-pinned dependency set +# +# Both phases always run, so a failure in one (e.g. duplicate classes in melt) +# never hides real incompatibilities surfaced by the other. The script exits +# non-zero if either phase found a problem. +# +# Run from a BOM checkout (e.g. a pom-scijava working copy): +# +# bin/check.sh +# +# Outputs land under target/pombast/ (see pombast.toml). +command -v pombast >/dev/null 2>&1 || + uv tool install "git+https://github.com/scijava/pombast.git" + +rc=0 +pombast melt || rc=$? +pombast smelt || rc=$? +exit $rc diff --git a/bin/report.sh b/bin/report.sh new file mode 100755 index 0000000..58b0f25 --- /dev/null +++ b/bin/report.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# Generate the status, badges, and team reports for a Maven BOM, writing them +# under target/pombast/ (see pombast.toml). +# +# Run from a BOM checkout (e.g. a pom-scijava working copy): +# +# bin/report.sh +# +# The status report overlays binary/source compatibility info from +# target/pombast/smelt.json when present. Run bin/check.sh first, or drop a +# published smelt.json into target/pombast/, to populate it; without it, the +# reports are still generated, just without the bytecode classification. +command -v pombast >/dev/null 2>&1 || + uv tool install "git+https://github.com/scijava/pombast.git" + +smelt=target/pombast/smelt.json +if [ -f "$smelt" ]; then + pombast status --smelt "$smelt" +else + echo "== $smelt not found; generating status without bytecode classification ==" + pombast status +fi +pombast badges +pombast team diff --git a/pombast.toml b/pombast.toml index 208918f..96b37b9 100644 --- a/pombast.toml +++ b/pombast.toml @@ -3,8 +3,7 @@ default-java-version = 8 repositories = ["scijava.public=https://maven.scijava.org/content/groups/public"] [status] -output = "../status.scijava.org/index.html" -smelt = "../status.scijava.org/smelt.json" +output = "target/pombast/index.html" rules = "rules.xml" header = "pombast/header-status.html" footer = "pombast/footer-status.html" @@ -26,7 +25,7 @@ cuttable = [ ] [team] -output = "../status.scijava.org/team.html" +output = "target/pombast/team.html" header = "pombast/header-team.html" footer = "pombast/footer-team.html" includes = [ @@ -46,7 +45,7 @@ includes = [ ] [badges] -output = "../status.scijava.org/badges.json" +output = "target/pombast/badges.json" includes = [ "de.nanoimaging:*", "fr.inra.ijpb:*", @@ -115,7 +114,7 @@ excludes = [ ] [smelt] -output = "../status.scijava.org/smelt.json" +output = "target/pombast/smelt.json" includes = [ "de.nanoimaging:*", "fr.inra.ijpb:*", From fbf2e2262ca65f1043b452994c3a1f2f0a1a81a0 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Tue, 23 Jun 2026 17:31:47 -0500 Subject: [PATCH 279/294] Purge bigdataviewer-vistools from all components All bigdataviewer-vistools classes merged with bigdataviewer-core as of version 10.5.0. --- pom.xml | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/pom.xml b/pom.xml index 78f3985..13d9e94 100644 --- a/pom.xml +++ b/pom.xml @@ -3147,6 +3147,13 @@ net.imglib2 imglib2-imglyb ${net.imglib2.imglib2-imglyb.version} + + + + sc.fiji + bigdataviewer-vistools + + @@ -3242,6 +3249,13 @@ sc.fiji fiji ${sc.fiji.fiji.version} + + + + sc.fiji + bigdataviewer-vistools + + @@ -3943,6 +3957,13 @@ org.janelia.saalfeldlab n5-viewer_fiji ${org.janelia.saalfeldlab.n5-viewer_fiji.version} + + + + sc.fiji + bigdataviewer-vistools + +
org.janelia.saalfeldlab @@ -4034,11 +4055,25 @@ net.preibisch BigStitcher ${net.preibisch.BigStitcher.version} + + + + sc.fiji + bigdataviewer-vistools + + net.preibisch multiview-reconstruction ${net.preibisch.multiview-reconstruction.version} + + + + sc.fiji + bigdataviewer-vistools + + net.preibisch @@ -4101,6 +4136,13 @@ sc.fiji MaMuT ${sc.fiji.MaMuT.version} + + + + sc.fiji + bigdataviewer-vistools + + From 5c308a5a6baf1a008499d6c47ee8409b00be2006 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Tue, 23 Jun 2026 21:23:36 -0500 Subject: [PATCH 280/294] pombast CI: fix publish, add log artifacts publish.sh checked `git diff --quiet` after staging the files with `git add`, so it always saw a clean working tree and reported "No changes" -- nothing was ever committed to status.scijava.org's gh-pages branch. Check staged changes with `git diff --cached --quiet` instead. Also upload target/pombast logs (mega-melt validation + per-component build logs) and the generated reports as workflow artifacts, so melt and smelt failures can be diagnosed without waiting on a Pages deploy, and set COLUMNS so the Rich tables in the CI logs are legible. Co-Authored-By: Claude Opus 4.8 --- .github/publish.sh | 4 +++- .github/workflows/build.yml | 16 ++++++++++++++++ .github/workflows/status.yml | 14 ++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/.github/publish.sh b/.github/publish.sh index 0e8bd6d..997d0ff 100755 --- a/.github/publish.sh +++ b/.github/publish.sh @@ -30,7 +30,9 @@ do done cd "$dest_dir" -if git diff --quiet . +# Check staged changes (--cached): the files above were already `git add`ed, so +# a plain `git diff` would see an always-clean working tree and never commit. +if git diff --cached --quiet then echo "== No changes ==" else diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9b31bda..1df2f9e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -71,6 +71,22 @@ jobs: - name: Run pombast checks (melt + smelt) run: bin/check.sh shell: bash + env: + COLUMNS: '200' # widen Rich tables so log output is legible + + - name: Upload pombast logs + if: always() + uses: actions/upload-artifact@v4 + with: + name: pombast-logs + # mega-melt validation.log + dependency-tree.log + per-component build + # logs, plus the smelt report. Lets us diagnose melt/smelt failures + # without waiting on a status.scijava.org deploy. + path: | + target/pombast/**/*.log + target/pombast/smelt.json + if-no-files-found: warn + retention-days: 14 - name: Delete old pombast cache if: always() diff --git a/.github/workflows/status.yml b/.github/workflows/status.yml index 11d114e..52a49e9 100644 --- a/.github/workflows/status.yml +++ b/.github/workflows/status.yml @@ -64,6 +64,20 @@ jobs: shell: bash env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + COLUMNS: '200' # widen Rich tables so log output is legible + + - name: Upload status reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: status-reports + path: | + target/pombast/index.html + target/pombast/badges.json + target/pombast/team.html + target/pombast/team.json + if-no-files-found: warn + retention-days: 14 - name: Delete old pombast status cache if: always() From 9057d2fb355e94bd6b132415096aa07f016fccca Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Thu, 25 Jun 2026 14:13:59 -0400 Subject: [PATCH 281/294] bump BigStitcher ecosystem artifact versions --- pom.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 13d9e94..3bf0eb0 100644 --- a/pom.xml +++ b/pom.xml @@ -777,7 +777,7 @@ 1.0.7 ${Correct_3D_Drift.version} - 2.1.8 + 3.0.1 ${Descriptor_based_registration.version} 2.1.2 @@ -937,7 +937,7 @@ 2.0.1 ${Statistical_Region_Merging.version} - 3.1.9 + 3.1.10 ${Stitching.version} ${Stitching_.version} @@ -1195,7 +1195,7 @@ ${n5-viewer_fiji.version} - 2.0.0 + 2.0.1 ${n5-zarr.version} @@ -1237,8 +1237,8 @@ ${clijx-weka_.version} - 3.0.1 - 9.0.2 + 3.0.6 + 9.0.8 0.3.1 ${BigStitcher.version} ${multiview-reconstruction.version} From ae56e58aa18dda2b289e155bab8d1c791d11a6f5 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Fri, 26 Jun 2026 15:12:59 -0500 Subject: [PATCH 282/294] Bump to next development cycle Signed-off-by: Curtis Rueden --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3bf0eb0..9f695ef 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pom-scijava - 45.0.0-SNAPSHOT + 45.0.1-SNAPSHOT pom SciJava Parent POM From b2e0b5a1ad6390495ea022e41f9dbfcc999303e6 Mon Sep 17 00:00:00 2001 From: Michael Doube Date: Sun, 28 Jun 2026 17:53:49 +0200 Subject: [PATCH 283/294] BoneJ 7.2.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9f695ef..fd5005f 100644 --- a/pom.xml +++ b/pom.xml @@ -1245,7 +1245,7 @@ ${multiview-simulation.version} - 7.2.0 + 7.2.2 ${bonej.version} ${bonej.version} ${bonej.version} From dbd72fc6e9670a69017608bcfe48ecc9d3979074 Mon Sep 17 00:00:00 2001 From: Stephan Preibisch Date: Thu, 2 Jul 2026 13:23:28 +0200 Subject: [PATCH 284/294] Bump multiview-reconstruction 9.0.9, BigStitcher 3.0.7, Descriptor_based_registration 3.0.2 Co-Authored-By: Claude Opus 4.8 (1M context) --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index fd5005f..11f46d4 100644 --- a/pom.xml +++ b/pom.xml @@ -777,7 +777,7 @@ 1.0.7 ${Correct_3D_Drift.version} - 3.0.1 + 3.0.2 ${Descriptor_based_registration.version} 2.1.2 @@ -1237,8 +1237,8 @@ ${clijx-weka_.version} - 3.0.6 - 9.0.8 + 3.0.7 + 9.0.9 0.3.1 ${BigStitcher.version} ${multiview-reconstruction.version} From 2b4d23bac6a70c9ced1dd1ac3d4230d52c7ac39f Mon Sep 17 00:00:00 2001 From: Stephan Preibisch Date: Fri, 3 Jul 2026 20:59:43 +0200 Subject: [PATCH 285/294] Bump multiview-reconstruction 9.0.11, BigStitcher 3.0.8, Descriptor_based_registration 3.0.3 Co-Authored-By: Claude Opus 4.8 (1M context) --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 11f46d4..e47207d 100644 --- a/pom.xml +++ b/pom.xml @@ -777,7 +777,7 @@ 1.0.7 ${Correct_3D_Drift.version} - 3.0.2 + 3.0.3 ${Descriptor_based_registration.version} 2.1.2 @@ -1237,8 +1237,8 @@ ${clijx-weka_.version} - 3.0.7 - 9.0.9 + 3.0.8 + 9.0.11 0.3.1 ${BigStitcher.version} ${multiview-reconstruction.version} From e9a74b86c2196c61bebad1694c80561d5cbf9e47 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Fri, 3 Jul 2026 16:05:25 -0500 Subject: [PATCH 286/294] Update component versions * imagej-updater: 2.0.1 -> 2.0.3 * KymographBuilder: 3.0.0 -> 3.0.2 To align with versions already shipped in Fiji-Latest. --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index e47207d..5214e26 100644 --- a/pom.xml +++ b/pom.xml @@ -612,7 +612,7 @@ ${imagej-ui-swing.version} - 2.0.1 + 2.0.3 ${imagej-updater.version} @@ -853,7 +853,7 @@ 2.0.1 ${Kuwahara_Filter.version} - 3.0.0 + 3.0.2 ${KymographBuilder.version} 4.1.2 From 1e0c34c7445d597e84eb88fbc2ec936e0f1620e8 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Fri, 3 Jul 2026 16:09:53 -0500 Subject: [PATCH 287/294] Update net.imagej:imagej: 2.17.0 -> 2.18.0 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 5214e26..a79cde0 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pom-scijava - 45.0.1-SNAPSHOT + 45.1.0-SNAPSHOT pom SciJava Parent POM @@ -523,7 +523,7 @@ ${ij1-patcher.version} - 2.17.0 + 2.18.0 ${imagej2.version} ${imagej.version} From 7449822d8dd7bf7a9fab84414dac574ae6207576 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Wed, 15 Jul 2026 09:10:24 -0500 Subject: [PATCH 288/294] CI: do not run status workflow within forked repos Co-authored-by: Claude Sonnet 5 --- .github/workflows/status.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/status.yml b/.github/workflows/status.yml index 52a49e9..67038f3 100644 --- a/.github/workflows/status.yml +++ b/.github/workflows/status.yml @@ -21,12 +21,16 @@ concurrency: jobs: status: runs-on: ubuntu-latest - # Scheduled runs always proceed. workflow_run runs only when the triggering - # build was a push to master (i.e. one that republished smelt.json). + # Restrict to the canonical repo, since scheduled (cron) triggers fire on + # every fork's default branch too, regardless of push activity there. + # Beyond that: scheduled runs always proceed, while workflow_run runs only + # when the triggering build was a push to master (i.e. one that + # republished smelt.json). if: >- - github.event_name != 'workflow_run' || - (github.event.workflow_run.event == 'push' && - github.event.workflow_run.head_branch == 'master') + github.repository == 'scijava/pom-scijava' && + (github.event_name != 'workflow_run' || + (github.event.workflow_run.event == 'push' && + github.event.workflow_run.head_branch == 'master')) permissions: actions: write # needed to delete and re-save caches From cb337bde166cd77b004aac16f37110c68ca48f54 Mon Sep 17 00:00:00 2001 From: Caleb Hulbert Date: Fri, 17 Jul 2026 14:39:01 -0400 Subject: [PATCH 289/294] Revert "Purge opencensus libraries from the BOM" This reverts commit 7a2c1b3f93d4558b481da360b275ca337219f10c. --- pom.xml | 45 --------------------------------------------- 1 file changed, 45 deletions(-) diff --git a/pom.xml b/pom.xml index a79cde0..b5c6a3b 100644 --- a/pom.xml +++ b/pom.xml @@ -5366,15 +5366,6 @@ com.google.api gax ${com.google.api.gax.version} - - - - io.opencensus - * - -
com.google.api @@ -5436,15 +5427,6 @@ com.google.cloud google-cloud-core-http ${com.google.cloud.google-cloud-core-http.version} - - - - io.opencensus - * - - com.google.cloud @@ -5455,29 +5437,11 @@ com.google.cloud google-cloud-resourcemanager ${com.google.cloud.google-cloud-resourcemanager.version} - - - - io.opencensus - * - - com.google.cloud google-cloud-storage ${com.google.cloud.google-cloud-storage.version} - - - - io.opencensus - * - - @@ -5485,15 +5449,6 @@ com.google.http-client google-http-client ${com.google.http-client.google-http-client.version} - - - - io.opencensus - * - - com.google.http-client From b9a90f1f85035c59267ebccac06b0c81b9ce725e Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Fri, 17 Jul 2026 17:41:09 -0500 Subject: [PATCH 290/294] Update google-cloud-related component versions * google-cloud-core: 2.33.0 -> 2.72.0 * google-cloud-nio: 0.127.13 -> 0.134.0 * google-cloud-resourcemanager: 1.38.0 -> 1.96.0 * google-cloud-storage: 2.34.0 -> 2.70.0 * gson: 2.10.1 -> 2.14.0 --- pom.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index b5c6a3b..2e868c6 100644 --- a/pom.xml +++ b/pom.xml @@ -1792,11 +1792,11 @@ ${auto-value-annotations.version} - 2.33.0 + 2.72.0 ${google-cloud-core.version} - 0.127.13 - 1.38.0 - 2.34.0 + 0.134.0 + 1.96.0 + 2.70.0 ${google-cloud-core.version} ${google-cloud-core-http.version} ${google-cloud-nio.version} @@ -1851,7 +1851,7 @@ ${grpc-xds.version} - 2.10.1 + 2.14.0 ${gson.version} From dd0ac8fd52add67f48ff16a73165ff72f8e03601 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Fri, 17 Jul 2026 21:04:03 -0500 Subject: [PATCH 291/294] Update component versions * scifio-labeling: 0.3.2 -> 0.4.0 * n5-google-cloud: 6.0.0 -> 6.0.1 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 2e868c6..eac6c83 100644 --- a/pom.xml +++ b/pom.xml @@ -692,7 +692,7 @@ ${scifio-jai-imageio.version} - 0.3.2 + 0.4.0 ${scifio-labeling.version} @@ -1171,7 +1171,7 @@ ${n5-blosc.version} - 6.0.0 + 6.0.1 ${n5-google-cloud.version} From 17f395c6ec2daeb5adc62c976e91062765a4783c Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Fri, 17 Jul 2026 21:29:01 -0500 Subject: [PATCH 292/294] Tell Gradle to shut up about its stupid daemon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The single-use daemon notification message irritates me greatly. Every time I see it, I get worked up: * I don't want my build system to leave a daemon process lying around post-build (what other build system does this, *especially* by default rather than opt in?), so I pass the --no-daemon flag to prevent that from happening. * I don't care that another transient process is being forked -- other build systems like Maven do this all the time e.g. to invoke javac in its own process, and they don't spam the user about it. At minimum, I would expect there to be some kind of verbosity control, so that I can silence the message. As such, I asked Claude whether it is possible to disable this message by configuring Gradle's logger, and if not, how to go about modifying the source code to add support for such a toggle. Here is what it said: ## Is it already configurable? Not in any targeted way. It is logged at Gradle's lifecycle level, which is the default level. The only existing knobs are the global log-level controls: - --quiet / -q on the CLI, or - org.gradle.logging.level=quiet in gradle.properties Any of those would hide the message — but they suppress all lifecycle output (including BUILD SUCCESSFUL, incubating-feature notices, etc.), so it's far too blunt. There is no per-message toggle for this specific line today. One important architectural fact that shapes the fix: this message is printed by the client/launcher JVM (SingleUseDaemonClient runs in the launcher, it's the thing that forks the daemon). That matters for where a system property is readable — see below. ## Recommendation Gradle itself already has a precedent for exactly this kind of opt-out: WelcomeMessageAction gates its output on the system property org.gradle.internal.launcher.welcomeMessageEnabled. I'd mirror that pattern. There are two levels of effort: ### Option A — minimal, one-file change Downgrade the message from lifecycle to info when a system property is set. In SingleUseDaemonClient.execute(): String recommendation = documentationRegistry.getDocumentationRecommendationFor( "on this", "gradle_daemon", "sec:disabling_the_daemon"); if (Boolean.getBoolean("org.gradle.daemon.singleUseMessage.disabled")) { LOGGER.info(MESSAGE + " {}", recommendation); } else { LOGGER.lifecycle(MESSAGE + " {}", recommendation); } Downgrading to info (rather than deleting the call) keeps the message discoverable with --info/--debug and preserves the existing SingleUseDaemonClientTest expectations if you run at info. Caveat on how you set it: because this runs in the launcher JVM, the property must be a real JVM system property of that process. That means one of: - gradle -Dorg.gradle.daemon.singleUseMessage.disabled=true … - export GRADLE_OPTS="-Dorg.gradle.daemon.singleUseMessage.disabled=true" A plain systemProp entry in gradle.properties will not work here — those are forwarded to the daemon JVM, not applied to the launcher. ### Option B — the "clean" Gradle-idiomatic way If you want it configurable via gradle.properties like org.gradle.welcome, thread a boolean down from BuildActionsFactory.runBuildInSingleUseDaemon (where DaemonParameters — which has parsed gradle.properties — is available) through DaemonClientFactory.createSingleUseDaemonClientServices → SingleUseDaemonClientServices → SingleUseDaemonClient. That's the properly-plumbed version and would let you use a real org.gradle.* build option, but it touches ~4 files and, to be a first-class option, ideally also a BuildOption subclass + serializer entry. It is tempting to file a PR along the lines of Option A, but the fact that it would then not work as expected via gradle.properties would likely then bite people. Properly, the new option should also be added to the documentation and ideally be part of the same PR. So since -q already works to silence the warning, I just opted for that. Sure, it silences a lot more than only the single-use daemon message, but for this use case in pom-scijava, it doesn't matter. Good enough for now, to keep me from having a micro-meltdown on every Maven build. Now if I can just avoid ever noticing the irritating comment line at the top of the POM... See also: - https://github.com/gradle/gradle/issues/2660 - https://github.com/gradle/gradle/issues/11517 - https://github.com/gradle/gradle/issues/25272 --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index eac6c83..534716e 100644 --- a/pom.xml +++ b/pom.xml @@ -7273,6 +7273,7 @@ ${gradle.wrapper} ${basedir}/gradle-scijava + -q --no-daemon --project-cache-dir ../target/gradle/build From 2bcb0f404bd91a7be8d841e58ca54a63169441d1 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Fri, 17 Jul 2026 22:21:52 -0500 Subject: [PATCH 293/294] Bump to next development cycle Signed-off-by: Curtis Rueden --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 534716e..6b838dd 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pom-scijava - 45.1.0-SNAPSHOT + 45.1.1-SNAPSHOT pom SciJava Parent POM From e72f3e778af454ac9b8f0f0f7aa87e68228847b7 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Sat, 18 Jul 2026 18:22:51 -0500 Subject: [PATCH 294/294] Retry artifacts after 2h, not 24h, for melt/smelt This uses a newly added feature of pombast to specify a settings.xml file to use with relevant pombast actions like melt and smelt (see scijava/pombast@12a42f6b2932a278ce5e17c46efb4d6f5ce636c4). In such a file, we can set the updatePolicy of each repository. It is tempting to pass -U to all of pombast's mvn invocations, forcing rechecks for missing artifacts every single time. But that would be overkill, adding more overhead to each smelt component build, whereas reducing the update window from 24 hours to 2 hours means that we won't recheck for (probably still) missing artifacts for every smelted component that depends on it during a single run, but rather we'll recheck "soon" -- hopefully the next time CI runs ~2 hours later. Why 2 hours? Because the pombast CI smelt run takes ~90 minutes when no previous successes have been cached. Would it be better to somehow reset the last-checked metadata before starting the smelt, so that every CI build behaves as though it's the first one of the day? Perhaps! But for now, let's try the 2h interval and see how it goes. --- pombast.toml | 1 + pombast/settings.xml | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 pombast/settings.xml diff --git a/pombast.toml b/pombast.toml index 96b37b9..d6891f7 100644 --- a/pombast.toml +++ b/pombast.toml @@ -1,6 +1,7 @@ [common] default-java-version = 8 repositories = ["scijava.public=https://maven.scijava.org/content/groups/public"] +settings = "pombast/settings.xml" [status] output = "target/pombast/index.html" diff --git a/pombast/settings.xml b/pombast/settings.xml new file mode 100644 index 0000000..534a5e6 --- /dev/null +++ b/pombast/settings.xml @@ -0,0 +1,22 @@ + + + + + update-interval + + + scijava.public + https://maven.scijava.org/content/groups/public + interval:120 + interval:120 + + + central + https://repo.maven.apache.org/maven2 + interval:120 + + + + + update-interval +