JAR files and manifest: Class-Path

Discussion in 'Java' started by Karsten Wutzke, Jan 6, 2004.

  1. 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, Jan 6, 2004
    #1
    1. Advertising

  2. 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" <> wrote in message
    news:bteng6$rri$02$-online.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
    >
    >
    Manish Hatwalne, Jan 6, 2004
    #2
    1. Advertising

  3. 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" <> wrote in message
    > news:bteng6$rri$02$-online.com...
    >
    >>Hi!
    >>
    >>I have a base dir, where the application JAR file resides. In this base

    snip
    Karsten Wutzke, Jan 6, 2004
    #3
  4. Karsten Wutzke

    Dave Glasser Guest

    Karsten Wutzke <> 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
    Dave Glasser, Jan 7, 2004
    #4
  5. 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"
    
    Thomas Schodt, Jan 7, 2004
    #5
  6. Karsten Wutzke

    hiwa Guest

    Karsten Wutzke <> wrote in message news:<bteng6$rri$02$-online.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


    Accoding to the tutorial at Sun's site, answer is:

    Class-Pass: lib/aaa.jar lib/bbb.jar lib/xyz.jar

    Point is: (1)use relative path
    (2)delimiter here is space
    hiwa, Jan 13, 2004
    #6
  7. Karsten Wutzke

    Ilya

    Joined:
    Jun 10, 2009
    Messages:
    1
    work around

    Maybe it would be useful for someone

    I have the same problem and i solved it so

    app.jar - my application
    lib/ - directory for extensions (jar files)

    suppose app.Main - main class

    to startup application you can invoke

    java -cp "app.jar:lib/*" app.Main

    --------------------------------------
    mail.ilja_at_yahoo.com
    Last edited: Jun 10, 2009
    Ilya, Jun 10, 2009
    #7
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Harpstein
    Replies:
    1
    Views:
    1,481
    Paul Beadle
    Oct 28, 2003
  2. hiwa
    Replies:
    3
    Views:
    8,411
    John C. Bollinger
    Jan 15, 2004
  3. Replies:
    1
    Views:
    2,338
  4. Replies:
    10
    Views:
    3,468
  5. Cameron McCormack
    Replies:
    0
    Views:
    355
    Cameron McCormack
    Aug 27, 2007
Loading...

Share This Page