Tengo una jarra de terceros que es necesaria para nuestro proyecto. No está disponible en el repositorio de maven central, así que usé maven-install-plugin para instalar el jar localmente durante una compilación. Ate el objetivo de "instalar archivo" a la fase de "validar", y esto funciona principalmente. El extracto de archivo pom.xml es el siguiente:mvn limpio sin dependencias
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<id>install-myartifact</id>
<phase>validate</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>${basedir}/lib/myartifact-1.2.3.jar</file>
<groupId>com.example</groupId>
<artifactId>myartifact</artifactId>
<version>1.2.3</version>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>myartifact</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
Sin embargo, hay un inconveniente. La mayoría de nuestros desarrolladores y nuestra instalación de Jenkins ejecutan "mvn clean install". La fase de "validar" no es parte del ciclo de vida "limpio" y limpiar inexplicablemente requiere que todas las dependencias estén presentes para ejecutarse. Entonces, la primera vez que alguien ejecuta esta compilación, no funciona.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building MyModule
[INFO] task-segment: [clean, install]
[INFO] ------------------------------------------------------------------------
[INFO] [clean:clean]
[INFO] Deleting directory C:\svn\trunk\mymodule\target
Downloading: http://nexusserver.local:8080/nexus/content/groups/public/com/example/myartifact-1.2.3.pom
[INFO] Unable to find resource 'com.example:myartifact:pom:1.2.3' in repository central (http://central)
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.
Missing:
----------
1) com.example:myartifact:jar:1.2.3
Try downloading the file manually from the project website.
Then, install it using the command:
mvn install:install-file -DgroupId=com.example -DartifactId=myartifact -Dversion=1.2.3 -Dpackaging=jar -Dfile=/path/to/file
Alternatively, if you host your own repository you can deploy the file there:
mvn deploy:deploy-file -DgroupId=com.example -DartifactId=myartifact -Dversion=1.2.3 -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]
Path to dependency:
1) com.example:mymodule:war:0.0.1-SNAPSHOT
2) com.example:myartifact:jar:1.2.3
----------
1 required artifact is missing.
for artifact:
com.example:mymodule:war:0.0.1-SNAPSHOT
from the specified remote repositories:
nexus (http://nexusserver.local:8080/nexus/content/groups/public)
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Thu Jun 09 11:01:24 EDT 2011
[INFO] Final Memory: 17M/247M
[INFO] ------------------------------------------------------------------------
Si tuviera que funcionar simplemente "mvn instalar", el frasco se instala durante la "validación", y que se puede ejecutar "mvn instalación limpia" en generaciones posteriores. Sin embargo, nuestro servidor de compilación no tiene esa flexibilidad. He considerado lo siguiente:
- Mover la fase a "pre-clean", pero eso supone que todos siempre usan clean la primera vez. No ayudaría si alguien ejecutara simplemente "mvn install".
- Copiando la ejecución, ocurriendo una durante la "limpieza previa" y una ocurriendo durante la "validación". Esto cubre todas las bases, pero el código copiado deja un mal sabor.
Idealmente, me gustaría alguna otra opción. ¿Es posible correr limpio sin dependencias? ¿O ejecutar un complemento dos veces sin tener que copiar por completo la ejecución? ¡Gracias!
Es una buena idea, pero estamos en una corporación internacional con equipos de desarrollo fragmentados. Obtenerlo en el nexo maestro es un proceso largo. = ( –
¿Qué le parece usar un repositorio de archivos local? Puede empaquetar el archivo en un directorio par/secundario con su módulo y luego agregar ese directorio como un archivo: repo dentro de su pom.xml. Puede configurar su configuración.xml para usar su repositorio de nexus como el espejo, pero aún así permite repositorios locales de archivos. – massfords
Massfords: Cambiar settings.xml no es un comienzo, eso afectaría a todos los que usan la compilación. Sería mejor obtener el artefacto en el nexo maestro. . Voy a aceptar esa como la respuesta, porque a pesar de que no resuelve mi situación particular, debería ser para la mayoría de la gente. –