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

Jonathan Gibbons jonathan.gibbons at oracle.com
Wed May 3 19:46:16 UTC 2017



On 5/3/17 12:43 PM, Jonathan Gibbons 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.

Sorry, that should have been JEP 182.

>
> -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