2009-10-13 10 views
5

È possibile evitare di distribuire l'artefatto che viene creato in base all'impacchettamento del progetto durante l'elaborazione 'deploy: deploy'?Maven: evitare la distribuzione di artefatti impliciti del pacchetto di progetto durante il ciclo di vita di build standard

voglio dire quanto segue:

  • supponiamo di avere un 'pom.xml' per l'applicazione web e definire il tipo di imballaggio come 'guerra';
  • vogliamo assemblare sia '* .war' artefatto o '* .zip' che contiene la nostra applicazione, nonché un servlet container;
  • si desidera distribuire solo quello '* .zip' artefatto durante 'deploy: deploy' elaborazione;

I.e. Voglio essere in grado di eseguire 'mvn implementare' ed ha i seguenti risultati:

  1. 'myapp.war' è costruito;
  2. 'myapp-standalone.zip' è costruito;
  3. 'myapp-standalone.zip' viene distribuito al repository remoto di destinazione (notare che io non si preoccupano se 'myapp.war' è installato al repository locale qui);

ho controllato 'war:war documentation' e hanno trovato parametro 'primaryArtifact'. Tuttavia, menziona solo repository locali.

Ho provato il seguente POM ma dispiega ancora sia '* .war' o '* .zip' al repository remoto:

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

    <groupId>com.mygroup</groupId> 
    <artifactId>myapp</artifactId> 
    <packaging>war</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>myapp</name> 
    <url>http://maven.apache.org</url> 

    <dependencies> 
     <!-- dependencies go here --> 
    </dependencies> 

    <build> 
     <plugins> 
      <! -- plugins like 'compiler' etc --> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <configuration> 
        <primaryArtifact>false</primaryArtifact> 
       </configuration> 
      </plugin> 
      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>myapp-standalone</id> 
         <phase>package</phase> 
         <goals> 
          <goal>single</goal> 
         </goals> 
         <configuration> 
          <descriptors> 
           <descriptor>src/main/assembly/standalone.xml</descriptor> 
          </descriptors> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

    <distributionManagement> 
     <repository> 
      <-- target repository information --> 
     </repository> 
     <snapshotRepository> 
      <-- target repository information --> 
     </snapshotRepository> 
    </distributionManagement> 
</project> 

Sembra che posso ottenere il comportamento desiderato mediante dichiara imballaggi progetto come 'pom' e configurare manualmente tutte le mojos impliciti 'guerra' imballaggio ("risorse: risorse, 'compilatore: compila', 'risorse: testResources', 'compilatore: testCompile', 'infallibile: test', 'la guerra: la guerra', 'install: install', 'distribuire: distribuire'). Tuttavia, questo renderebbe il POM piuttosto prolisso e vorrei evitarlo.

Per quanto ne so, Maven way è di avere sempre un artefatto implicito dal tipo di packaging del progetto come uno degli artefatti del progetto. Ma non è chiaro che cosa dovrebbe fare l'utente Maven se vuole ottenere un artefatto che non corrisponde a nessun tipo di imballaggio predefinito (ad esempio, singolo '* .zip' archivio).

Qualche idea?

saluti, Denis

+0

considerare l'aggiunta di Maven per i tag – pstanton

risposta

8

Secondo la documentazione Maven Deploy Plugin:

deploy:deploy viene utilizzato per installare automaticamente il manufatto, il suo pom ei manufatti annessi prodotti da un particolare progetto. [...]

Quindi non penso sia possibile impedire che la tua guerra venga dispiegata "così com'è".

Tuttavia, per ottenere l'effetto desiderato, è possibile aggiungere un modulo specifico alla propria build che sarebbe responsabile della produzione dell'assieme (l'assembly dipenderebbe dal modulo war) e configurare il plug-in di distribuzione nel modulo war in skip deployment come segue:

  <plugin> 
      <artifactId>maven-deploy-plugin</artifactId> 
      <version>X.Y</version> 
      <configuration> 
      <skip>true</skip> 
      </configuration> 
     </plugin> 
+0

che è giusta direzione, ma il problema è che voglio _ '* artefatto war'_ a contenere vari _.' * file di configurazione properties'_ ma _'. * .zip'_ artefatto per contenere quei file nella directory _'conf'_. Cioè non è possibile solo dichiarare la dipendenza dal progetto in-package e creare un'unità di consegna autonoma personalizzata. Tuttavia, sembra che non riesca a generare artefatti singoli ma multipli dal progetto pacchettizzato _'war -'_. Comunque, grazie per il consiglio. –

+0

Non capisco. Riuscite a creare lo zip con il contenuto desiderato nel modulo war? Se sì, non è possibile decomprimere la guerra e applicare la stessa "logica di assemblaggio" in un altro modulo? –

+0

concordato. Sembra più naturale. –

Problemi correlati