Open aalmiray opened 4 years ago
Thanks for your detailed bug report, Andres!
The issue you report is similar to #107. I hoped I fixed it with #109, but apparently, I haven't (at least not entirely).
I cloned ikonli and tried to build it from multi-release
branch. I used --debug
flag to see which compileModuleInfoJava
dependencies were added by this method:
https://github.com/java9-modularity/gradle-modules-plugin/blob/e01508d8f5fe4a59376c9108e2ba8e5b15646a47/src/main/java/org/javamodularity/moduleplugin/internal/CompileModuleInfoHelper.java#L25-L29
I got the following dependencies on :ikonli-core:compileModuleInfoJava
:
16:57:19.662 [...] task ':ikonli-ligaturesymbols-pack:compileModuleInfoJava'.dependsOn(task ':ikonli-core:compileModuleInfoJava')
16:57:19.717 [...] task ':ikonli-maki-pack:compileModuleInfoJava'.dependsOn(task ':ikonli-core:compileModuleInfoJava')
16:57:19.805 [...] task ':ikonli-maki2-pack:compileModuleInfoJava'.dependsOn(task ':ikonli-core:compileModuleInfoJava')
16:57:19.875 [...] task ':ikonli-mapicons-pack:compileModuleInfoJava'.dependsOn(task ':ikonli-core:compileModuleInfoJava')
16:57:19.947 [...] task ':ikonli-material-pack:compileModuleInfoJava'.dependsOn(task ':ikonli-core:compileModuleInfoJava')
16:57:20.050 [...] task ':ikonli-materialdesign-pack:compileModuleInfoJava'.dependsOn(task ':ikonli-core:compileModuleInfoJava')
16:57:20.133 [...] task ':ikonli-metrizeicons-pack:compileModuleInfoJava'.dependsOn(task ':ikonli-core:compileModuleInfoJava')
16:57:20.212 [...] task ':ikonli-octicons-pack:compileModuleInfoJava'.dependsOn(task ':ikonli-core:compileModuleInfoJava')
16:57:20.272 [...] task ':ikonli-openiconic-pack:compileModuleInfoJava'.dependsOn(task ':ikonli-core:compileModuleInfoJava')
16:57:20.305 [...] task ':ikonli-paymentfont-pack:compileModuleInfoJava'.dependsOn(task ':ikonli-core:compileModuleInfoJava')
16:57:20.340 [...] task ':ikonli-runestroicons-pack:compileModuleInfoJava'.dependsOn(task ':ikonli-core:compileModuleInfoJava')
16:57:20.373 [...] task ':ikonli-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-core:compileModuleInfoJava')
16:57:20.406 [...] task ':ikonli-themify-pack:compileModuleInfoJava'.dependsOn(task ':ikonli-core:compileModuleInfoJava')
16:57:20.437 [...] task ':ikonli-typicons-pack:compileModuleInfoJava'.dependsOn(task ':ikonli-core:compileModuleInfoJava')
16:57:20.473 [...] task ':ikonli-weathericons-pack:compileModuleInfoJava'.dependsOn(task ':ikonli-core:compileModuleInfoJava')
16:57:20.507 [...] task ':ikonli-websymbols-pack:compileModuleInfoJava'.dependsOn(task ':ikonli-core:compileModuleInfoJava')
16:57:20.540 [...] task ':ikonli-zondicons-pack:compileModuleInfoJava'.dependsOn(task ':ikonli-core:compileModuleInfoJava')
and the following dependencies on other tasks:
16:57:20.574 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-core:compileModuleInfoJava')
16:57:20.574 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-dashicons-pack:compileModuleInfoJava')
16:57:20.574 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-devicons-pack:compileModuleInfoJava')
16:57:20.574 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-entypo-pack:compileModuleInfoJava')
16:57:20.574 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-elusive-pack:compileModuleInfoJava')
16:57:20.574 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-feather-pack:compileModuleInfoJava')
16:57:20.574 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-fontawesome-pack:compileModuleInfoJava')
16:57:20.574 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-fontawesome5-pack:compileModuleInfoJava')
16:57:20.574 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-fontelico-pack:compileModuleInfoJava')
16:57:20.574 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-foundation-pack:compileModuleInfoJava')
16:57:20.574 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-hawconsfilled-pack:compileModuleInfoJava')
16:57:20.574 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-hawconsstroke-pack:compileModuleInfoJava')
16:57:20.574 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-icomoon-pack:compileModuleInfoJava')
16:57:20.574 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-ionicons-pack:compileModuleInfoJava')
16:57:20.574 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-ionicons4-pack:compileModuleInfoJava')
16:57:20.574 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-ligaturesymbols-pack:compileModuleInfoJava')
16:57:20.574 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-maki-pack:compileModuleInfoJava')
16:57:20.575 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-maki2-pack:compileModuleInfoJava')
16:57:20.575 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-mapicons-pack:compileModuleInfoJava')
16:57:20.575 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-material-pack:compileModuleInfoJava')
16:57:20.575 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-materialdesign-pack:compileModuleInfoJava')
16:57:20.575 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-metrizeicons-pack:compileModuleInfoJava')
16:57:20.575 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-octicons-pack:compileModuleInfoJava')
16:57:20.575 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-openiconic-pack:compileModuleInfoJava')
16:57:20.575 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-paymentfont-pack:compileModuleInfoJava')
16:57:20.575 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-runestroicons-pack:compileModuleInfoJava')
16:57:20.575 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-themify-pack:compileModuleInfoJava')
16:57:20.575 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-typicons-pack:compileModuleInfoJava')
16:57:20.575 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-weathericons-pack:compileModuleInfoJava')
16:57:20.575 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-websymbols-pack:compileModuleInfoJava')
16:57:20.575 [...] task ':sampler-javafx:compileJava'.dependsOn(task ':ikonli-zondicons-pack:compileModuleInfoJava')
16:57:20.611 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-core:compileModuleInfoJava')
16:57:20.611 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-swing:compileModuleInfoJava')
16:57:20.611 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-dashicons-pack:compileModuleInfoJava')
16:57:20.611 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-devicons-pack:compileModuleInfoJava')
16:57:20.611 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-elusive-pack:compileModuleInfoJava')
16:57:20.611 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-entypo-pack:compileModuleInfoJava')
16:57:20.611 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-feather-pack:compileModuleInfoJava')
16:57:20.611 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-fontawesome-pack:compileModuleInfoJava')
16:57:20.611 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-fontawesome5-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-fontelico-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-foundation-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-hawconsfilled-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-hawconsstroke-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-icomoon-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-ionicons-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-ionicons4-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-ligaturesymbols-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-maki-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-maki2-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-mapicons-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-material-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-materialdesign-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-metrizeicons-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-octicons-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-openiconic-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-paymentfont-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-runestroicons-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-typicons-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-themify-pack:compileModuleInfoJava')
16:57:20.612 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-weathericons-pack:compileModuleInfoJava')
16:57:20.613 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-websymbols-pack:compileModuleInfoJava')
16:57:20.613 [...] task ':sampler-swing:compileModuleInfoJava'.dependsOn(task ':ikonli-zondicons-pack:compileModuleInfoJava')
Unfortunately, many subprojects (incl. ikonli-dashicons-pack
) aren't in the first part, and I honestly don't know why.
As a workaround, I wanted to suggest adding the following lines to build.gradle
on line 116:
if (subproj.name.endsWith('-pack')) {
subproj.compileModuleInfoJava.dependsOn project(':ikonli-core').compileModuleInfoJava
}
However, for a reason that escapes me, it still doesn't help (although, to the best of my knowledge, it should). In other words, Gradle still tries to execute :ikonli-dashicons-pack:compileModuleInfoJava
before :ikonli-core:compileModuleInfoJava
(which obviously can't work).
After some more digging, I discovered something interesting. When I tried to clean the build, and then run :assemble
again, I got:
> Task :ikonli-core:compileModuleInfoJava FROM-CACHE
Interestingly, module-info.class
indeed is present in ikonli-core/build/module-info/module-info.class
(but not in ikonli-core/build/java
directory).
To sum up, it's certainly a bug in this plugin, and it seems related to #99, where this module-info
directory was related. AFAIU:
build/module-info
directory should either get onto the classpath of :ikonli-dashicons-pack
build/module-info/module-info.class
should get copied to build/java
:ikonli-core:compileModuleInfoJava
using isFinalizedBy
and that would copy this single fileHope it helps (however far from perfect this is, but I'm afraid I won't find resources in any foreseeable future to try and fix this bug).
Thanks for the suggestion @tlinkowski. The following snippet allows projects to compile
subproj.modularity.mixedJavaRelease 8
subproj.tasks.classes.doLast {
copy {
into subproj.sourceSets.main.output.classesDirs.files[0]
from(subproj.tasks.compileModuleInfoJava.destinationDir) {
include 'module-info.class'
}
}
}
However the generated JAR files are wrong as they include duplicate entries
Archive: ikonli-core-12.0.0-SNAPSHOT.jar
Length Date Time Name
--------- ---------- ----- ----
0 11-03-2019 20:42 META-INF/
25 11-03-2019 20:35 META-INF/MANIFEST.MF
10174 09-13-2019 17:34 META-INF/LICENSE
0 11-03-2019 20:42 META-INF/maven/
0 11-03-2019 20:42 META-INF/maven/org.kordamp.ikonli/
0 11-03-2019 20:42 META-INF/maven/org.kordamp.ikonli/ikonli-core/
601 11-03-2019 20:35 META-INF/maven/org.kordamp.ikonli/ikonli-core/pom.xml
102 11-03-2019 20:35 META-INF/maven/org.kordamp.ikonli/ikonli-core/pom.properties
0 11-03-2019 20:35 org/
0 11-03-2019 20:35 org/kordamp/
0 11-03-2019 20:35 org/kordamp/ikonli/
180 11-03-2019 20:35 org/kordamp/ikonli/Ikon.class
1061 11-03-2019 20:35 org/kordamp/ikonli/IkonliIkonResolver.class
1892 11-03-2019 20:35 org/kordamp/ikonli/Ikonli.class
608 11-03-2019 20:35 org/kordamp/ikonli/AbstractIkonHandler.class
391 11-03-2019 20:35 org/kordamp/ikonli/IkonHandler.class
277 11-03-2019 20:42 module-info.class
0 11-03-2019 20:35 META-INF/resources/
0 11-03-2019 20:35 META-INF/resources/ikonli/
0 11-03-2019 20:35 META-INF/resources/ikonli/0.0.0/
0 11-03-2019 20:35 META-INF/resources/ikonli/0.0.0/fonts/
1240 11-03-2019 20:35 META-INF/resources/ikonli/0.0.0/fonts/ikonli.ttf
0 11-03-2019 20:35 META-INF/services/
37 11-03-2019 20:35 META-INF/services/org.kordamp.ikonli.IkonHandler
180 11-03-2019 20:35 org/kordamp/ikonli/Ikon.class
1061 11-03-2019 20:35 org/kordamp/ikonli/IkonliIkonResolver.class
2182 11-03-2019 20:35 org/kordamp/ikonli/Ikonli.class
608 11-03-2019 20:35 org/kordamp/ikonli/AbstractIkonHandler.class
391 11-03-2019 20:35 org/kordamp/ikonli/IkonHandler.class
277 11-03-2019 20:35 module-info.class
--------- -------
21287 30 files
I'm afraid this may be related to the mergeClasses
task added by default.
Eh, something is really broken in this plugin 😕 E.g. as far as I remember, build/module-info
should contain only module-info.class
, and it contains other Java classes too.
So I bet the current problem with the JAR occurs because both build/java
and build/module-info
dirs get included in the JAR. Excluding any (preferably, build/module-info
) from jar
task should help (however dirty it is).
Any news?
Encountered this particular problem when attempting to solve https://github.com/controlsfx/controlsfx/issues/1195#issuecomment-549027925
The Ikonli project currently provides Java11 only support in its artifacts. All artifacts have a corresponding
module-info.java
file. Addingmodularity.MixedRelease = 8
to certain projects causes the build to fail withThe
multi-release
branch contains the failing setup. Please see https://github.com/aalmiray/ikonli/blob/multi-release/build.gradleThe
compileJavaSettings
task from the Kordamp Plugin Suite shows the following settings for:ikonli-dashicons-pack:compileJava
Here we can appreciate that the classpath includes a reference to
ikonli-core
where theorg.kordamp.ikonli.core
module is located. Inspecting the settings for:ikonli-dashicons-pack:compileModuleInfoJava
yields the followingBTW you can get all settings by invoking
Notice that
:ikonli-dashicons-pack:compileModuleInfoJava
knows nothing of the output fromikonli-core:compileModuleInfoJava
which contains the compiled module information. Perhaps this is the cause of the problem?