2010-06-30 12 views
11

Tengo un proyecto que consta de 3 bibliotecas diferentes. Cuando ejecuto el script de instalación, toma todas las bibliotecas del repositorio y ejecuta mvn clean install en ellas. Pero esta versión de la biblioteca ya está instalada en el repositorio. ¿Hay alguna manera de omitir la fase de instalación si la versión es igual a pom.xml en mi repositorio local?Cómo saltear la fase de instalación en Maven build si ya tengo esta versión instalada en el repos

Sé que puedo usar el repositorio local y establecer dependencias. Pero mi jefe quiere que nuestro proyecto solo se pueda construir con repos públicos y sin nuestros repositorios.

+0

Olivier Lamy también parcheado 'https: // jira.codehaus.org/Navegar/MINSTALL-73' – Cemo

Respuesta

25

puede pasar por alto esta manera

-Dmaven.install.skip = true

<profiles> 
    <profile> 
    <id>skipInstall</id> 
    <activation> 
     <property> 
     <name>maven.install.skip</name> 
     <value>true</value> 
     </property> 
    </activation> 
    <build> 
     <pluginManagement> 
     <plugins> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-install-plugin</artifactId> 
      <executions> 
       <execution> 
       <id>default-install</id> 
       <phase>none</phase> 
       </execution> 
      </executions> 
      </plugin> 
     </plugins> 
     </pluginManagement> 
    </build> 
    </profile> 

semana pasada Olivier Lamy parcheado esta jira.

MINSTALL-73

+0

Esta solución no lo hizo trabaja para mi. También noté que el archivo maven settings.xml tenía una advertencia de que el elemento está 'no reconocido'. Ofreceré mi solución en una respuesta. – Doug

1

Sé que puedo usar el repositorio local y establecer dependencias. Pero mi jefe quiere que nuestro proyecto solo se pueda construir con repos públicos y sin nuestros repositorios.

¿Estás seguro de que entendiste correctamente lo que significaba tu jefe? Interpreto lo anterior como "no instale bibliotecas de terceros en su repositorio local, use solo bibliotecas disponibles en repositorios públicos". Esto es diferente de "no use su repositorio local", que es básicamente imposible, así no es como funciona maven. Trataría de aclarar este punto.

Aparte de eso, no entiendo la pregunta, que es muy confusa (¿de qué repositorio está hablando? ¿Qué está haciendo el script de instalación? ¿Por qué llama a clean install en las bibliotecas? Etc).

8

plugins de Maven La mayoría se pueden saltar al especificar algo como:

 <plugin> 
      <artifactId>maven-install-plugin</artifactId> 
      <version>X.Y</version> 
      <configuration> 
      <skip>true</skip> 
      </configuration> 
     </plugin> 

también se puede configurar los perfiles de construcción para establecer las propiedades y el uso que para determinar el valor. por ejemplo, ejecutar el comando: mvn -Pexample seleccionaría el perfil "ejemplo". El POM contendría entonces:

... 
    <properties> 
    <skip.install>false</skip.install> 
... 
    </properties> 

... 
    <profile> 
     <id>example</id> 
     <properties> 
     <skip.install>false</skip.install> 
     </properties> 
    </profile> 
... 
    <plugin> 
     <artifactId>maven-install-plugin</artifactId> 
     <version>X.Y</version> 
     <configuration> 
     <skip>${skip.install}</skip> 
     </configuration> 
    </plugin> 
... 

El uso de estas adiciones POM, el comportamiento por defecto para el plugin de instalación será para llevar a cabo su objetivo por defecto, pero si se selecciona el perfil ejemplo, entonces la instalación de plug-in omitirá su objetivo.

+0

Esta es la mejor solución. Pero no todos los complementos tienen "skip". – ximage

+0

¿El complemento de instalación tiene una configuración de omisión? – Cemo

+1

'maven-install-plugin' no tiene el parámetro de configuración' skip'. La solución proporcionada básicamente no funciona en absoluto. –

3

Usando lo que he aprendido de las otras respuestas, esto fue el resultado más limpio para mí.

En mi super pom agregué un pluginManagement/plugin para deshabilitar las fases de instalación predeterminada y prueba predeterminada cuando se establece la propiedad deployOnly.

  <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-install-plugin</artifactId> 
       <version>2.5.2</version> 
       <executions> 
        <execution> 
         <id>default-install</id> 
         <configuration> 
          <skip>${deployOnly}</skip> 
         </configuration> 
        </execution> 
        <execution> 
         <id>default-test</id> 
         <configuration> 
          <skip>${deployOnly}</skip> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

Así que en la línea de comandos, que puede desactivar instalar y fases de prueba mediante la adición de -DdeployOnly.

mvn clean install  #build and test everything 
mvn deploy -DdeployOnly #just deploy it 
Cuestiones relacionadas