jar installation standards

Nic Ferrier nferrier@tapsellferrier.co.uk
Mon Feb 25 13:30:00 GMT 2002


Per Bothner <per@bothner.com> writes:
> There are two approaches that appeal to me: 
>> (1) Just add every .jar in $prefix/share/java to the implied 
> (boot-)classpath. I.e. we treat the directory like Sun treats 
> its extensions directory. The advantage is simplicity for 
> installers, users, plus compativility with Sun's model. 
> The disadvantage is that one could imagine hundreds of jars 
> being installed, and opening and reading the directory of each of 
> these could be slow. On the other hand, if we only need to do the 
> search at compile-time, perhaps its not a big deal. Plus we can use 
> some heuritcs, perhaps built into gcj, to only open a jar if we 
> think we might need it (e.g. after searching libgcj). 
>> One complication is dealing with symlinks and versioning. If the 
> dirctory contains servlet-2.3.jar, servlet-2.1.jar, servlet-2.jar, 
> and servlet.jar (a symlink); the compiler should pick the least 
> specific one, i.e. servlet.jar, and skip the others. 
>> (2) Use package-style names, similar to what we do for .so files. 
> The search algorithm when searching for class foo.bar.Baz: 
> - Search the user classpath. 
> - Search libgcj.jar. 
> - Look for foo-bar.jar; if found search it. Otherwise, look for 
> foo.jar, and if found search it. The compiler should explicitly 
> resolve symlinks (rather than have the OS do it) in case two symlinks 
> (eg foo-bar1.jar and foo.bar2.jar) point to the same file. 

How about a variation on the first one? 
 Provide a variable EXTENSIONPATH which contains a list of the
 directories which include extensions. Each jar file in each
 extension directory is loaded on demand.
There would be a default EXTENSIONPATH which would be:
 /usr/share/java:/usr/local/share/java
What I would *really* like is just an -extpath option on the command
line where I could specify a path. An extpath is easily constructed.
Btw, it's also pretty easy to construct an extpath from a classpath,
I use this:
 gcj -classpath `ls /usr/local/share/java/*.jar | tr [:space:] :`
Nic 


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /