desde - ¿Cómo se usa ant para abrir archivos JAR múltiples y reconstruirlos en un archivo JAR?
crear war con ant (4)
Me gustaría abrir varios archivos JAR y luego reconstruir en un JAR utilizando un script de compilación ant. es posible?
Sí lo es !
Tienes dos posibilidades:
- Espen respuesta:
Una posible solución que crea un archivo jar de todos los archivos jar en un directorio dado:
<target name="dependencies.jar">
<jar destfile="WebContent/dependencies.jar">
<zipgroupfileset dir="lib/default/" includes="*.jar"
excludes="*.properties" />
</jar>
</target>
Esto es útil si no necesita excluir el contenido que se encuentra en algunos archivos jar (como, por ejemplo, un archivo de configuración de propiedades que podría anular el suyo, etc.). Aquí, las propiedades excluidas están filtrando los archivos de la propiedad dir.
- Utilizar zipfileset
La otra solución es usar la etiqueta zipfileset donde la propiedad exclude esta vez filtrará el contenido del archivo jar para ser fusionado.
<jar destfile="your_final_jar.jar" filesetmanifest="mergewithoutmain">
<manifest>
<attribute name="Main-Class" value="main.class"/>
<attribute name="Class-Path" value="."/>
</manifest>
<zipfileset
excludes="META-INF/*.SF"
src="/path/to/first/jar/to/include.jar"/>
</jar>
- Por supuesto, puede combinar las dos etiquetas (zipfileset y zipgroupfileset) dentro de la misma etiqueta jar para obtener lo mejor de las dos.
Sí, es posible con la hormiga. Un archivo jar es básicamente un archivo zip con un archivo de manifiesto especial. Así que para abrir, necesitamos descomprimir los frascos. Ant incluye una tarea de unzip .
Para descomprimir / descomprimir todos los archivos jar en su proyecto:
<target name="unjar_dependencies" depends="clean">
<unzip dest="${build.dir}">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</unzip>
</target>
Obviamente, primero debe declarar $ {build.dir} y $ {lib.dir}. La línea <include name="**/*.jar" />
le dice a ant que incluya todos los archivos que terminan con la extensión de jar, que puede modificar para incluirlos según sus necesidades.
Para empaquetar todo en un frasco, utiliza la tarea jar :
<target name="make_jar" depends="compile, unjar_dependencies">
<jar basedir="${build.dir}"
destfile="${dist.dir}/${project_name}.jar">
<manifest>
<attribute name="Main-Class" value="${mainclass}" />
</manifest>
<fileset dir="${build.dir}">
<include name="**/*.class" />
</fileset>
<fileset dir="${src.dir}">
<include name="applicationContext.xml" />
<include name="log4j.properties" />
</fileset>
</jar>
</target>
En este ejemplo, incluimos diferentes conjuntos de archivos. En un conjunto de archivos estamos incluyendo todas las clases compiladas. En otro conjunto de archivos incluimos dos archivos de configuración de los que depende este proyecto en particular.
Si es posible.
Una posible solución que crea un archivo jar de todos los archivos jar en un directorio dado:
<target name="dependencies.jar">
<jar destfile="WebContent/dependencies.jar">
<zipgroupfileset dir="lib/default/" includes="*.jar"
excludes="*.properties" />
</jar>
</target>
También hay un proyecto dedicado a volver a empaquetar los tarros llamado JarJar . Puedes usarlo para volver a empaquetar varios Frascos en uno. Dependiendo de sus requisitos, incluso puede cambiar el nombre de las clases para evitar conflictos de versión.
Desde su página de inicio :
En este ejemplo, incluimos clases de jaxen.jar y agregamos una regla que cambia cualquier nombre de clase que comience con "org.jaxen" para comenzar con "org.example.jaxen" (en nuestro mundo imaginario controlamos el dominio example.org) :
<target name="jar" depends="compile">
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask"
classpath="lib/jarjar.jar"/>
<jarjar jarfile="dist/example.jar">
<fileset dir="build/main"/>
<zipfileset src="lib/jaxen.jar"/>
<rule pattern="org.jaxen.**" result="org.example.@1"/>
</jarjar>
</target>