Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support or document how to generate module info for a Maven plugin #210

Open
garydgregory opened this issue Aug 21, 2023 · 4 comments
Open

Comments

@garydgregory
Copy link

Hi All,

Over at Apache Commons, we use custom Maven plugins and specifically our Apache Commons Build Plugin.

We define our use of the Moditect Maven plugin in our parent POM: The Apache Commons Parent POM.

This works for the normal Java JAR component I've tried so far but it does not for the Commons Build Maven plugin where we get this error:

Error:  Modules maven.model and maven.model.builder export package org.apache.maven.model.merge to module maven.shared.utils

Details:

[INFO] --- moditect-maven-plugin:1.0.0.Final:add-module-info (add-module-infos) @ commons-build-plugin ---
[INFO] Running jdeps --generate-module-info /home/runner/work/commons-build-plugin/commons-build-plugin/target/moditect --add-modules plexus.utils,org.apache.commons.compress,com.google.guice,plexus.sec.dispatcher,maven.shared.utils,maven.model,org.apache.maven.resolver,plexus.cipher,maven.builder.support,maven.repository.metadata,aopalliance,plexus.component.annotations,plexus.io,com.github.luben.zstd_jni,org.graalvm.sdk,plexus.classworlds,org.tukaani.xz,maven.settings.builder,maven.resolver.provider,failureaccess,maven.script.ant,maven.plugin.api,javax.annotation.api,plexus.ant.factory,org.slf4j,ant,maven.settings,plexus.archiver,org.graalvm.js,com.oracle.truffle.regex,org.graalvm.js.scriptengine,ant.launcher,org.eclipse.sisu.inject,org.apache.commons.lang3,snappy,com.google.common,org.apache.commons.io,org.apache.maven.resolver.util,maven.core,org.eclipse.sisu.plexus,plexus.interpolation,org.graalvm.truffle,javax.inject,org.apache.maven.resolver.named,org.apache.maven.resolver.impl,org.apache.maven.resolver.spi,maven.artifact,maven.model.builder --module-path /home/runner/.m2/repository/org/codehaus/plexus/plexus-utils/3.5.1/plexus-utils-3.5.1.jar:/home/runner/.m2/repository/org/apache/commons/commons-compress/1.23.0/commons-compress-1.23.0.jar:/home/runner/.m2/repository/com/google/inject/guice/5.1.0/guice-5.1.0.jar:/home/runner/.m2/repository/org/codehaus/plexus/plexus-sec-dispatcher/2.0/plexus-sec-dispatcher-2.0.jar:/home/runner/.m2/repository/org/apache/maven/shared/maven-shared-utils/3.3.4/maven-shared-utils-3.3.4.jar:/home/runner/.m2/repository/org/apache/maven/maven-model/3.9.4/maven-model-3.9.4.jar:/home/runner/.m2/repository/org/apache/maven/resolver/maven-resolver-api/1.9.14/maven-resolver-api-1.9.14.jar:/home/runner/.m2/repository/org/codehaus/plexus/plexus-cipher/2.0/plexus-cipher-2.0.jar:/home/runner/.m2/repository/org/apache/maven/maven-builder-support/3.9.4/maven-builder-support-3.9.4.jar:/home/runner/.m2/repository/org/apache/maven/maven-repository-metadata/3.9.4/maven-repository-metadata-3.9.4.jar:/home/runner/.m2/repository/aopalliance/aopalliance/1.0/aopalliance-1.0.jar:/home/runner/.m2/repository/org/codehaus/plexus/plexus-component-annotations/2.1.0/plexus-component-annotations-2.1.0.jar:/home/runner/.m2/repository/org/codehaus/plexus/plexus-io/3.4.1/plexus-io-3.4.1.jar:/home/runner/.m2/repository/com/github/luben/zstd-jni/1.5.5-2/zstd-jni-1.5.5-2.jar:/home/runner/.m2/repository/org/graalvm/sdk/graal-sdk/22.0.0.2/graal-sdk-22.0.0.2.jar:/home/runner/.m2/repository/org/codehaus/plexus/plexus-classworlds/2.7.0/plexus-classworlds-2.7.0.jar:/home/runner/.m2/repository/org/tukaani/xz/1.9/xz-1.9.jar:/home/runner/.m2/repository/org/apache/maven/maven-settings-builder/3.9.4/maven-settings-builder-3.9.4.jar:/home/runner/.m2/repository/org/apache/maven/maven-resolver-provider/3.9.4/maven-resolver-provider-3.9.4.jar:/home/runner/.m2/repository/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar:/home/runner/.m2/repository/org/apache/maven/plugin-tools/maven-script-ant/3.9.0/maven-script-ant-3.9.0.jar:/home/runner/.m2/repository/org/apache/maven/maven-plugin-api/3.9.4/maven-plugin-api-3.9.4.jar:/home/runner/.m2/repository/javax/annotation/javax.annotation-api/1.2/javax.annotation-api-1.2.jar:/home/runner/.m2/repository/org/codehaus/plexus/plexus-ant-factory/1.0-alpha-2.1/plexus-ant-factory-1.0-alpha-2.1.jar:/home/runner/.m2/repository/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar:/home/runner/.m2/repository/org/apache/ant/ant/1.10.13/ant-1.10.13.jar:/home/runner/.m2/repository/org/apache/maven/maven-settings/3.9.4/maven-settings-3.9.4.jar:/home/runner/.m2/repository/org/codehaus/plexus/plexus-archiver/4.7.1/plexus-archiver-4.7.1.jar:/home/runner/.m2/repository/org/graalvm/js/js/22.0.0.2/js-22.0.0.2.jar:/home/runner/.m2/repository/org/graalvm/regex/regex/22.0.0.2/regex-22.0.0.2.jar:/home/runner/.m2/repository/org/graalvm/js/js-scriptengine/22.0.0.2/js-scriptengine-22.0.0.2.jar:/home/runner/.m2/repository/org/apache/ant/ant-launcher/1.10.14/ant-launcher-1.10.14.jar:/home/runner/.m2/repository/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.5/org.eclipse.sisu.inject-0.3.5.jar:/home/runner/.m2/repository/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar:/home/runner/.m2/repository/org/iq80/snappy/snappy/0.4/snappy-0.4.jar:/home/runner/.m2/repository/com/google/guava/guava/32.0.1-jre/guava-32.0.1-jre.jar:/home/runner/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar:/home/runner/.m2/repository/org/apache/maven/resolver/maven-resolver-util/1.9.14/maven-resolver-util-1.9.14.jar:/home/runner/.m2/repository/org/apache/maven/maven-core/3.9.4/maven-core-3.9.4.jar:/home/runner/.m2/repository/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.5/org.eclipse.sisu.plexus-0.3.5.jar:/home/runner/.m2/repository/org/codehaus/plexus/plexus-interpolation/1.26/plexus-interpolation-1.26.jar:/home/runner/.m2/repository/org/graalvm/truffle/truffle-api/22.0.0.2/truffle-api-22.0.0.2.jar:/home/runner/.m2/repository/javax/inject/javax.inject/1/javax.inject-1.jar:/home/runner/.m2/repository/org/apache/maven/resolver/maven-resolver-named-locks/1.9.14/maven-resolver-named-locks-1.9.14.jar:/home/runner/.m2/repository/org/apache/maven/resolver/maven-resolver-impl/1.9.14/maven-resolver-impl-1.9.14.jar:/home/runner/.m2/repository/org/apache/maven/resolver/maven-resolver-spi/1.9.14/maven-resolver-spi-1.9.14.jar:/home/runner/.m2/repository/org/apache/maven/maven-artifact/3.9.4/maven-artifact-3.9.4.jar:/home/runner/.m2/repository/org/apache/maven/maven-model-builder/3.9.4/maven-model-builder-3.9.4.jar --multi-release=9 /home/runner/work/commons-build-plugin/commons-build-plugin/target/commons-build-plugin-1.14.0-SNAPSHOT.jar
Error:  Modules maven.model and maven.model.builder export package org.apache.maven.model.merge to module maven.shared.utils

I've brought this up on the Maven dev list and the suggestion there is

Most of the module-path listed there is not intended to be used as module
(maven plugin stack is a good example of that) so looks like moditech
should support classpath option too as the JVM and not assume everything is
a module from my window.

Is this supported by the Moditect plugin?

TY!

@aalmiray
Copy link
Contributor

aalmiray commented Feb 8, 2024

This looks like a split package problem to me, in which case the only way to solve this is to move the org.apache.maven.model.merge package to a single module.

@garydgregory
Copy link
Author

garydgregory commented Feb 8, 2024

Ugh, a last resort, JPMS is hell 🔥
I have no control over other people's code. How do people deal with this mess?

@aalmiray
Copy link
Contributor

aalmiray commented Feb 8, 2024

First, identify which packages are split across different modules/JARs. There are a few ways to find that out, I can recommend https://github.com/kordamp/jarviz

Next, if possible, move all affected classes to a single module/JAR. This would require consumers adjusting their dependencies configuration. Failing that, moving classes to other packages which breaks backwards compatibility and thus be considered as last resort unless BC changes were already considered in the next major release.

@garydgregory
Copy link
Author

All I want for Christmas is --turn-off-jpms 😉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants