modulepath and classpath mixture

Jonathan Gibbons jonathan.gibbons at oracle.com
Tue Feb 23 21:06:28 UTC 2016



On 02/23/2016 12:48 PM, Robert Scholte wrote:
> On Tue, 23 Feb 2016 01:52:50 +0100, Jonathan Gibbons 
> <jonathan.gibbons at oracle.com> wrote:
>
>>
>>
>> On 02/22/2016 12:44 PM, Robert Scholte wrote:
>>> Hi,
>>>
>>> first of all I'd like to say that I'm very pleased with the new -mp 
>>> options, these matches better with the way Apache Maven would like 
>>> to work with jars and class-folders.
>>>
>>> Here's my use case: I noticed that if I add a module-info to 
>>> src/main/java and put all compile-scoped dependencies to the module 
>>> path, all compiles fines.
>>> I assume that developers are less interested in adding a 
>>> module-info.java file to src/test/java, so that's what I'm doing 
>>> right now too.
>>> Now it seems that I *must* add compile + test scoped to the 
>>> *classpath* to be able to compile the test classes.
>>> My first approach was to leave the compile-scoped dependencies on 
>>> the modulepath and all test-scoped dependencies on the classpath, so 
>>> the modules keeps their inner related structure, but it seems that 
>>> the classpath classes cannot access the modulepath classes.
>>>
>>> I'm looking for the confirmation that putting all dependencies on 
>>> the classpath is indeed the right approach in this case.
>>>
>>> thanks,
>>> Robert
>>
>> Robert,
>>
>> We definitely need some more detailed notes on setting up javac 
>> compilations (note to self!) but one thing to note is that by 
>> default, the unnamed module (i.e. code on the classpath) only has 
>> observability of the modules in the system image. To make modules on 
>> the module path observable, you need to use the -addmods option.
>>
>> -- Jon
>
> Hi Jonathan,
>
> this would indeed explain what I'm facing right now. However, adding 
> -addmods gives me the following exception:
> Caused by: java.lang.IllegalArgumentException: -addmods requires an 
> argument
>         at 
> com.sun.tools.javac.main.Arguments.error(jdk.compiler at 9-ea/Arguments.java:708)
>
> Is -addmods followed by the same entries as -modulepath or by the 
> modulenames. I really hope it is not the latter, because that would 
> mean that I first need to discover and read all module-info files.
>
> thanks,
> Robert

Sorry, I should have been more explicit.

Both javac and java (the launcher) accept an option "-addmods 
<module-name>,..." which can be used to name modules to be included in 
the module graph.   Confusingly, for javac, the option is listed under 
javac -X (that's a bug we will fix), but setting that aside, here's what 
the command line help says:

   -addmods <modulename>[,<modulename>...] Root modules to resolve in 
addition to the initial modules

"java -help" says effectively the same.


So yes, the option takes a list of module names, not module paths.

-- Jon





More information about the jigsaw-dev mailing list