Pregunta

Hay una herramienta o script que fácilmente se combina un montón de JAR archivos en un archivo JAR?Un bono sería establecer fácilmente el principal archivo de manifiesto y hacerlo ejecutable.

El caso concreto es un Java reestructurado de la herramienta de texto.Me gustaría correr con algo como:

java -jar rst.jar

Como lo que yo puedo decir, que no tiene dependencias que indica que no debe ser fácil de una sola herramienta de archivo, pero el archivo ZIP descargado contiene una gran cantidad de bibliotecas.

      0  11-30-07 10:01   jrst-0.8.1/
    922  11-30-07 09:53   jrst-0.8.1/jrst.bat
    898  11-30-07 09:53   jrst-0.8.1/jrst.sh
   2675  11-30-07 09:42   jrst-0.8.1/readmeEN.txt
 108821  11-30-07 09:59   jrst-0.8.1/jrst-0.8.1.jar
   2675  11-30-07 09:42   jrst-0.8.1/readme.txt
      0  11-30-07 10:01   jrst-0.8.1/lib/
  81508  11-30-07 09:49   jrst-0.8.1/lib/batik-util-1.6-1.jar
2450757  11-30-07 09:49   jrst-0.8.1/lib/icu4j-2.6.1.jar
 559366  11-30-07 09:49   jrst-0.8.1/lib/commons-collections-3.1.jar
  83613  11-30-07 09:49   jrst-0.8.1/lib/commons-io-1.3.1.jar
 207723  11-30-07 09:49   jrst-0.8.1/lib/commons-lang-2.1.jar
  52915  11-30-07 09:49   jrst-0.8.1/lib/commons-logging-1.1.jar
 260172  11-30-07 09:49   jrst-0.8.1/lib/commons-primitives-1.0.jar
 313898  11-30-07 09:49   jrst-0.8.1/lib/dom4j-1.6.1.jar
1994150  11-30-07 09:49   jrst-0.8.1/lib/fop-0.93-jdk15.jar
  55147  11-30-07 09:49   jrst-0.8.1/lib/activation-1.0.2.jar
 355030  11-30-07 09:49   jrst-0.8.1/lib/mail-1.3.3.jar
  77977  11-30-07 09:49   jrst-0.8.1/lib/servlet-api-2.3.jar
 226915  11-30-07 09:49   jrst-0.8.1/lib/jaxen-1.1.1.jar
 153253  11-30-07 09:49   jrst-0.8.1/lib/jdom-1.0.jar
  50789  11-30-07 09:49   jrst-0.8.1/lib/jewelcli-0.41.jar
 324952  11-30-07 09:49   jrst-0.8.1/lib/looks-1.2.2.jar
 121070  11-30-07 09:49   jrst-0.8.1/lib/junit-3.8.1.jar
 358085  11-30-07 09:49   jrst-0.8.1/lib/log4j-1.2.12.jar
  72150  11-30-07 09:49   jrst-0.8.1/lib/logkit-1.0.1.jar
 342897  11-30-07 09:49   jrst-0.8.1/lib/lutinwidget-0.9.jar
2160934  11-30-07 09:49   jrst-0.8.1/lib/docbook-xsl-nwalsh-1.71.1.jar
 301249  11-30-07 09:49   jrst-0.8.1/lib/xmlgraphics-commons-1.1.jar
  68610  11-30-07 09:49   jrst-0.8.1/lib/sdoc-0.5.0-beta.jar
3149655  11-30-07 09:49   jrst-0.8.1/lib/xalan-2.6.0.jar
1010675  11-30-07 09:49   jrst-0.8.1/lib/xercesImpl-2.6.2.jar
 194205  11-30-07 09:49   jrst-0.8.1/lib/xml-apis-1.3.02.jar
  78440  11-30-07 09:49   jrst-0.8.1/lib/xmlParserAPIs-2.0.2.jar
  86249  11-30-07 09:49   jrst-0.8.1/lib/xmlunit-1.1.jar
 108874  11-30-07 09:49   jrst-0.8.1/lib/xom-1.0.jar
  63966  11-30-07 09:49   jrst-0.8.1/lib/avalon-framework-4.1.3.jar
 138228  11-30-07 09:49   jrst-0.8.1/lib/batik-gui-util-1.6-1.jar
 216394  11-30-07 09:49   jrst-0.8.1/lib/l2fprod-common-0.1.jar
 121689  11-30-07 09:49   jrst-0.8.1/lib/lutinutil-0.26.jar
  76687  11-30-07 09:49   jrst-0.8.1/lib/batik-ext-1.6-1.jar
 124724  11-30-07 09:49   jrst-0.8.1/lib/xmlParserAPIs-2.6.2.jar

Como se puede ver, es algo deseable para que no tengas que hacer esto manualmente.

Hasta ahora sólo he probado AutoJar y ProGuard, ambos de los cuales fueron bastante fáciles de usar.Parece que hay algún problema con la constante de la piscina en los archivos JAR.

Al parecer jrst está un poco roto, así que voy a hacer un ir de la fijación.El Maven pom.xml archivo aparentemente estaba roto, así que voy a tener que arreglar eso antes de la fijación de jrst ...Me siento como un bicho-imán :-)


Actualización:Nunca me puse en torno a la fijación de la aplicación, pero comprobé Eclipse's "JAR Ejecutable asistente de exportación", que se basa en un TARRO de grasa.Me pareció muy fácil de usar para implementar mi propio código.

Algunos de los otros excelentes sugerencias podrían ser mejor para las generaciones en un no-entorno Eclipse, sos probablemente se debe hacer una buena build con Ant.(Maven, hasta ahora sólo me ha dado dolor, pero otros lo aman.)

¿Fue útil?

Solución

Eclipse 3.4 JDT del JAR Ejecutable asistente para la exportación.

En Eclipse 3.5, esta ha sido extendido.Ahora usted puede elegir cómo desea tratar su referencia a los archivos JAR.

Otros consejos

La hormiga zipfileset hace el trabajo

<jar id="files" jarfile="all.jar">
    <zipfileset src="first.jar" includes="**/*.java **/*.class"/>
    <zipfileset src="second.jar" includes="**/*.java **/*.class"/>
</jar>

Después de haber probado un par de soluciones diferentes, he encontrado Uno-JAR el más fácil de trabajar con, y han logrado hacer hacer exactamente eso:producir un único JAR ejecutable que contiene todo lo que necesitas.

Uno-JAR usa una clase personalizada de carga que se puede navegar de recursos anidados.Mira el .archivo bat en la descarga, se ve como la org.codelutin.jrst.JRST en el jrst-0.8.1.jar es la clase principal, por lo que el manifiesto debería tener este aspecto:

Main-Class: com.simontuffs.onejar.Boot
One-Jar-Main-Class: org.codelutin.jrst.JRST

Lo genial es que Un bote se va a manejar pasar en los argumentos de línea de comandos para usted.El classpath es manejado por la costumbre cargador de clases, asumiendo que todos los recursos necesarios están incluidos en el único FRASCO.

La manera más fácil de utilizar de Un FRASCO con hormigas;existe una costumbre de "un frasco de" ant tarea que funciona de la siguiente manera (suponiendo que el manifiesto se llama "primera.mf"):

<target name="jar-rst">
    <one-jar destfile="rst.jar" manifest="rst.mf">
        <main jar="jrst-0.8.1.jar" />
        <lib>
            <fileset dir="${pathToJars}">
                <include name="batik-util-1.6-1.jar" />
                <include name="icu4j-2.6.1.jar" />
                <include name="commons-collections-3.1.jar" />
                <!-- Snip -->
            </fileset>
        </lib>
    </one-jar>
</target>

Si usted es un Maven usuario, normalmente la asamblea plugin que haga lo que desee, o potencialmente a la sombra plugin, y en algunos casos una combinación de ambos.

Con la asamblea plugin de poner un archivo de manifiesto en su proyecto con los ajustes necesarios, aunque los valores por defecto son por lo general bastante buena.La construcción se realiza con

mvn assembly:assembly

O si tienes más cosas especiales para lidiar con uno de los otros objetivos.Todos los archivos JAR para incluir, son recogidos por la Experta en dependencia de resolución.Si utiliza la sombra plugin, es típicamente parte de la instalación de la meta, y en un determinado proyecto en el que estoy haciendo ahora tengo que hacer

mvn install
mvn assembly:single

El assembly:single la meta es trabajar en torno a cuestiones de la vida, en este caso en un La primavera aplicación.

Puede utilizar JarJar que va a utilizar el paquete de sombreado para asegurarse de que su archivo JAR no entra en conflicto con los demás.

Hay ProGuard que no sólo su paquete de archivos JAR en uno, pero también puede optimizar, limpiar o borramos los archivos de clase, haciendo que la resultante archivo JAR mucho menor que la suma de todos los archivos JAR antes.

De hecho, me trató ProGuard con el JRST herramienta, y es como se informó.Traté de localizar el problema y se encontró que se refiera a un error en el ICU4J biblioteca de referencia jrst.El problema es que la UCI versión es mucho obsoleto ahora.Así que sustituye el icu.jar archivo con ICU4J la versión 3.2.Ahora ProGuard encuentra un montón de errores/advertencias acerca de incosistencies con las bibliotecas de JRST.

Mi conjetura es que ProGuard funciona como se esperaba, pero las bibliotecas de jrst no son consistentes.No sé si se puede hacer mucho más que hablar con sus desarrolladores, ya que debe revisar y actualizar las dependencias del proyecto.

(basado en Andrian s):

<jar id="files" jarfile="all.jar">
  <zipgroupfileset dir="${library.dir}" includes="*.jar" excludes="test-helper.jar"/>
  <zipfileset src="first.jar" includes="**/*.java **/*.class"/>
  <zipfileset src="second.jar" includes="**/*.java **/*.class"/>
  <fileset dir=".">
    <include name="LICENSE"/>
    <include name="NOTICE"/>
  </fileset>
</jar>

Uno-JAR 0.97 ha sido puesto en libertad en http://one-jar.sourceforge.net, y se ha ampliado con el apoyo de marcos, tales como La primavera y Guice, que pueden presentar problemas a otros enfoques.También controla el cargador de clases-inversión-donde algunos archivos JAR externos a la de Un FRASCO (por ejemplo, JDBC los conductores que no pueden ser enviados incluido).

De un FRASCO es de línea de comandos, con Ant y Maven 2 plugins.También es sencillo de construir, utilizando sólo el "tarro" de la herramienta.

También puedo recomendar el Eclipse Frasco Exportador (Ejecutables) en el que Ference Hechler escribió:él hizo un gran trabajo en venir para arriba con un enfoque simple para envolver un conjunto de archivos JAR.Él y yo trabajamos en Una JARRA, pero el Frasco Exportador está basado en el código base.

Hay una herramienta llamada autojar que va a escanear su código de bytes y compilar un .archivo jar con las clases que se encuentra, incluidos los que se hace referencia (importado) clases.

No siempre funciona con algo parecido a la Primavera, aunque, en la que se especifican los nombres de clases en la configuración y se cargó por el marco.

O el uso de Maven de la asamblea plugin (mvn de la asamblea:la asamblea)

Creo que la herramienta que usted necesita aquí es JarSplice: http://ninjacave.com/jarsplice

No no requieren Ant o Maven, tiene su propia interfaz gráfica de usuario, es fácil de usar y hacer exactamente lo que usted preguntó --> Se Combina el contenido de varios archivos jar en una sola (tenga en cuenta que todavía tiene que agregar su propio cargador de clases).

Usted debe usar maven sombreado plugin para hacer eso.Yo a menudo el uso de maven para construir independiente de los archivos jar y es tan poderosa

Ver más:

http://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html

Suena como Apache Ant es lo que estás buscando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top