Manera más fácil de combinar una versión en un archivo JAR
-
09-06-2019 - |
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.)
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.