Why does 'javac' still support "-Xbootclasspath" in jdk9 ?

Volker Simonis volker.simonis at gmail.com
Thu May 4 08:28:01 UTC 2017


On Wed, May 3, 2017 at 9:43 PM, Jonathan Gibbons
<jonathan.gibbons at oracle.com> wrote:
> Volker,
>
> The general motivation was as much compatibility as possible with
> pre-existing command lines and scripts.  It has never been a goal for JDK 9
> javac to simplify/cleanup/remove options for the platform class path. Note
> we didn't add any new options for the platform class path; we just
> restricted their use to meaningful scenarios. (i.e. it doesn't make sense to
> use them when compiling against modules.)  All of these options will go away
> in the fullness of time, as a result of the 1 + "3 back" policy of JEP 247.
>

So be it :)

Thanks,
Volker

> -Xbootclasspath: has always been a synonym for -bootclasspath. See JDK 8
> javac -X.
>
> -Xbootclasspath/p: only has a meaning when compiling for older releases, and
> means the same as it always has.
>
> -Xbootclasspath/a: has meaning for all releases.  On older releases it means
> what it always has; on 9, it can be used in the runtime for adding agent
> classes, and because it makes sense for the runtime, it makes sense to
> continue to allow it for javac.
>
> -- Jon
>
>
>
>
> On 5/3/17 12:02 PM, Volker Simonis wrote:
>>
>> Sure, but for this we have the standard "-bootclasspath" option.
>>
>> Why do we need to additionally keep the unsupported "-Xbootclasspath"
>> versions? I think that's just confusing (by the way, they always have
>> been confusing :)
>>
>> Also, I don't see how "-Xbootclasspath/p" and "-Xbootclasspath/a"
>> would make any sense on Java 9?
>>
>>
>> On Wed, May 3, 2017 at 6:07 PM, Jonathan Gibbons
>> <jonathan.gibbons at oracle.com> wrote:
>>>
>>> Volker,
>>>
>>> Options to set the platform class path are still reasonable to use in
>>> conjunction with -target N, for older values of N.  javac will give an
>>> error
>>> if you try and use these options when compiling for a version that
>>> supports
>>> modules (i.e. 9 or greater.)
>>>
>>> -- Jon
>>>
>>>
>>>
>>> On 5/3/17 1:33 AM, Volker Simonis wrote:
>>>>
>>>> Hi,
>>>>
>>>> I've just realized, that in jdk9, javac still supports the following
>>>> three non-standard options:
>>>>
>>>>     -Xbootclasspath:<path>       Override location of bootstrap class
>>>> files
>>>>     -Xbootclasspath/a:<path>     Append to the bootstrap class path
>>>>     -Xbootclasspath/p:<path>     Prepend to the bootstrap class path
>>>>
>>>> In jdk9, only "-Xbootclasspath/a:<path>" is still supported by the
>>>> standard "java" launcher. The other two versions have been removed
>>>> from "java".
>>>>
>>>> For "javac", the "-Xbootclasspath" options have a different semantics
>>>> anyway - they don't specify the location of the bootstrap class files
>>>> for the compiler, but the location where the compiler finds the
>>>> bootstrap classes for the sour code it compiles. Therefore they are
>>>> only meaningful in combination with the -source/-target option.
>>>>
>>>> Now jdk9 comes with a new "--release" option, which doesn't require a
>>>> boot class path anymore. Additionally, "javac" supports the standard
>>>> "-bootclasspath" option since long time and it is the recommended way
>>>> of setting the boot class path if using the -source/-target option
>>>> ("-Xbootclasspath:<path>" is actually mapped to "-bootclasspath"
>>>> internally).
>>>>
>>>> Wouldn't it therefore make sense to completely remove the three
>>>> non-standard versions of the "-Xbootclasspath" option from "javac" in
>>>> jdk9?
>>>>
>>>> Thank you and best regards,
>>>> Volker
>>>
>>>
>


More information about the jdk9-dev mailing list