Nos hemos encontrados con proyectos de librerías en java que dependen de archivos jar externos y que necesitamos ejecutar y no se encuentran las dependencias porque cuando se hizo el “Clean and Build” el crea dentro de la carpeta de distribución “dist” una carpeta “lib” que contiene las dependencias para que el proyecto se ejecute satisfactoriamente.

2015-03-01_164940

 

 

 

Pero lo que realmente se quiere es, solo generar un único archivo jar que contenga internamente las clases de las demás librerías de las que depende. Para esto se requiere agregar las siguientes lineas en el archivo  “build.xml”  del proyecto.

 <target name="package-for-store" depends="jar">
        <!-- Change the value of this property to be the name of your JAR,
             minus the .jar extension. It should not have spaces.
             <property name="store.jar.name" value="MyJarName"/>
        -->
        <property name="store.jar.name" value="biblioteca-biometria-upb"/>
        <!-- don't edit below this line -->
        <property name="store.dir" value="store"/>
        <property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
        <echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>
        <delete dir="${store.dir}"/>
        <mkdir dir="${store.dir}"/>
        <jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
            <zipgroupfileset dir="dist" includes="*.jar"/>
            <zipgroupfileset dir="dist/lib" includes="*.jar"/>
            <manifest>
                <attribute name="Main-Class" value="${main.class}"/>
            </manifest>
        </jar>
        <zip destfile="${store.jar}">
            <zipfileset src="${store.dir}/temp_final.jar"
                        excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
        </zip>
        <delete file="${store.dir}/temp_final.jar"/>
    </target>

Teniendo las anteriores líneas, solo es ejecutar la tarea “package-for-store”:

run-target

Si tiene alguna duda con gusto la atenderé al correo.

2 Replies to “Empaquetando único archivo jar con dependencias”

  1. Buenos días.

    Tengo el sgte error al intentar ejecutar la implementacion del codigo en netbean y en eclipse.

    Exception in thread “AWT-EventQueue-0” java.lang.ExceptionInInitializerError
    at org.bouncycastle.jcajce.provider.digest.GOST3411$Mappings.configure(Unknown Source)
    at org.bouncycastle.jce.provider.BouncyCastleProvider.loadAlgorithms(Unknown Source)
    at org.bouncycastle.jce.provider.BouncyCastleProvider.setup(Unknown Source)
    at org.bouncycastle.jce.provider.BouncyCastleProvider.access$000(Unknown Source)
    at org.bouncycastle.jce.provider.BouncyCastleProvider$1.run(Unknown Source)

  2. Saludos rafael!
    El poblema que veo es que no esta encontrando la libreria, el jar cuando lo esta empaquetando. verifique que efectivamente la libreria este en la carpeta lib del proyecto.
    Espero con esto colaborarte. Buen día.

Deja un comentario

Tu dirección de correo electrónico no será publicada.