2012-03-15 13 views
9

Esta es probablemente una pregunta realmente fundamental, pero me temo que no sé mucho sobre Java y no pude encontrar la respuesta en ningún lado.Building JAR que incluye todas sus dependencias

Estoy intentando construir una biblioteca Ant que depende del SDK TFS. Seguí the guide a la creación de un proyecto, pero cuando la exportación como un archivo JAR y tratar de ejecutar una tarea utilizando ANT me sale el siguiente error:

java.lang.NoClassDefFoundError: /com/microsoft/tfs/core/util/TFSUser 

Me di cuenta que podía poner el JAR TFS SDK en mi ANT lib, pero si es posible, me gustaría que mi JAR lo incluya y la biblioteca simplemente funcione sin tener que hacerlo.

This answer parece decir que es posible incluir todos los recursos necesarios para ejecutar usando Eclipse (estoy usando 3.7.2) pero no detalla cómo hacerlo realmente. ¿Cuál es la opción en Eclipse para hacerlo?

+0

Se puede publicar su archivo hormiga? –

Respuesta

3

Seleccione "Extraer las bibliotecas necesarias en el JAR generado" al hacer la exportación.

Extract required libraries into generated JAR

Seleccionar "bibliotecas extracto necesario en el tarro generada" como lo hace la exportación.

+0

Alt-PrintScr es bueno para capturar cuadros de diálogo. –

+0

10-4. Veré si puedo editar esa imagen. Gracias. – Java42

+0

BTW, esa otra opción, "Paquete requiere bibliotecas en JAR generado" también funciona "la mayoría del tiempo". Agrega un gancho generado por Eclipse en el manifiesto, pero a veces el gancho (y no recuerdo por qué, lo siento) el gancho no funcionó en mi entorno, así que dejé de usar esa opción. Parece: Rsrc-Main-Class: Test Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader – Java42

3

Use Archivo -> Exportar -> Java -> Archivo JAR ejecutable en lugar de Eclipse.

El "Extraer bibliotecas necesarias en JAR generado" debe ser lo que necesita.

1

Cuando construye un jar, obtiene un JAR que contiene solo su código y no las dependencias que su Jar requiere. Puede usar algo como jarjar para combinar todas las dependencias en un archivo Jar fácil de administrar o copiar todos los JAR dependientes en una carpeta para facilitar su uso. Parece que Eclipse tiene opciones para hacer este tipo de cosas (ver publicaciones más arriba).

La otra opción sería utilizar un sistema de administración de dependencias como Maven o Ivy. Esto tiene una curva de aprendizaje más alta, pero para una biblioteca vale la pena, ya que permitirá a los usuarios de su biblioteca obtener fácilmente todas las dependencias. Para una aplicación de usuario final, una única distribuible es probablemente una mejor opción (para lo cual podría usar Maven o Ivy para administrar internamente las dependencias y luego algo como jarjar o Java Web Start para distribuir a sus usuarios finales).

0

Por si acaso si lo estás haciendo con maven. Debe incluir el siguiente complemento.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.4</version> 
    <configuration> 
     <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
     <properties> 
      <property> 
       <name>listener</name> 
       <value>com.example.TestProgressListener</value> 
      </property> 
     </properties> 
    </configuration> 
    <executions> 
     <execution> 
      <id>make-assembly</id> <!-- this is used for inheritance merges --> 
      <phase>package</phase> <!-- bind to the packaging phase --> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Más @how do I build JAR file with dependencies?

Cuestiones relacionadas