Cómo saltarse la fase de instalación de Maven build si ya tengo esta versión instalada en repo

StackOverflow https://stackoverflow.com/questions/3147714

  •  01-10-2019
  •  | 
  •  

Pregunta

Tengo un proyecto que consta de 3 diferentes bibliotecas. Cuando ejecuto el script de instalación que toma todas las bibliotecas de la cesión temporal y ejecutar mvn limpiar instalar en ellos. Sin embargo, esta versión de la biblioteca ya instalado en el repositorio. ¿Hay una manera de saltarse la fase de instalación si la versión en pom.xml versión igual en mi repo local.

Yo sé que puedo usar repo local y dependencias acaba de establecer. Pero mi jefe falta que nuestro proyecto puede generar solamente con repositorios públicos y sin ningún tipo de nuestros repositorios.

¿Fue útil?

Solución

Se puede pasar por alto como éste

-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>

La semana pasada Olivier Lamy parcheado esta jira.

MINSTALL-73

Otros consejos

La mayoría de los plugins de Maven se puede omitir especificando algo como:

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

También puede configurar los perfiles de construcción de propiedades de deformación y el uso que para determinar el valor. por ejemplo, ejecutando el comando: mvn -Pexample seleccionaría el "ejemplo" perfil. 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 la instalación plug-in será para llevar a cabo su objetivo por defecto, pero si se selecciona el perfil ejemplo, entonces la instalación de plug-in se saltará su objetivo.

El uso de lo que aprendí de las otras respuestas, este fue el resultado más limpio para mí.

En mi súper pom he añadido un pluginManagement / plugin para desactivar por defecto a instalar y las fases de prueba de forma 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
  

Yo sé que puedo usar repo local y dependencias acaba de establecer. Pero mi jefe falta que nuestro proyecto puede generar solamente con repositorios públicos y sin ningún tipo de nuestros repositorios.

¿Está seguro entendido bien lo que quería decir jefe? Interpreto lo anterior como "no instale bibliotecas de terceros en su repositorio local, utilice únicamente librerías disponibles en repositorios públicos". Esto es diferente de "no utilice su repositorio local", que es básicamente imposible, que no es sólo la forma en maven obras. Que iba a tratar de aclarar este punto.

Aparte de eso, no entiendo la pregunta que es muy confuso (Repo lo que estás hablando? ¿Cuál es el script de instalación haciendo? ¿Por qué llamas instalación limpia en las bibliotecas? Etc).

La extensión de las otras respuestas, desde el futuro.

plugins

Maven tienen un sorprendentemente alto libertad, ¿cómo se ejecutan. Si quieren, pueden ignorar / anular los valores típicos pom.xml. Por otra parte, también la <configuration><skip>true</skip></configuration> es más que una convención, nada obliga a un plugin para seguirla, excepto que la mayoría de ellos se desarrolla de modo.

Mis experimentos con el espectáculo problema reciente, que @ Cemo tanto de @MiloshBoroyevich y la solución debe utilizarse , también el plugin requiere tanto que nos dejó muy en paz. Más concretamente, la configuración única de trabajo por mí era la siguiente:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5.2</version>
    <executions>
        <execution>
            <id>default-install</id>
            <phase>none</phase>
        </execution>
    </executions>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top