modulepath and classpath mixture
Jonathan Gibbons
jonathan.gibbons at oracle.com
Tue Feb 23 21:14:32 UTC 2016
On 02/23/2016 01:06 PM, Jonathan Gibbons wrote:
>
>
> 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
>
>
>
... but that being said, note that you don't have to list all the
modules on the module path. You only need to list root modules, and
javac will determine the transitive closure of all the necessary modules.
So, if you're writing tests in the unnamed module, to test a module M,
the chances are that you only need "-addmods M".
Alan wrote a separate email about different compilation scenarios. Note
that in many/most of those cases, no -addmods was necessary.
-- Jon
More information about the jigsaw-dev
mailing list