¿Cómo crear un archivo jar con estructura de paquete?

5 minutos de lectura

Avatar de usuario de Anderson
anderson

Tengo una estructura de carpetas.

/com/cdy/ws/a.class files
/com/cdy/ws/b.class files
/com/cdy/ws/c.class files

Cuando ejecuto el siguiente comando “jar cvf asd.jar * .class”, me da jar con todos los archivos de clase. Pero la estructura de carpetas no se genera. Todos los archivos de clase deben estar en “com.cdy/ws”, pero todas las clases están en el mismo nivel de META-INF. ¿Alguien puede decirme cuál es el comando para generar la estructura del paquete?

Gracias

Avatar de usuario de Adam Batkin
adam batkin

Debe comenzar a crear el JAR en el raíz de los archivos

Entonces, por ejemplo:

jar cvf program.jar -C path/to/classes .

Eso supone que path/to/classes contiene la com directorio.

FYI, en estos días es relativamente poco común para la mayoría de las personas usar el jar comando directamente, ya que usarán una herramienta de compilación como Hormiga o Experto para encargarse de eso (y otros aspectos de la construcción). Vale la pena el esfuerzo de permitir que una de esas herramientas se encargue de todos los aspectos de su compilación, y es aún más fácil con un buen IDE para ayudar a escribir el build.xml (hormiga) o pom.xml (Maven).

  • Estaba confundido por esta respuesta al principio. Hacerlo un poco más concreto puede ayudar a otros: si sus archivos de clase están en carpeta1/carpeta2/carpeta3/com/ejemplo/prueba, y desea que la estructura del paquete sea com.ejemplo.prueba, el comando debe ser jar cvf program.jar -C folder1/folder2/folder3 . (El punto es parte del comando, por supuesto).

    – hBrent

    14 mayo 2014 a las 19:46

  • @Adam Batkin Por favor, ¿podría ayudarme a construir un frasco a partir de este código fuente? github.com/upictec/org.json.me Probé tus instrucciones. Incluso instalé maven, pero aún no puedo obtener el jar: S

    – remolino

    24 de mayo de 2014 a las 1:59

  • @hBrent ¿Qué significa el último . ¿significar?

    – smwikipedia

    20 de diciembre de 2014 a las 12:56

  • @smwikipedia Significa construir el jar a partir de todos los archivos en la ruta especificada (similar a usar *.* en otros contextos). Si solo quisiera incluir archivos específicos, creo que podría especificar nombres de archivos o partes de nombres de archivos en lugar del punto. (Creo que puede, por ejemplo, incluir solo archivos con una determinada extensión, pero dado que esta no es mi área de especialización, no estoy seguro de cuál sería la sintaxis).

    – hBrent

    20 de diciembre de 2014 a las 21:46


  • @iamcreasy Funcionará, pero es una buena idea seguir la convención generalmente aceptada de terminar los archivos JAR con .jar. De esta manera, sabrá qué contienen los archivos, las herramientas de terceros pueden encontrar fácilmente los archivos JAR, los nuevos miembros del equipo no se confundirán, etc.

    –Adam Batkin

    24 de abril de 2015 a las 17:38

Usted quiere

$ jar cvf asd.jar .

para especificar el directorio (p. ej. .) a jar de. Eso mantendrá su estructura de carpetas dentro del archivo jar.

Desde el directorio que contiene el com carpeta:

$ jar cvf asd.jar com
added manifest
adding: com/(in = 0) (out= 0)(stored 0%)
adding: com/cdy/(in = 0) (out= 0)(stored 0%)
adding: com/cdy/ws/(in = 0) (out= 0)(stored 0%)
adding: com/cdy/ws/a.class(in = 0) (out= 0)(stored 0%)
adding: com/cdy/ws/b.class(in = 0) (out= 0)(stored 0%)
adding: com/cdy/ws/c.class(in = 0) (out= 0)(stored 0%)

$ jar -tf asd.jar 
META-INF/
META-INF/MANIFEST.MF
com/
com/cdy/
com/cdy/ws/
com/cdy/ws/a.class
com/cdy/ws/b.class
com/cdy/ws/c.class

  • Gracias… Obtuve la estructura del paquete después de ejecutar el comando anterior 🙂

    – Anderson

    9 de agosto de 2013 a las 12:39

  • @Daniel Por favor, ¿podría ayudarme a construir un jar a partir de este código fuente github.com/upictec/org.json.me Probé sus instrucciones. Incluso instalé maven, pero aún no puedo obtener el jar: S

    – remolino

    24 de mayo de 2014 a las 2:00

Avatar de usuario de Vinayak Dornala
Vinayak Dornala

Paso 1: vaya al directorio donde se guardan las clases usando el símbolo del sistema (o el indicador de shell de Linux)
Me gusta para Proyecto.
C:/workspace/MyProj/bin/classess/com/test/*.class

Vaya al directorio bin usando el comando:

cd C:/workspace/MyProj/bin

Paso 2: use el siguiente comando para generar el archivo jar.

jar cvf helloworld.jar com\test\hello\Hello.class  com\test\orld\HelloWorld.class

Usando el comando anterior, las clases se colocarán en un contenedor en una estructura de directorio.

Avatar de usuario de Swati Pisal
swati pisal

Su nombre de carpeta especificado debe estar en C:\Program Files\Java\jdk1.7.0_02\bin ruta Nombre de carpeta que tiene archivos de clase.

C:\Program Files\Java\jdk1.7.0_02\bin>jar cvf program1.jar Foldername

Ahora program1.jar se creará en C:\Program Files\Java\jdk1.7.0_02\bin path

Avatar de usuario de Shib
Shib

este código de abajo me dio la respuesta correcta

jar cvf MyJar.jar *.properties lib/*.jar -C bin .  

agregó el archivo de propiedades (log4j), agregó los archivos jar en lib. y luego entró en bin para recuperar los archivos de clase con el paquete.

Avatar de usuario de Arif Mustafa
arifmustafa

Simplemente más que arriba –

  1. Mantenga el contenido de su paquete Java dentro de un directorio y asegúrese de que no haya nada dentro excepto sus paquetes Java y sus clases Java correspondientes.

  2. Abra el símbolo del sistema (si es Windows), acceda a la ruta del directorio contenedor como se muestra a continuación:

    C:> cd “C:\Usuarios\UsuarioABC\Descargas\Carpeta actual”

    C:\Usuarios\UsuarioABC\Descargas\Carpeta actual>jar cvf hello-world-1.0.1.jar .

¿Ha sido útil esta solución?