modulepath and classpath mixture
Robert Scholte
rfscholte at apache.org
Tue Mar 22 21:23:44 UTC 2016
> maven-builder-support/src/test/java/org/apache/maven/building/DefaultProblemTest.java:[1,1]
> package exists in another module: maven.builder.support
Just wondering, is this the expected behavior?
DefaultProblemTest is on the *classpath* and I wouldn't expect that these
entries would have any effect on the modulepath entries. I would expect
that the packages between modules are checked, and that all these packages
are exposed to the classpath; no extra check if classpath packages are in
conflict with module packages.
The message says ' in *another* module', but this directory is not a
module, which makes it extra confusing.
thanks,
Robert
On Thu, 17 Mar 2016 20:51:32 +0100, Robert Scholte <rfscholte at apache.org>
wrote:
> Hi,
>
> it seems that simply adding -addmods ALL-MODULE-PATH isn't enough to
> compile the test-sources, and some already referred to it.
>
> Here's the compiler error:
> maven-builder-support/src/test/java/org/apache/maven/building/DefaultProblemTest.java:[1,1]
> package exists in another module: maven.builder.support
>
> Let me quote Alan from one of the first responses on this thread:
> "For the tests then I assume they are in the same packages as the
> sources under src/main/java, is that right?
>
> In that case I think you will want to compile the tests as if they are
> part of the module:
>
> javac -Xmodule:m -d testclasses/m -mp m.jar test/java/...
>
> where m is the module name and the module (with sources in
> src/main/java) has already been compiled and then packaged as m.jar. The
> -Xmodule:<module> option tells the compiler that you compiling the test
> classes as if they are part of module m. There is no module-info.java in
> the test tree."
>
> To me it seems like the need for knowing the module name keeps returning.
> This increases the need for a proper implementation of the
> maven-compiler-plugin as a multirelease JAR.
> The pattern as shown during FOSDEM showed that the idea works, but it is
> not solid enough.
> And the next question would be: can Maven (or actually Plexus
> ClassWorld) handle this?
>
> I'll need to work out the things to be done and try to get more Maven
> developers involved.
>
> thanks,
> Robert
>
> On Wed, 16 Mar 2016 21:55:01 +0100, <mark.reinhold at oracle.com> wrote:
>
>> 2016/2/27 3:25 -0800, rfscholte at apache.org:
>>> I noticed[1] that -addmods already has a special option: ALL-SYSTEM
>>> What I'm looking for is something like ALL-MP or ALL-MODULEPATH, which
>>> simply exposes all modules on the modulepath to the classpath. The set
>>> of
>>> moduleEntries on the modulePath are already chosen with care and are in
>>> the end all required to be able to compile the test-classes without the
>>> need of knowing the name of the module being used to compile with.
>>
>> We added a special ALL-MODULE-PATH token to the -addmods option, with
>> this description now in JEP 261 (http://openjdk.java.net/jeps/261):
>>
>> As a further special case, if `<module>` is `ALL-MODULE-PATH` then all
>> observable modules found on module paths are added to the root set.
>> `ALL-MODULE-PATH` is valid at compile time when compiling classes in
>> the
>> unnamed module, and at run time when the main class of the
>> application is
>> loaded from the class path into the unnamed module.
>>
>> This change is in Jigsaw EA build #4647 (https://jdk9.java.net/jigsaw/).
>> Please try it out and let us know what you think.
>>
>> - Mark
More information about the jigsaw-dev
mailing list