JAR files and manifest: Class-Path  
Author Message
Karsten Wutzke





PostPosted: 2004-1-7 0:25:00 Top

java-programmer, JAR files and manifest: Class-Path Hi!

I have a base dir, where the application JAR file resides. In this base
dir, there's also a lib dir, nothing special really. In this lib dir are
some user look and feel JAR files, which are supposed to be loaded when
the application is started via the JAR file.

Is there any way to use the Class-Path entry in the manifest, so that it
scans that ./lib directory and loads all the JARs in there, *without
knowing up-front, what these files are*?

I tried

Class-Path: ./lib
Class-Path: ./lib/
Class-Path: ./lib/*
Class-Path: ./lib/*.jar

but none of them work.

Maybe there's some other way, which I don't know of. I simply don't want
to explicitly deploy the JAR's (versions, size etc.).

Anyway, how do I do it?

Karsten


 
Manish Hatwalne





PostPosted: 2004-1-7 1:56:00 Top

java-programmer >> JAR files and manifest: Class-Path Have a look at this and see if it is helpful -
http://java.sun.com/developer/Books/javaprogramming/JAR/basics/manifest.html

Try
Class-Path: lib/

Should work.

HTH,
- Manish


"Karsten Wutzke" <email***@***.com> wrote in message
news:bteng6$rri$02$email***@***.com...
> Hi!
>
> I have a base dir, where the application JAR file resides. In this base
> dir, there's also a lib dir, nothing special really. In this lib dir are
> some user look and feel JAR files, which are supposed to be loaded when
> the application is started via the JAR file.
>
> Is there any way to use the Class-Path entry in the manifest, so that it
> scans that ./lib directory and loads all the JARs in there, *without
> knowing up-front, what these files are*?
>
> I tried
>
> Class-Path: ./lib
> Class-Path: ./lib/
> Class-Path: ./lib/*
> Class-Path: ./lib/*.jar
>
> but none of them work.
>
> Maybe there's some other way, which I don't know of. I simply don't want
> to explicitly deploy the JAR's (versions, size etc.).
>
> Anyway, how do I do it?
>
> Karsten
>
>


 
Karsten Wutzke





PostPosted: 2004-1-7 1:59:00 Top

java-programmer >> JAR files and manifest: Class-Path I had a look at this document before. Anyway, lib/ *doesn't* work.

Any other ideas? I need some kind of regular expression to include *all*
JAR's in a certain path.

Karsten


Manish Hatwalne wrote:

> Have a look at this and see if it is helpful -
> http://java.sun.com/developer/Books/javaprogramming/JAR/basics/manifest.html
>
> Try
> Class-Path: lib/
>
> Should work.
>
> HTH,
> - Manish
>
>
> "Karsten Wutzke" <email***@***.com> wrote in message
> news:bteng6$rri$02$email***@***.com...
>
>>Hi!
>>
>>I have a base dir, where the application JAR file resides. In this base
snip

 
 
Dave Glasser





PostPosted: 2004-1-7 11:10:00 Top

java-programmer >> JAR files and manifest: Class-Path Karsten Wutzke <email***@***.com> wrote on Tue, 06 Jan
2004 17:24:33 +0100 in comp.lang.java.programmer:

>Hi!
>
>I have a base dir, where the application JAR file resides. In this base
>dir, there's also a lib dir, nothing special really. In this lib dir are
>some user look and feel JAR files, which are supposed to be loaded when
>the application is started via the JAR file.
>
>Is there any way to use the Class-Path entry in the manifest, so that it
>scans that ./lib directory and loads all the JARs in there, *without
>knowing up-front, what these files are*?
>
>I tried
>
>Class-Path: ./lib
>Class-Path: ./lib/
>Class-Path: ./lib/*
>Class-Path: ./lib/*.jar
>
>but none of them work.
>
>Maybe there's some other way, which I don't know of. I simply don't want
>to explicitly deploy the JAR's (versions, size etc.).
>
>Anyway, how do I do it?

Check out my app QueryForm. It does exactly what you are trying to do,
but it doesn't use the manifest Class-Path mechanism. The homepage is
http://qform.sourceforge.net.

It uses a custom classloader to load all of the .jar and .zip files in
a directory called "drivers" which is below the directory where the
application jar file is. These jar files can contain JDBC drivers or
third-party look-and-feels. You load them into the classloader at
runtime like this:

ClassLoader loader = ExtensionClassLoader.getSingleton();
loader.addArchivesInDirectory(new File(pathToLibDirectory));

(See the code in org/glasser/qform/QForm.java for more details on how
it discovers the path to the lib (drivers) directory at runtime.)

Then, when you need a new look and feel, provided you have the class
name, you can do:

ClassLoader loader = ExtensionClassLoader.getSingleton();
Class lafClass = loader.loadClass(lafClassName);
LookAndFeel laf = (LookAndFeel) lafClass.newInstance();
UIManager.setLookAndFeel(laf);
UIManager.getDefaults().put("ClassLoader", lafClassgetClassLoader());
UIManager.getLookAndFeelDefaults().put("ClassLoader",
lafClass.getClassLoader());
SwingUtilities.updateComponentTreeUI(eachFrame);

The source for ExtensionClassLoader is in
org/glasser/util/ExtensionClassLoader.java. It's released under an
Apache-style license, so you can use it in a closed-source,
proprietary program if you want.


--
Check out QueryForm, a free, open source, Java/Swing-based
front end for relational databases.

http://qform.sourceforge.net
 
 
Thomas Schodt





PostPosted: 2004-1-7 18:27:00 Top

java-programmer >> JAR files and manifest: Class-Path Karsten Wutzke wrote:

> Is there any way to use the Class-Path entry in the manifest, so that it
> scans that ./lib directory and loads all the JARs in there, *without
> knowing up-front, what these files are*?

I doubt it.

> Maybe there's some other way, which I don't know of. I simply don't want
> to explicitly deploy the JAR's (versions, size etc.).

Can be done in a shell script.

[code]
#!/bin/sh

CP=.
for I in ./lib/*.jar
do
CP=$CP:$I
done
echo "java -classpath \"$CP\" MyClass"
[/code]