[ https://issues.apache.org/jira/browse/MCOMPILER-354?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16561241#comment-16561241 ]
foo bar edited comment on MCOMPILER-354 at 7/29/18 7:21 PM: ------------------------------------------------------------ It's not a normal setup because it's a minimization branch. You can see a less minimized project structure including tests (but still single-module) here: {code:java} git checkout a288b4cd4ce67308ffd3a768f3a4a25efc31cf6a {code} I do verify that it compiles if i make DoesntCompile::f package-private (even though I don't understand why). In a288b4cd4ce67308ffd3a768f3a4a25efc31cf6a the same change(making the test methods in Accumulable_PbtTest package-private) compiles too! But that's not a solution, since the test methods need to be public: {code:java} [INFO] --- maven-surefire-plugin:2.22.0:test (default-test) @ wires-support --- [WARNING] useSystemClassloader setting has no effect when not forking [INFO] Running fr.cla.wires.support.oo.Accumulable_PbtTest [ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.044 s <<< FAILURE! - in fr.cla.wires.support.oo.Accumulable_PbtTest [ERROR] initializationError(fr.cla.wires.support.oo.Accumulable_PbtTest) Time elapsed: 0.002 s <<< ERROR! java.lang.Exception: Method if_newVal_is_not_null_mutableEquivalentToInitially_should_be_equivalent_to_initially() should be public {code} About Java "protecting me from creating unusable classes", I don't see what you mean at all: * What do you mean "all exported classes must be usable"? Can you point me to some spec/definition? I thought that to be visible from another module a class had to be both public and in an exported package. So can I not have package-private classes in exported modules? * Same for "Java sees them as sharable module" I don't see what you mean in terms of requires/exports/opens. Or is that about the unnamed module/automatic modules? * Finally I don't see why a class should be exported to the same module. Or is that again about the unnamed module/automatic modules? * Is what you're saying specific to patching or is that a general rule? Does the nature of a module change when it's patched? was (Author: vandekeizer): It's not a normal setup because it's a minimization branch. You can see a less minimized project structure including tests (but still single-module) here: {code:java} git checkout a288b4cd4ce67308ffd3a768f3a4a25efc31cf6a {code} I do verify that it compiles if i make DoesntCompile::f package-private (even though I don't understand why). But if try that in a288b4cd4ce67308ffd3a768f3a4a25efc31cf6a, that's not a solution, since the test methods need to be public: {code:java} [INFO] --- maven-surefire-plugin:2.22.0:test (default-test) @ wires-support --- [WARNING] useSystemClassloader setting has no effect when not forking [INFO] Running fr.cla.wires.support.oo.Accumulable_PbtTest [ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.044 s <<< FAILURE! - in fr.cla.wires.support.oo.Accumulable_PbtTest [ERROR] initializationError(fr.cla.wires.support.oo.Accumulable_PbtTest) Time elapsed: 0.002 s <<< ERROR! java.lang.Exception: Method if_newVal_is_not_null_mutableEquivalentToInitially_should_be_equivalent_to_initially() should be public {code} About Java "protecting me from creating unusable classes", I don't see what you mean at all: * What do you mean "all exported classes must be usable"? Can you point me to some spec/definition? I thought that to be visible from another module a class had to be both public and in an exported package. So can I not have package-private classes in exported modules? * Same for "Java sees them as sharable module" I don't see what you mean in terms of requires/exports/opens. Or is that about the unnamed module/automatic modules? * Finally I don't see why a class should be exported to the same module. Or is that again about the unnamed module/automatic modules? * Is what you're saying specific to patching or is that a general rule? Does the nature of a module change when it's patched? > Module patching fails: case of simple single-module project > ----------------------------------------------------------- > > Key: MCOMPILER-354 > URL: https://issues.apache.org/jira/browse/MCOMPILER-354 > Project: Maven Compiler Plugin > Issue Type: Bug > Affects Versions: 3.7.0 > Environment: $ mvn -version > Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; > 2018-06-17T20:33:14+02:00) > Maven home: G:\software\apache-maven-3.5.4-bin\apache-maven-3.5.4 > Java version: 10.0.2, vendor: Oracle Corporation, runtime: C:\Program > Files\Java\jdk-10.0.2 > Default locale: fr_FR, platform encoding: Cp1252 > OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows" > Reporter: foo bar > Priority: Major > Labels: Jigsaw > Attachments: mvn-X-clean-install-FAILURE.log, project.png, wires.zip > > > Sometimes it can be difficult to setup maven test-scoped dependencies in a > Maven multi-module project. But I think I managed to find a simple 1-module > case where module patching doesn't work. > I have a single-module Java 10 project where the testCompile goal complains > that Test Class A doesn't read Test Class B, which is in the same project! > (but in a different package) > Of course, a class shouldn't need to be exported to a class of the same > module. So maybe there is a confusion somewhere between the unnamed module, > automatic modules, and explicit modules. > I think that's because of a bug in the module-patching flags passed by > testCompile to javac. > My project source tree, in its simplified branch to reproduce the issue, > looks shown in the project.png attachment. > Full log is attached as well as a zip of the issue reproduction branch. It > can also be cloned from: > {code:java} > git clone https://github.com/vandekeiser/wires.git > git checkout REPORT-MCOMPILER-2 > mvn clean install > {code} > The flags testCompile pass to javac. > {code:java} > [INFO] --- maven-compiler-plugin:3.7.0:testCompile (default-testCompile) @ > wires-support --- > [DEBUG] Command line options: > -d G:\projets\wires\wires\wires\wires-support\target\test-classes > -classpath G:\projets\wires\wires\wires\wires-support\target\test-classes; > --module-path G:\projets\wires\wires\wires\wires-support\target\classes; > -sourcepath G:\projets\wires\wires\wires\wires-support\src\test\java; > > G:\projets\wires\wires\wires\wires-support\target\generated-test-sources\test-annotations; > -s > G:\projets\wires\wires\wires\wires-support\target\generated-test-sources\test-annotations > -g -deprecation -target 10 -source 10 -encoding UTF-8 -Werror > -Xlint:all,-serial > --patch-module fr.cla.wires.support= > G:\projets\wires\wires\wires\wires-support\target\classes; > G:\projets\wires\wires\wires\wires-support\src\test\java; > > G:\projets\wires\wires\wires\wires-support\target\generated-test-sources\test-annotations; > --add-reads fr.cla.wires.support=ALL-UNNAMED > {code} > The warning I get (which for me is an error): > {code:java} > [WARNING] > /G:/projets/wires/wires/wires/wires-support/src/test/java/fr/cla/wires/support/DoesntCompile.java:[14,20] > class > fr.cla.wires.support.javac_complains_this_is_not_exported.JavacComplainsThisIsNotExported > in module fr.cla.wires.support > is not exported > [ERROR] COMPILATION ERROR : > warnings found and -Werror specified > [INFO] 1 error > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)