taglibs springframework org enablewebsecurity dependency maven zip pom.xml maven-assembly-plugin maven-dependency-plugin

springframework - spring security web maven dependency



Maven: depende de la cremallera ensamblada (3)

Estoy intentando que un Proyecto B despliegue (y descomprima) un ZIP creado por el Proyecto A y desplegado en un repositorio remoto.

El ZIP se crea y se adjunta utilizando maven-assembly-plugin , con el tipo de paquete pom :

<artifactId>project-a</artifactId> <name>ZIP</name> <description>Used by Project B</description> <packaging>pom</packaging> ... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <id>distribution-package</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <descriptors> <descriptor>src/main/assembly/scripts.xml</descriptor> </descriptors> <tarLongFileMode>gnu</tarLongFileMode> </configuration> </execution> </executions> </plugin>

Intentando bajarlo desde el pomo del Proyecto B con el maven-dependency-plugin :

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-scripts</id> <phase>package</phase> <goals> <goal>copy</goal> </goals> <configuration> <outputDirectory>${basedir}/target/staging</outputDirectory> <stripVersion>true</stripVersion> <artifactItems> <artifactItem> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <overWrite>true</overWrite> <type>zip</type> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin>

falla con: [ERROR] Failed to execute goal on project ...: Could not resolve dependencies for project group:artifact:pom:version: Could not find artifact group:project-a:zip:version in nexus (http://...:8081/nexus/content/groups/public) -> [Help 1]

Asumo que esto se debe a que especifiqué el empaquetado del Proyecto A como pom y no como zip , sin embargo, no puedo especificar el Proyecto A como tipo de empaquetado zip porque da como resultado:

[ERROR] Unknown packaging: zip @ line 13, column 13

¿Estoy haciendo algo mal aquí o simplemente esto no es posible? Solo tengo un montón de archivos que quiero incluir en un artefacto y permitir que otros muchos proyectos los descarguen y descompriman para usarlos. Abierto a diferentes sugerencias ...

También revisé para asegurarme de que el cierre ensamblado esté realmente en el nexo.

ACTUALIZADO CON RESPUESTA

Para beneficio de alguien más, lo que me faltaba era que el <classifier> de la dependencia tenía que coincidir con el <id> del ensamblaje. Observe dónde se especifica thisistheattachedartifactsclassifier en los siguientes archivos.

scripts.xml (Proyecto A):

<assembly> <id>thisistheattachedartifactsclassifier</id> <formats> <format>zip</format> </formats> <fileSets> <fileSet> <directory>src/main/resources</directory> ... </fileSet> </fileSets> </assembly>

pom.xml (Proyecto B):

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-scripts</id> <phase>package</phase> <goals> <goal>copy</goal> </goals> <configuration> <outputDirectory>${basedir}/target/staging</outputDirectory> <stripVersion>true</stripVersion> <artifactItems> <artifactItem> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <classifier>thisistheattachedartifactsclassifier</classifier> <overWrite>true</overWrite> <type>zip</type> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin>


Bienvenido a :).

Estás en la dirección correcta. Tu problema real es usar un zip.

La siguiente configuración está bien y funciona muy bien para mí. Es viejo (hace 2 años), y no estoy seguro de que coincida con las mejores prácticas. Pero sé que está funcionando.

Esto me permite compartir algunos recursos entre proyectos, especialmente para pruebas unitarias.

Proyecto Zip:

pom.xml

<groupId>com.mycompany</groupId> <artifactId>cfg_dev</artifactId> <version>1.1.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <id>cfg-main-resources</id> <goals> <goal>single</goal> </goals> <phase>package</phase> <configuration> <descriptors> <descriptor>/src/main/assembly/resources.xml</descriptor> </descriptors> </configuration> </execution> </executions> </plugin> </plugins> </build>

Descriptor de conjunto: producirá este artefacto: cfg_dev-1.1.0-resources.zip Tenga en cuenta que

  1. este es un archivo zip
  2. el "clasificador" son los recursos (como el nombre del ensamblado)

    recursos zip false src / main / resources

Proyecto Principal:

pom.xml

Tenga en cuenta que

  1. esto depende de un archivo zip
  2. el "clasificador" de dependencia son los recursos (como el nombre del ensamblado anterior)

    <!-- Unit test dependency --> <dependency> <groupId>com.mycompany</groupId> <artifactId>cfg_dev</artifactId> <version>${project.version}</version> <classifier>resources</classifier> <type>zip</type> <scope>test</scope> </dependency> .... <build> <testResources> <!-- Ressources habituelles --> <testResource> <directory>src/test/resources</directory> <filtering>true</filtering> </testResource> <!-- Unzipped resources from cfg_dev --> <testResource> <directory>${project.build.directory}/test-resources</directory> <filtering>true</filtering> </testResource> </testResources> <plugins> <!-- Unzip shared resources --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>unpack-cfg-test-resources</id> <goals> <goal>unpack-dependencies</goal> </goals> <phase>generate-test-resources</phase> <configuration> <outputDirectory>${project.build.directory}/test-resources</outputDirectory> <includeArtifactIds>cfg_dev</includeArtifactIds> <includeGroupIds>${project.groupId}</includeGroupIds> <excludeTransitive>true</excludeTransitive> <excludeTypes>pom</excludeTypes> <scope>test</scope> </configuration> </execution> </executions> </plugin> </plugins>

Espero que esto esté claro y eso te ayudará :)


Si alguna vez quieres hacer algo como esto desde la línea de comandos (por ejemplo, desde un script sin tener que escribir un archivo pom.xml ), esta es la manera de hacerlo ...

Puede especificar las propiedades individuales:

mvn dependency:copy -DgroupId=org.apache.maven -DartifactId=maven-core -Dversion=2.2.1 -Dpackaging=zip -Dclassifier=thisistheattachedartifactsclassifier

O especifíquelos en un solo parámetro de artifact :

mvn dependency:copy -Dartifact=org.apache.maven:maven-core:2.2.1:zip:thisistheattachedartifactsclassifier

Con este último, es importante mantener el classifier al final, después del atributo de packaging/type . De esta manera: -Dartifact=groupId:artifactId:version:type:classifier

También puede especificar opcionalmente el directorio de destino usando el -DoutputDirectory=<directory> si es necesario.


Un enfoque alternativo podría ser renunciar por completo a la compresión, usar el ciclo de vida estándar de Maven para empacar sus archivos como recursos en un archivo jar y acceder a ellos desde sus otros proyectos a través de classpath.

A menos que tenga requisitos específicos de embalaje (incluidos, excluidos, etc.), esto no requerirá configuración adicional: simplemente coloque sus cosas en el directorio src/main/resources su proyecto.

Este enfoque tiene la ventaja adicional de funcionar sin cambios cuando se invoca desde un IDE como Eclipse.