[ https://issues.apache.org/jira/browse/SUREFIRE-1667?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16849225#comment-16849225 ]
Robert Scholte commented on SUREFIRE-1667: ------------------------------------------ [~sbordet] could you try my latest fix on [plexus-java|https://github.com/codehaus-plexus/plexus-languages/issues/24]? > Crash with JPMS "requires static" > --------------------------------- > > Key: SUREFIRE-1667 > URL: https://issues.apache.org/jira/browse/SUREFIRE-1667 > Project: Maven Surefire > Issue Type: Bug > Affects Versions: 3.0.0-M3 > Reporter: Simone Bordet > Priority: Major > Attachments: surefire-jpms-issue.tgz > > > The attached project has JPMS modules where: > {{moduleA}} requires {{moduleB}} > {{moduleB}} requires static {{moduleC}}. > Furthermore, {{moduleA}} tests require {{moduleC}}. > Running the attached project ends up with the following test failure: > {code} > [ERROR] test(org.cometd.a.ATest) Time elapsed: 0.01 s <<< ERROR! > java.lang.NoClassDefFoundError: org/cometd/c/C > at moduleA@1.0.0-SNAPSHOT/org.cometd.a.ATest.test(ATest.java:15) > {code} > The reason is that {{plexus-java}} creates a wrong module-path and class-path > because it does not take into account the {{static}} modified in the JPMS > directive {{requires static <module>}}. > For the attached project, running {{moduleA}} tests generates this > (simplified): > {code} > --module-path > moduleA/target/classes: > moduleB-1.0.0-SNAPSHOT.jar: > moduleC-1.0.0-SNAPSHOT.jar > --class-path > surefire-booter-3.0.0-M3.jar: > surefire-api-3.0.0-M3.jar: > surefire-logger-api-3.0.0-M3.jar: > junit-4.12.jar: > hamcrest-core-1.3.jar: > surefire-junit4-3.0.0-M3.jar: > common-java5-3.0.0-M3.jar: > common-junit3-3.0.0-M3.jar: > common-junit4-3.0.0-M3.jar" > --patch-module > moduleA=moduleA/target/test-classes > --add-exports > moduleA/org.cometd.a=ALL-UNNAMED > --add-modules > moduleA > --add-reads > moduleA=ALL-UNNAMED > {code} > However, {{moduleC}} should be in the class-path, not in the module-path, as > it is only required for testing. > It is in the module-path because it is pulled in as a transitive dependency > from {{moduleB}}, without taking into account that it is a {{requires > static}}. > Correct behavior should be IMHO that {{moduleC}} is not in the module-path > but rather in the class-path, respecting the semantic of JPMS {{requires > static}}. > The workaround is to configure the Maven Surefire Plugin with {{--add-module > moduleC}}, but that is incorrect. > The relevant {{plexus-languages/plexus-java}} code that builds the > module-path and the class-path is in {{LocationManager.resolvePaths()}}. -- This message was sent by Atlassian JIRA (v7.6.3#76005)