2010-06-30 5 views
11

Ho un progetto che consiste di 3 diverse librerie. Quando eseguo lo script di installazione, prende tutte le librerie dal repository ed esegue su di esse l'installazione di mvn clean. Ma questa versione della libreria è già installata in repo. C'è un modo per saltare la fase di installazione se la versione in pom.xml è uguale alla versione nel mio repository locale.Come saltare la fase di installazione in Maven build se ho già questa versione installata in repo

So che posso utilizzare il repository locale e impostare solo le dipendenze. Ma il mio capo vuole che il nostro progetto possa costruire solo con repository pubblici e senza i nostri repository.

+0

Olivier Lamy patchato anche 'https: // jira.codehaus.org/browse/MINSTALL-73' – Cemo

risposta

25

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

scorsa settimana Olivier Lamy patchato questo JIRA.

MINSTALL-73

+0

Questa soluzione non lavora per me. Ho anche notato che il file maven settings.xml aveva un avvertimento che l'elemento è "non riconosciuto". Offrirò la mia soluzione in una risposta. – Doug

1

So che posso utilizzare il repository locale e impostare solo le dipendenze. Ma il mio capo vuole che il nostro progetto possa costruire solo con repository pubblici e senza i nostri repository.

Sei sicuro di aver capito correttamente cosa intendevi per capo? Interpreto il precedente come "non installare librerie di terze parti nel tuo repository locale, usa solo le librerie disponibili nei repository pubblici". Questo è diverso da "non usare il tuo repository locale" che è fondamentalmente impossibile, non è solo il modo in cui Maven funziona. Cercherò di chiarire questo punto.

A parte questo, non ho la domanda che è molto confusa (di quale repository stai parlando? Che cosa sta facendo lo script di installazione? Perché chiami l'installazione pulita nelle librerie? Ecc.).

8

plugin più Maven possono essere saltati specificando qualcosa come:

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

è anche possibile impostare i profili di build per impostare le proprietà e l'uso che per determinare il valore. ad esempio, eseguendo il comando: mvn -Pexample selezionerebbe il profilo "esempio". 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 di plugin sarà effettuare il suo obiettivo predefinito, ma se viene selezionato il profilo di esempio, quindi l'installazione plug salterà suo obiettivo.

+0

Questa è la soluzione migliore. Ma non tutti i plugin hanno "skip". – ximage

+0

Il plug-in di installazione ha una configurazione di salto? – Cemo

+1

'maven-install-plugin' non ha il parametro di configurazione' skip'. La soluzione fornita fondamentalmente non funziona affatto. –

3

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 le fasi di installazione di default e di test di default quando è impostata la proprietà 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> 

Così sulla linea di comando, è possibile disattivare installare e fasi di prova aggiungendo -DdeployOnly.

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