2011-09-14 12 views
8

tengo el siguiente ensamblado personalizado:Añadir ruta de clase para manifestar con un descriptor de ensamblado personalizado

<assembly> 
    <id>full</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <fileSets> 
     <fileSet> 
      <directory>${project.build.outputDirectory}</directory> 
      <outputDirectory>/</outputDirectory> 
     </fileSet> 
    </fileSets> 
</assembly> 

sección y la siguiente configuración:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <descriptors> 
      <descriptor>src/main/assembly/assembly.xml</descriptor> 
     </descriptors> 
     <archive> 
      <manifest> 
       <mainClass>com.example.MyExample</mainClass> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>./lib/</classpathPrefix> 
      </manifest> 
     </archive> 
    </configuration> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

De acuerdo con la documentación sobre el plug-in de montaje experto, este debería agregar un elemento classpath al archivo manifest, sin embargo, no funciona. Si utilizo el objetivo del ensamblado en desuso en lugar de solo, funciona.

Noté que en algún lugar alguien mencionó que la sección de archivo solo está disponible con el formato jar, pero eso es lo que estoy usando.

Cuando desaprobaron assembly: assembly, ¿definieron una nueva forma de hacerlo correctamente? Realmente no me gusta usar una funcionalidad en desuso, pero si rompen el funcionamiento de las cosas y no las documentan adecuadamente, realmente no sé cómo evitar esto.

¿Alguien tiene algún ejemplo de cómo hacerlo correctamente?

Respuesta

4

Este no es un buen uso del complemento de ensamblaje. Java no hace jars-in-jars. Puede usar las opciones de configuración de maven-jar-plugin para agregar un classpath al manifiesto de su jar principal, y luego usar el plugin de ensamblaje para recolectar sus dependencias y colocarlas junto a su jar principal en un zip o tarball.

http://maven.apache.org/shared/maven-archiver/examples/classpath.html

+0

He eliminado desde entonces las dependencias del jar y las estoy colocando en una carpeta lib junto al jar. Sin embargo, el problema aún permanece. El complemento de ensamblaje no agrega el classpath como se especificó. – davija

+0

No se supone que lo haga. El plugin jar tiene ese trabajo. – bmargulies

+3

De acuerdo con la documentación del complemento de ensamblaje, si le dice que agregue el classpath lo hace. Funciona en otros objetivos que ahora están en desuso. Verifique los documentos – davija

2

que puedes usar el plugin de maven jar:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <configuration> 
     <archive> 
      <manifest> 
       <mainClass>main class</mainClass> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>lib/</classpathPrefix> 
      </manifest> 
     </archive> 
    </configuration> 
</plugin> 
2

Intente actualizar el maven-assembly-plugin a la versión 2.5 o posterior.

La ausencia inesperada de la entrada Class-Path en el archivo de manifiesto parece haber sido causada por el error MASSEMBLY-576. El error se corrigió en la versión 2.5 del complemento (publicado el 26 de octubre de 2014).

+0

no ayudó, actualizó a 2.5 Class-Path todavía falta :( – sloven

Cuestiones relacionadas