2012-03-30 21 views
38

Estaba escribiendo un programa simple usando una aplicación Java (no una aplicación que tiene proyectos, pero la aplicación dentro de un proyecto; .java) que tiene un solo marco. Ambos archivos son .java, así que no puedo escribir un manifiesto que necesita el JAR. MyApp.java comienza como una clase con paquete, importa luego la clase pública MyApp {y tiene una función principal, ¡pero sigue siendo .java! Lo estoy escribiendo en JDeveloper 11g si ayuda ...¿Cómo puedo hacer un JAR desde .java

¿Alguna idea de cómo crear un JAR a partir de estos archivos?

+1

Creo que esto puede lograrse mucho más fácilmente mediante el uso de herramientas de empaquetado como ANT o Maven – Churk

+0

de acuerdo con Chuck. Eche un vistazo a ANT. Los IDEs son geniales para desarrollar, pero debes entender cómo funcionan las cosas. Los archivos java se compilan a través de archivos javac to .class, luego de esto, los archivos .class se pueden empaquetar en un jar con el comando jar. (Ant tiene tareas para hacer esto, incluso jdeveloper tiene un asistente para hacer esto). – BigMike

+0

JDeveloper en sí debería tener la capacidad de crear archivos jar. Una rápida búsqueda en Google viene con un howto aquí: http://tompeez.wordpress.com/2011/06/01/creating-a-jar-file-in-jdeveloper/ – stolzem

Respuesta

15

Simplemente con la línea de comandos:

javac MyApp.java 
jar -cf myJar.jar myApp 

IDE Sure evitar el uso de terminal de línea de comandos

+7

Lo anterior funcionó, sin embargo, necesitaba especificar '.class' de myApp. Así que fue 'jar -cf myJar.jar myApp.class' – Navigatron

+2

Ortografía errores aquí también, y se supone que no hay declaración de paquete. No adecuado. – EJP

53

Abra un símbolo del sistema.

Ir al directorio donde tiene los archivos .java

Crear un directorio de construcción

proceso de compilación de Java desde la línea de comandos

javac -d ./build *.java 

si no hay errores, en la construcción directorio que debe tener su árbol de clase

mover al directorio de compilación y hacer un

jar cvf YourJar.jar * 

Para la adición de verificación en línea comando jar manifiesta interruptores

+0

He intentado compilar desde la línea de comandos, pero me sale un error: Frame1.java:23: el paquete oracle.jdeveloper.layout no existe ¿Cómo lo soluciono? Perdón por las preguntas de los novatos ... – user1303007

+0

tienes que compilar el classpath que hace referencia a todas las bibliotecas a las que te refieres en tus clases. Consulte con su instalación de jdeveloper, debería haber algún ejemplo de compilación de ant (archivo build.xml) y al menos un par de buenos tutoriales sobre cómo usar jDeveloper con ANT en el sitio de Oracle. – BigMike

+0

@ user1303007 échale un vistazo aquí http://www.oracle.com/technetwork/articles/adf/part4-098813.html – BigMike

4

Esto puede hacerse sin terminal, directamente desde el IDE. Netbeans, por ejemplo.

  1. Cree un proyecto separado con paquetes (Create Project - Java - Java Class Library).
  2. Pon tus clases .java allí.
  3. Cree este proyecto.
  4. Vaya a la carpeta de su proyecto y encuentre allí las carpetas de compilación y dist.
  5. Encuentra el archivo .jar en tu carpeta de dist.
  6. Obtenga su otro proyecto y agregue este archivo .jar a las bibliotecas de proyectos.
  7. Ahora puede hacer referencia a las clases desde esta biblioteca y sus métodos directamente desde el código, si la importación se realiza automáticamente.
2

A menudo tendrá que especificar un manifiesto, así:

jar -cvfm myJar.jar myManifest.txt myApp.class 

que dice: "crear detallado jarFilename manifestFilename", seguido de los archivos que desea incluir. Verbose significa imprimir mensajes sobre lo que está haciendo.

Tenga en cuenta que el nombre del archivo de manifiesto que proporciona puede ser cualquier cosa, ya que jar lo cambiará automáticamente de nombre y lo colocará en el directorio correcto dentro del archivo jar.

5

Ok esta es la solución que me hubiera gustado encontrar, en cambio aquí lo escribo:

En primer lugar crear la estructura de directorios que corresponde al paquete definido para el archivo .java, si es my.super.application crear el directorio "mi" y dentro de ella "super" y dentro de ella el archivo .java "App.java"

luego desde la línea de comandos:

javac -cp /path/to/lib1.jar:/path/to/lib2.jar path/to/my/super/App.java 

Aviso lo anterior incluirá varias bibliotecas, si es menor windows use "," para separar varios archivos otherwis e en condiciones de uso de GNU/Linux ":" Para crear un archivo jar

jar -cvfe App.jar App my/app/ 

lo anterior va a crear la aplicación con su correspondiente manifiesto que indica la aplicación como la clase principal.

No es posible incluir las bibliotecas requeridas dentro del archivo jar utilizando los parámetros de línea de comandos java o jar.

en su lugar puede:

  1. extraer manualmente las bibliotecas a la carpeta raíz del archivo jar
  2. utilizar un IDE como Netbeans e insertar una regla dentro de la sección posterior a la jarra de nbproject/build-impl. xml para extraer las bibliotecas dentro del contenedor. Vea abajo.
<target name="-post-jar"> 
     <!-- Empty placeholder for easier customization. --> 
     <!-- You can override this target in the ../build.xml file. --> 
    <jar jarfile="${dist.jar}" update="true"> 
      <zipfileset src="${dist.jar}" includes="**/*.class" /> 
      <zipfileset src="${file.reference.iText-1.0.8.jar}" includes="**/*"/> 
     <zipfileset src="${file.reference.itextpdf-3.2.1.jar}" includes="**/*"/> 
    </jar> 
    </target> 

los nombres file.reference se encuentran en el interior de archivos project.properties después de agregar las bibliotecas para el IDE Netbeans.

Cuestiones relacionadas