2011-07-30 12 views
5

Mi jar no se está ejecutando, puedo decir que intenta ejecutarse cuando el archivo log4j logra crear la carpeta de registro pero luego no pasa nada y el registro está en blanco.Maven jar ejecutable con bibliotecas en ruta externa

Mi problema es que tengo el archivo jar en una carpeta llamada bin y las bibliotecas en una carpeta llamada lib

estoy triying esto:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <configuration> 
    <outputDirectory>${staging.dir}/bin</outputDirectory> 
     <archive> 
     <manifest> 
      <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
      <addClasspath>true</addClasspath> 
      <mainClass>com.Main</mainClass> 
      <classpathPrefix>../lib/</classpathPrefix> 
     </manifest> 
     </archive> 
    </configuration> 
    </plugin> 

y

<plugin> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${staging.dir}/lib</outputDirectory> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

También probé con maven-assembly-plugin, pero empaqueta todo en el jar y realmente necesito tener las carpetas bin y lib

¿Qué debo configurar para que funcione correctamente?

EDIT: archivo META-INF

Manifest-Version: 1.0 
Archiver-Version: Plexus Archiver 
Created-By: Apache Maven 
Built-By: me 
Build-Jdk: 1.6.0_26 
Main-Class: com.Main 
Class-Path: ../lib/ojdbc6-11.2.0.jar ../lib/sqljdbc4-4.2.0.jar ../lib/ 
mysql-connector-java-5.1.17.jar ../lib/hibernate-core-3.6.5.Final.jar 
../lib/antlr-2.7.6.jar ../lib/commons-collections-3.1.jar ../lib/dom 
4j-1.6.1.jar ../lib/hibernate-commons-annotations-3.2.0.Final.jar ../ 
lib/hibernate-jpa-2.0-api-1.0.0.Final.jar ../lib/jta-1.1.jar ../lib/s 
lf4j-api-1.6.1.jar ../lib/hibernate-entitymanager-3.6.5.Final.jar ../ 
lib/cglib-2.2.jar ../lib/asm-3.1.jar ../lib/javassist-3.12.0.GA.jar . 
./lib/slf4j-log4j12-1.6.1.jar ../lib/log4j-1.2.16.jar ../lib/commons- 
codec-1.5.jar ../lib/lablib-checkboxtree-3.3-20110114.141734-3.jar 

SOLUCIÓN

resulta que el archivo META-INF es incorrecta. La razón es que maven-archivador-plugin cambia el nombre de las bibliotecas de fotografiado con una marca de tiempo como el comportamiento por defecto

para anular que el uso de este, según las instrucciones del documento Maven Archiver:

<plugins> 
    <plugin> 
    <artifactId>maven-war-plugin</artifactId> 
    <configuration> 
     <archive> 
     <manifest> 
      <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
      <addClasspath>true</addClasspath> 
      <useUniqueVersions>false</useUniqueVersions> 
      <mainClass>com.Main</mainClass> 
      <classpathPrefix>../lib/</classpathPrefix> 
     </manifest> 
     </archive> 
    </configuration> 
    </plugin> 
</plugins> 

aparte de eso, espero que la gente encuentre útil el código maven al principio porque funciona, solo tenga cuidado con las SNAPSHOTS en sus proyectos

+0

¿Cómo se ve tu archivo MANIFEST? ¿También has colocado los frascos dependientes en la carpeta lib? – Raghuram

+0

todo está allí y el MANIFIESTO se ve bien, solo adjuntar para editar en este momento – javaNoober

+0

youa re right es un problema META-INF, mi última lib es lablib-checkboxtree-3.3-SNAPSHOT.jar, intenté ejecutar el jar en la consola y puedo no encuentras la biblioteca Traté de eliminar y volver a descargar la lib, pero sigue colocando el numebr en lugar de la palabra SNAPSHOT, ¿por qué? – javaNoober

Respuesta

3

Todo lo anterior parece correcto. Aquí hay algunas cosas/preguntas que puede intentar/confirmar/responder:

  • ¿Está ejecutando esto desde la línea de comandos? Es decir. usando java -jar <your.jar> o lo está comenzando, p. haciendo doble clic en el archivo, etc.? Si no, intente ejecutarlo desde la línea de comando para ver qué sucede
  • Intente usar mvn exec:java para ver si eso inicia su aplicación (maven-) regularmente. Consulte http://mojo.codehaus.org/exec-maven-plugin/usage.html si no está familiarizado con el complemento de ejecución
  • ¿Puede utilizar Java System.out.println normal en lugar de iniciar sesión para confirmar que realmente se inicia? Tener un registro de tamaño cero podría ser un problema de configuración de registro
  • Veo que tiene algunas bibliotecas de DB arriba. ¿Puedes poner println (o mejor logging, pero solo después de que confirmes que tu logging realmente funciona) instrucciones sobre la inicialización básica, para confirmar que no estás simplemente quedándote allí (si eso es lo que está sucediendo, no mencionas ninguna excepción u otros problemas). en específico)

Mucho depende del código de la aplicación real, pero esperamos que algo de lo anterior te ayude a identificar el problema.

Como nota al margen, ¿su clase principal es realmente com.Main? En caso afirmativo, ¿puedo sugerir cambiar eso a algo más apropiado, por ej. com.yourdomain.yourapp.Main o algo así. No es que esto cambie el resultado anterior, solo un comentario estilístico.

+0

Estaba haciendo doble clic en él, por lo tanto no estaba viendo ningún error, ahora que utilicé la consola veo que no puede cargar la última biblioteca, el nombre debe ser lablib-checkboxtree-3.3-SNAPSHOT, sin embargo maven lo está cambiando a ese lablib-checkboxtree-3.3-20110114.141734-3, cambié el nombre de lib manualmente y confirmo que funciona, ¿cómo corregir esto? – javaNoober

+0

y no se preocupe, el nombre no es com.Main;) – javaNoober

+0

¿Puede intentar eliminar el artefacto de su carpeta '.m2' (consulte esto si no está familiarizado con: http://stackoverflow.com/questions/6081617/ missing-maven-m2-folder) y luego prueba 'mvn package' de nuevo? Debería encontrarlo en .m2/repository/ /lablib-checkboxtree/3.3-SNAPSHOT - simplemente mueva esa carpeta a otra parte (como una solución de respaldo) y luego vuelva a instalarla como lo hizo antes (¿usó 'mvn install: install- archivo' o ¿tiene algo como Nexus en el sitio?). Debe confirmar que tiene lablib-checkboxtree-3.3-SNAPSHOT.jar allí –

Cuestiones relacionadas