United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
JDK-4758537 : javac should access classes on the endorsed standards path

Details
Type:
Enhancement
Submit Date:
2002-10-05
Status:
Resolved
Updated Date:
2003-11-11
Project Name:
JDK
Resolved Date:
2003-11-11
Component:
tools
OS:
solaris_8
Sub-Component:
javac
CPU:
sparc,generic
Priority:
P2
Resolution:
Fixed
Affected Versions:
1.4.0,1.4.1
Fixed Versions:
5.0 (b28)

Related Reports
Duplicate:
Duplicate:

Sub Tasks

Description
See
    http://java.sun.com/j2se/1.4/docs/guide/standards/
for a new path from which java loads classes.  Javac doesn't load classes
from there (it should).  Once it does there should be a way to specify 
and override the location for cross compiling.

                                    

Comments
CONVERTED DATA

BugTraq+ Release Management Values

COMMIT TO FIX:
tiger-beta

FIXED IN:
tiger-beta

INTEGRATED IN:
tiger-b28
tiger-beta


                                     
2004-06-14
PUBLIC COMMENTS

...
                                     
2004-06-10
EVALUATION

It would have been nice if the folks who came up with this endorsed standards
path had consulted us early on to get this in 1.4.  As it stands, we cannot
make such a major change to the compiler until a dot release, i.e. 1.5.

###@###.### 2002-10-17

We will examine the java.endorsed.dirs system property,
and add the -endorseddirs cross-compilation flag,
analagous to the existing -extdirs.

The search path will be the same as java's

###@###.### 2003-10-03

After further analysis, there were other path-related options
where the behavior of java and javac were not maximally compatible.

The scope of the bug fix has been explanded to also implement those.

Here is the specification for the full set of changes:

4758537:  Maximize compatibility of path searching options between javac and java
 
Release:  tiger
Type:  feature
Manager:  jerry.driscoll
Engineer:  martin.buchholz
State:  approved
Decision:  approved
 
Problem
Many users of Java use the "javac" command to compile to .class files, then
use the "java" command to execute those .class files.  For consistent
semantics, and to minimize runtime surprises,
it is best for both commands to use similar algorithms for
finding class files.
 
"java" has these options for specifying the bootclasspath:
-Xbootclasspath/p:<path>
-Xbootclasspath:<path>
-Xbootclasspath/a:<path>
 
Rather embarrassingly, "javac" supports -Xbootclasspath/p:<path>, but
not -Xbootclasspath/a:<path> or -Xbootclasspath:<path>.
(although -bootclasspath <path> is mostly equivalent to -Xbootclasspath:<path>)
 
The semantics of the command
"java -Xbootclasspath/p:<path> -Xbootclasspath:<path>"
is surprisingly and subtly different from
"javac -Xbootclasspath/p:<path> -bootclasspath <path>"
"java" ignores its first argument, "javac" does not.
 
"java" supports the system property java.ext.dirs to modify the
endorsed standards path.  From the command line that looks like
"java -Djava.endorsed.dirs=<dirs>"
However, "javac" has no options to modify the endorsed standards path.
 
Both "java" and "javac" allow users to specify the extensions dirs.
However, users need to specify different options, as follows:
"java -Djava.ext.dirs=<dirs>"
"javac -extdirs <dirs>"
As a convenience to the user, it would be good for "javac" to also
recognize the specific flag -Djava.ext.dirs=<dirs>, and
similarly -Djava.endorsed.dirs=<dirs>.  This proposal does not suggest
recognizing any other flags of the form -Dfoo=bar.
 
Requestors
Neal Gafter
Martin Buchholz
 
Solution
Add new "javac" command line flags, and modify slightly the behavior of
-bootclasspath.
 
-Xbootclasspath/a:<path>
This new non-standard option appends to the bootclasspath, analagous to
java's -Xbootclasspath/a:<path>
 
-Xbootclasspath:<path>
This new non-standard option is merely a command-line alias for
-bootclasspath <path>, (equivalent in every way)
for compatibility with "java".
 
-endorseddirs <dirs>
This new standard option specifies the endorsed standards path.
The name of the option is consistent with the existing
-extdirs <dirs>
option.  Note: a previous version of this proposal suggested the name
"-endorsedpath", but "-endorseddirs" is more consistent.  The endorsed
standards path is a list of directories, like -extdirs, not a list of
directories and jar files, like -bootclasspath <path>.
 
-Djava.endorsed.dirs=<dirs>
This new non-standard option is merely a command line alias for
-endorseddirs <dirs>
(equivalent in every way)
 
-Djava.ext.dirs=<dirs>
This new non-standard option is merely a command line alias for
-extdirs <dirs>
(equivalent in every way)
 
Any use of the -Xbootclasspath: or -bootclasspath options cancels any
previously specified -Xbootclasspath/p: or -Xbootclasspath/a: options,
just like java.  This proposal expresses no opinion on whether java's
behavior is a good idea, merely that javac should slavishly copy it.
 
 
#----------------------------------------------------------------
# The search order for classes used by both java and javac will be:
#
# -Xbootclasspath/p:<path>
# -endorseddirs <dirs> or -Djava.endorsed.dirs=<dirs> (search for jar/zip only)
# -bootclasspath <path> or -Xbootclasspath:<path>
# -Xbootclasspath/a:<path>
# -extdirs <dirs> or -Djava.ext.dirs=<dirs> (search for jar/zip only)
# -classpath <path>, -cp <path>, env CLASSPATH=<path>
#----------------------------------------------------------------
 
 
 
The following are clarifications only, and are *not* changes in
behavior proposed here:
 
#----------------------------------------------------------------
# Peculiarities of the class file search:
# - Empty elements of the (user) classpath default to ".",
#   while empty elements of other paths are ignored.
# - Only for the user classpath is an empty string value equivalent to "."
#----------------------------------------------------------------
 
The "user classpath" is the path specified by the
-classpath flag, or its alias -cp, or if neither of those is specified,
the CLASSPATH environment variable, or if that is also not specified,
the default value "."
 
If multiple logically equivalent options are specified, the last
specified option wins.  For example, both
  -Djava.endorsed.dirs=/foo -endorseddirs /bar
  -endorseddirs /foo -Djava.endorsed.dirs=/bar
are equivalent to
  -endorseddirs /bar
 
Interface summary
exported     external     option     javac -endorseddirs <dirs>
javac -Xbootclasspath/a:<path>
javac -Xbootclasspath:<path>
javac -Djava.ext.dirs=<dirs>
javac -Djava.endorsed.dirs=<dirs>
javac -Xbootclasspath/p:<path>
 
Specification
javac -X will document (among others) these options:
 
  -Xbootclasspath/p:<path>   Prepend to the bootstrap class path
  -Xbootclasspath/a:<path>   Append to the bootstrap class path
  -Xbootclasspath:<path>     Override location of bootstrap class files
  -Djava.ext.dirs=<dirs>     Override location of installed extensions
  -Djava.endorsed.dirs=<dirs>Override location of endorsed standards
 
javac -help will document (among others) these options:
 
  -classpath <path>          Specify where to find user class files
  -cp <path>                 Specify where to find user class files
  -sourcepath <path>         Specify where to find input source files
  -bootclasspath <path>      Override location of bootstrap class files
  -extdirs <dirs>            Override location of installed extensions
  -endorseddirs <dirs>       Override location of endorsed standards

###@###.### 2003-10-31
                                     
2003-10-31



Hardware and Software, Engineered to Work Together