java - proyecto - ejecutar jar en cmd
La forma más fácil de combinar un lanzamiento en un archivo JAR (13)
(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>
¿Hay alguna herramienta o script que combine fácilmente un grupo de archivos JAR en un solo archivo JAR? Una ventaja sería establecer fácilmente el manifiesto del archivo principal y hacerlo ejecutable.
El caso concreto es una herramienta de texto reestructurada de Java . Me gustaría ejecutarlo con algo como:
java -jar rst.jar
Por lo que puedo decir, no tiene dependencias que indiquen que no debe ser una herramienta fácil de un solo archivo, pero el archivo ZIP descargado contiene muchas 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 puede ver, es algo deseable no necesitar hacer esto manualmente.
Hasta ahora solo he probado AutoJar y ProGuard, los cuales fueron bastante fáciles de ejecutar. Parece que hay algún problema con el grupo constante en los archivos JAR.
Aparentemente, el primero está ligeramente roto, así que intentaré arreglarlo. El archivo Maven pom.xml
aparentemente también se rompió, así que tendré que arreglarlo antes de solucionarlo ... Me siento como un imán de error :-)
Actualización: nunca llegué a arreglar esta aplicación, pero revisé el "asistente de exportación Runnable JAR" de Eclipse , que está basado en un JAR gordo. Encontré esto muy fácil de usar para implementar mi propio código.
Algunas de las otras excelentes sugerencias podrían ser mejores para las compilaciones en un entorno que no sea de Eclipse. Probablemente debería hacer una buena compilación usando Ant . (Maven, hasta ahora me acaba de dar dolor, pero a otros les encanta).
Asistente de exportación JAR ejecutable de Eclipse 3.4 JDT.
En Eclipse 3.5, esto se ha extendido. Ahora puede elegir cómo desea tratar sus archivos JAR referenciados.
Creo que la herramienta que necesitas aquí es JarSplice : http://ninjacave.com/jarsplice
No requiere Ant o Maven, tiene su propia GUI, es fácil de usar y hace exactamente lo que usted pidió -> Fusiona el contenido de varios archivos jar en uno solo (tenga en cuenta que aún necesita agregar su propio cargador de clases) )
Deberías usar el plugin maven shading para hacer eso. A menudo uso maven para construir un archivo jar independiente y es tan poderoso
Ver más:
http://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html
Después de haber probado algunas soluciones diferentes, encontré que One-Jar el más fácil de trabajar, y he logrado hacer exactamente eso: producir un único JAR ejecutable que contiene todo lo que necesito.
One-JAR utiliza un cargador de clases personalizado que puede navegar por los recursos anidados. Mire el archivo .bat en la descarga, parece que org.codelutin.jrst.JRST en el archivo jrst-0.8.1.jar es la clase principal, por lo que su manifiesto debería verse así:
Main-Class: com.simontuffs.onejar.Boot
One-Jar-Main-Class: org.codelutin.jrst.JRST
Lo realmente genial es que One-JAR se encargará de transmitir los argumentos de línea de comandos para usted. Classpath es manejado por el cargador de clases personalizado, suponiendo que todos los recursos que necesita están agrupados en el único JAR.
La forma más fácil de usar One-JAR es con hormiga; hay una tarea de hormiga personalizada "one-jar" que funciona de la siguiente manera (suponiendo que su manifiesto se llame "rst.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>
El zipfileset
de Ant hace el trabajo
<jar id="files" jarfile="all.jar">
<zipfileset src="first.jar" includes="**/*.java **/*.class"/>
<zipfileset src="second.jar" includes="**/*.java **/*.class"/>
</jar>
Hay ProGuard que no solo empaqueta sus archivos JAR en uno, sino que también puede optimizar, limpiar u ofuscar sus archivos de clase, haciendo que el archivo JAR resultante sea mucho más pequeño que la suma de todos los archivos JAR anteriores.
De hecho, probé ProGuard con la herramienta JRST, y es como informaste. Intenté rastrear el problema y descubrí que se relaciona con un error en la biblioteca de ICU4J al que hace referencia el primero. El problema es que la versión de la UCI utilizada está muy desactualizada en este momento. Así que reemplacé el archivo icu.jar con ICU4J versión 3.2. Ahora ProGuard encuentra un montón de otros errores / advertencias sobre incidencias con las bibliotecas de JRST.
Mi suposición es que ProGuard funciona como se esperaba, pero las bibliotecas de jrst simplemente no son consistentes. No sé si puede hacer mucho más que hablar con sus desarrolladores, ya que deberían verificar y actualizar las dependencias del proyecto.
Hay una herramienta llamada autojar que escaneará su bytecode y compilará un archivo .jar con las clases que encuentre, incluidas las clases referenciadas (importadas).
Sin embargo, no siempre funciona con algo como Spring, donde especificas los nombres de clases en la configuración y el marco los carga.
O utilizando el complemento Maven assembly (mvn assembly: assembly)
One-JAR 0.97 acaba de ser lanzado en One-Jar , y se ha ampliado con soporte para frameworks como Spring y Guice , que pueden presentar problemas para otros enfoques. También maneja la inversión de cargador de clases, donde algunos archivos JAR son externos al One-JAR (por ejemplo, controladores JDBC que pueden no estar empaquetados).
One-JAR es línea de comandos, con plugins Ant y Maven 2. También es fácil de construir simplemente usando la herramienta "jar".
También puedo recomendar el Eclipse Jar Exporter (Runnable) en el que Ference Hechler escribió: hizo un gran trabajo al idear un enfoque simple para envolver un conjunto de archivos JAR. Él y yo trabajamos en One-JAR, pero Jar Exporter se basa en una base de códigos diferente.
Parece que Apache Ant es lo que estás buscando.
Puede usar JarJar que utilizará sombreado de paquetes para asegurarse de que su archivo JAR no entre en conflicto con otros.
Si usted es un usuario de Maven , generalmente el plugin de ensamblaje hace lo que quiere, o potencialmente el plugin de sombra, y en algunos casos una combinación.
Con el complemento de ensamblaje, coloca un archivo de manifiesto en su proyecto con la configuración necesaria, aunque los valores predeterminados suelen ser bastante buenos. La construcción se hace con
mvn assembly:assembly
O si tiene más cosas especiales con las que lidiar, uno de los otros objetivos. Todos los archivos JAR que se incluyen son recogidos por el resolutor de dependencias de Maven. Si usa el plugin de sombreado, generalmente es parte del objetivo de instalación, y en un proyecto en particular que estoy haciendo ahora lo hago
mvn install
mvn assembly:single
El assembly:single
objetivo assembly:single
es solucionar los problemas de duración, en este caso en una aplicación de Spring .