Come ignorare l'installazione in fase di costruzione Maven se ho già questa versione installata in pronti contro termine

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

  •  01-10-2019
  •  | 
  •  

Domanda

Ho un progetto che consiste di 3 diverse biblioteche. Quando eseguo script di installazione che serve tutte le librerie da pronti contro termine ed eseguire mvn clean install su di loro. Ma questa versione della libreria già installata in pronti contro termine. C'è un modo per saltare l'installazione di fase se la versione in pom.xml versione uguale nel mio repo locale.

So che posso usare repo locale e basta impostare le dipendenze. Ma il mio capo mancanza che il nostro progetto può costruire solo con il pronti contro termine pubblici e senza i nostri pronti contro termine.

È stato utile?

Soluzione

È possibile ignorare come questo

-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 scorsa settimana Olivier Lamy patchato questo jira.

MINSTALL-73

Altri suggerimenti

La maggior parte dei plugin Maven può essere saltata specificando qualcosa come:

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

si può anche impostare i profili di build per immobili impostare e utilizzare che per determinare il valore. per esempio, l'esecuzione del comando: mvn -Pexample sarebbe selezionare il profilo "esempio". Il POM allora contenere:

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

Usando queste aggiunte POM, il comportamento predefinito per l'installazione plug sarà effettuare il suo obiettivo predefinito, ma se viene selezionato il profilo di esempio, quindi l'installazione plug ignorerà il suo obiettivo.

Utilizzando quello che ho imparato dalle altre risposte, questo è stato il risultato più pulito per me.

Nel mio super-pom ho aggiunto un pluginManagement / plugin per disabilitare di default installare e fasi di default-prova quando la proprietà è impostata 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>

Quindi, sulla riga di comando, posso disattivare l'installazione e le fasi di test con l'aggiunta di -DdeployOnly.

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

So che posso usare repo locale e basta impostare le dipendenze. Ma il mio capo mancanza che il nostro progetto può costruire solo con il pronti contro termine pubblici e senza i nostri pronti contro termine.

Sei sicuro di aver capito correttamente ciò che boss dire? Interpreto quanto sopra come "non installare librerie di terze parti nel vostro repository locale, utilizzare le librerie disponibili in archivi pubblici solo". Questo è diverso da "non utilizzare il repository locale" che è praticamente impossibile, che non è solo come Maven opere. Mi piacerebbe provare a chiarire questo punto.

A parte questo, non ho ricevuto la domanda, che è molto confuso (quello Repo stai parlando? Qual è lo script di installazione facendo? Perché si chiama pulito installare su librerie? Ecc).

L'estensione delle altre risposte, dal futuro.

plugins

Maven hanno un sorprendentemente alto di libertà, come fanno a correre. Se vogliono, si possono ignorare / sovrascrivere le impostazioni tipiche pom.xml. Inoltre, anche l'<configuration><skip>true</skip></configuration> è solo una convenzione, nulla obbliga una plugin per seguirlo, se non che la maggior parte di loro si sviluppa in modo.

I miei esperimenti con la recente mostra problema, che sia @ Cemo di soluzione @MiloshBoroyevich dovrebbero essere utilizzati , anche il plugin richiede sia a noi far veramente in pace. Più concretamente, la configurazione lavorando solo da me è stato questo:

<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top