modulepath and classpath mixture

Richard Opalka ropalka at redhat.com
Tue Mar 22 22:39:35 UTC 2016


Hi,

    I just solved it by adding -Xmodule option:

javac -Xmodule:java.annotations.common -sourcepath src `find -type f 
-name *.java`

Rio

On 03/22/2016 11:29 PM, Richard Opalka wrote:
> Hi,
>
>    I'm experiencing the same problem locally.
> When trying to build Oracle provided maven artifact from sources, namely
>
> http://search.maven.org/#artifactdetails|javax.annotation|javax.annotation-api|1.2|jar 
>
>
> the build fails on JDK9 (with Jigsaw) with message:
>
> ./src/javax/annotation/Priority.java:42: error: package exists in 
> another module: java.annotations.common
> package javax.annotation;
> ^
> 1 error
>
> How is Jigsaw javac going to deal with such compilation scenarios?
>
> Rio
>
> On 03/22/2016 10:23 PM, Robert Scholte wrote:
>>> 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