maven 2 - Maven creando una cremallera plana.
maven-2 assemblies (1)
Para los gurús de Maven: estoy intentando empaquetar artefactos de proyectos que no sean java (.NET) en un solo archivo zip. Estoy teniendo 2 problemas:
Si cambio el paquete en mi POM a zip <packaging>zip</packaging>
, aparece este mensaje de error: [INFO] Cannot find lifecycle mapping for packaging: ''zip''. Component descriptor cannot be found in the component repository: org.apache.mav en.lifecycle.mapping.LifecycleMappingzip.
[INFO] Cannot find lifecycle mapping for packaging: ''zip''. Component descriptor cannot be found in the component repository: org.apache.mav en.lifecycle.mapping.LifecycleMappingzip.
De acuerdo, no es un gran problema, lo cambié a <packaging>pom</packaging>
para deshacerme de un tarro inútil que se crea en el directorio de destino.
Mi problema principal es que los archivos que estoy empaquetando en ZIP están anidados en pocos directorios, pero necesito ponerlos en el directorio superior de ZIP. Aquí está mi archivo de montaje:
<assembly>
<id>bin</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>${basedir}/${project.artifactId}</directory>
<includes>
<include>**/Bin/Release/*.dll</include>
<include>**/Bin/Release/*.pdb</include>
</includes>
</fileSet>
</fileSets>
</assembly>
Cuando ejecute esto, obtendré un archivo ZIP pero los archivos se anidarán comenzando con C: / seguido de una ruta completa. Para darle una idea, el proyecto vuelca sus binarios en la siguiente estructura ProjectFoo/ProjectFoo/subproject1/Bin/Release/foo.dll
y necesito ZIP/foo.dll
Aquí está la configuración del complemento de montaje:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>zip</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
Tal vez solo necesito usar antrun y ejecutar la tarea ant zip.
Como ha visto, no hay un tipo de paquete zip, por lo que tiene sentido usar el paquete pom como lo haya elegido.
Ha encontrado un poco de agujero en el procesamiento del complemento de ensamblaje. Puede resolver esto especificando múltiples conjuntos de archivos en el ensamblaje con <outputDirectory>/<outputDirectory>
, uno para cada directorio que desee incluir, esto obviamente es un PITA y probablemente no sea una solución aceptable.
Un enfoque alternativo es usar la tarea de copia de Ant para copiar todas las DLL en un directorio provisional y luego incluir ese directorio en el ensamblaje.
La siguiente configuración debería hacer lo que buscas:
La configuración antrun-plugin:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<phase>process-resources</phase>
<configuration>
<tasks>
<copy todir="${project.build.directory}/dll-staging">
<fileset dir="${basedir}/${project.artifactId}">
<include name="**/Bin/Release/*.dll"/>
<include name="**/Bin/Release/*.pdb"/>
</fileset>
<flattenmapper/>
</copy>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
La Asamblea:
<assembly>
<id>bin</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>${project.build.directory}/dll-staging</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.dll</include>
<include>*.pdb</include>
</includes>
</fileSet>
</fileSets>
</assembly>