On Mon, Dec 16, 2002 at 05:22:38PM +0000, Emmanuel Venisse wrote:
> I rename the thread for Pete.

Thanks, I would never have noticed otherwise!  See comments inlined
below.

> -----Message d'origine-----
> De: "Siegfried_G�schl" <[EMAIL PROTECTED]>
> A: "Turbine Maven Users List" <[EMAIL PROTECTED]>
> Date: 16/12/02
> Objet: Re: Rep:Re: Rep:New Maven Plugins available ...
> 
> I should call my plugin underjar since it uses the low-tech approach
> of unpacking all dependent JARs ... :-)

The uberjar plugin utilizes Classworlds, http://classworlds.werken.com,
courtesy of Bob and Jason.  Basically, uberjar packs all of your
project's dependencies into one super jar.  This super jar can then be
executed on the command line as follows:

    java -jar uber.jar

No need to distribute anything other than the single uberjar.
Everything else is taken care of automagically.  Ok, so not really,
a custom protocol handler and some bootstrap code do the real work.
Here is the layout of the uber jar:

    ./
        WORLDS-INF/
            classworlds.jar
            conf/
                classworlds.conf
            lib/
                myapp.jar
                dep1.jar
                dep2.jar
                dep3.jar
                ...
        com/
            werken/
                classworlds/
                    boot/
                        Bootstrapper.class
                        InitialClassLoader.class
                    protocol/
                        jar/
                            Handler.class
                            JarUrlConnection.class

You'll notice that your project and its dependencies are located in the
WORLDS-INF/lib directory (in JAR files).  You'll also notice the
classworlds JAR and configuration files, as well as the four werken
classes in the root of the uber jar.  These classes are the magic that
bootstraps classworlds which handles the setting of your classpath.  The
classpath includes all of the JARs in the lib directory by default.

> +) Does classworlds handlk the nasty mail.jar problem - mail 
> integration fails if I pack the mail.jar into the executable JAR - 
> blows up reading the configuration ... :-( 

I'd say give it a try.  The classpath is set to each of the JARs, for
example, I have log4j.properties file in the root of myapp.jar, and
log4j has no problem discovering it.

> +) Does uberjar supports the exclusion of JARs?! 

Not at the moment.  It packs all of your dependencies so that the
application can run standalone.  You can provide your own custom
classworlds.conf which you can groom to exclude certain JARs from the
classpath if needed.

Thanks,
Pete

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to