2009-02-02 18 views
46

Estoy intentando construir un programa jar ejecutable que depende de un jar externo descargado. En mi proyecto, los incluí en la ruta de compilación y puedo ejecutarlos y depurarlos dentro de Eclipse.Eclipse: ¿Cómo construir un jar ejecutable con jar externo?

Cuando traté de exportarlo a un contenedor, puedo ejecutar el programa, pero no puedo cuando intento presionar un botón que incluye llamadas a funciones y clases del contenedor externo. He editado las variables de entorno (Windows XP) CLASSPATH para incluir rutas de todos los jar externos, pero no funciona.

Un punto a tener en cuenta es que recibí advertencias de compilación mientras exportaba mi jar ejecutable, pero no aparece ninguna descripción sobre las advertencias.

¿Alguien amablemente proporcionaría una guía completa sobre cómo incluir un programa de jar externo usando eclipse?

+3

No hagas eso. En serio, nunca dependas de tu IDE para crear artefactos de construcción, usa scripts (maven, hormiga) para ese propósito. – Marko

+0

Se mencionan Maven y Ant como alternativas. Podría enumerar herramientas de construcción más oscuras, pero esas dos son las estándar. No tiene sentido seguir elaborando, ya que existe mucha información sobre ellos. – Marko

Respuesta

14

Usted puede hacer esto mediante writing a manifest para su jar. Eche un vistazo al encabezado Class-Path. Eclipse tiene una opción para elegir su propio manifiesto en la exportación.

La alternativa es añadir la dependencia a la ruta de clase en el momento de invocar la aplicación:

win32: java.exe -cp app.jar;dependency.jar foo.MyMainClass 
*nix: java -cp app.jar:dependency.jar foo.MyMainClass 
+5

La última sugerencia no funcionará. El argumento '-cp' (y' -classpath') es ** ignorado ** cuando se usa '-jar'. – BalusC

+0

@BalusC - estás en lo correcto; la dependencia debería estar en el manifiesto. Editaré la respuesta. – McDowell

+0

@McDowell: gracias - nunca puedo entender bien esto. –

5

Como una buena práctica se puede utilizar un Ant Script (Eclipse viene con él) para generar el archivo JAR. Dentro de este JAR puedes tener todas las librerías dependientes.

Incluso puede establecer el encabezado de ruta de clase MANIFEST para apuntar a los archivos en su sistema de archivos, aunque no es una buena práctica.

Ant script de ejemplo build.xml:

<project name="jar with libs" default="compile and build" basedir="."> 
<!-- this is used at compile time --> 
<path id="example-classpath"> 
    <pathelement location="${root-dir}" /> 
    <fileset dir="D:/LIC/xalan-j_2_7_1" includes="*.jar" /> 
</path> 

<target name="compile and build"> 
    <!-- deletes previously created jar --> 
    <delete file="test.jar" /> 

    <!-- compile your code and drop .class into "bin" directory --> 
    <javac srcdir="${basedir}" destdir="bin" debug="true" deprecation="on"> 
     <!-- this is telling the compiler where are the dependencies --> 
     <classpath refid="example-classpath" /> 
    </javac> 

    <!-- copy the JARs that you need to "bin" directory --> 
    <copy todir="bin"> 
     <fileset dir="D:/LIC/xalan-j_2_7_1" includes="*.jar" /> 
    </copy> 

    <!-- creates your jar with the contents inside "bin" (now with your .class and .jar dependencies) --> 
    <jar destfile="test.jar" basedir="bin" duplicate="preserve"> 
     <manifest> 
      <!-- Who is building this jar? --> 
      <attribute name="Built-By" value="${user.name}" /> 
      <!-- Information about the program itself --> 
      <attribute name="Implementation-Vendor" value="ACME inc." /> 
      <attribute name="Implementation-Title" value="GreatProduct" /> 
      <attribute name="Implementation-Version" value="1.0.0beta2" /> 
      <!-- this tells which class should run when executing your jar --> 
      <attribute name="Main-class" value="ApplyXPath" /> 
     </manifest> 
    </jar> 
</target> 

36

Eclipse 3.5 tiene una opción para empaquetar bibliotecas necesarias en el frasco ejecutable. Archivo -> Exportar ... Elija el archivo jar ejecutable y haga clic en siguiente. La ventana de exportación del jar ejecutable tiene un botón de opción donde puede elegir empaquetar las bibliotecas requeridas en el contenedor.

+1

Parece bueno. Excepto por el hecho de que necesito tener una configuración de lanzamiento. Pero crear una configuración de lanzamiento ficticio no es un problema. –

+6

Esto (puede) también generar un archivo de compilación Ant, que se puede iniciar más tarde rápidamente (ya sea dentro de IDE o fuera de IDE). ¡Lo mejor de ambos mundos! –

8

cómo incluir los frascos de su proyecto en el frasco ejecutable:

Estoy usando Eclipse Versión: 3.7.2 corriendo en Ubuntu 12.10. También le mostraré cómo hacer el build.xml para que pueda hacer el ant jar desde la línea de comandos y crear su jar con otros jar importados extraídos en él.

Básicamente le pides a Eclipse que construya build.xml que importe tus bibliotecas en tu jar por ti.

  1. fuego hasta Eclipse y crea un nuevo proyecto Java, hacer un nuevo paquete 'mypackage', añade su clase principal: Runner poner este código en ese país.

    enter image description here

  2. ahora incluyen la mysql-connector-java-5.1.28-bin.jarfrom Oracle que nos permite escribir Java para conectarse a la base de datos MySQL. Haga esto haciendo clic derecho en el proyecto -> propiedades -> ruta de compilación java -> Agregar jar externo -> elija mysql-connector-java-5.1.28-bin.jar.

  3. Ejecute el programa dentro de eclipse, debería ejecutarse, y le dirá que el nombre de usuario/contraseña no es válido, lo que significa que Eclipse está configurado correctamente con el jar.

  4. En Eclipse ir a File ->Export ->Java ->Runnable Jar File. Verá este cuadro de diálogo:

    enter image description here

    Asegúrese de configurar la casilla de verificación 'Guardar como script de hormigas'. Eso es lo que lo hace para que pueda usar la línea de comandos para hacer un ant jar más tarde.

  5. luego ir a la terminal y se muestra el script ant:

    enter image description here

Como puede ver, me encontré con el frasco y no me de error out porque encontró la incluyó mysql-connector-java-5.1.28-bin.jar incrustado dentro de Hello.jar.

Ver muestra hello.jar: vi Hello.jar y verá muchas referencias a com/mysql/jdbc/stuff.class

Para ello ant jar en la línea de comandos para hacer todo esto de forma automática: Cambiar el nombre de buildant.xml a build.xml, y cambiar el nombre de destino de create_run_jar a jar.

Luego, desde MyProject escribe ant jar y boom. Tienes tu jar dentro de MyProject. Y puede invocarlo usando java -jar Hello.jar y todo funciona.

Cuestiones relacionadas