2015-06-24 13 views
10

Ho un progetto web maven. L'output del progetto è un file war. Voglio aggiungere questo file war come dipendenza a project_b.
il file del project_b pom.xml, hanno un plugin come segue:Come posso aggiungere file di guerra ad altre dipendenze di applicazioni Web Java?

... 
<plugin> 
    <inherited>true</inherited> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.3</version> 
    <configuration> 
     <warName>geoserver</warName> 
     <webappDirectory>${project.build.directory}/geoserver</webappDirectory> 
     <packagingExcludes>WEB-INF/lib/servlet-api*.jar</packagingExcludes> 
     <archive> 
      <manifest> 
       <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
       <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries> 
      </manifest> 
      <manifestEntries> 
       <GeoServerModule>core</GeoServerModule> 
       <Application-Name>${project.build.finalname}</Application-Name> 
       <Project-Version>${project.version}</Project-Version> 
       <Iteration-Name>${iteration}</Iteration-Name> 
       <Build-Timestamp>${maven.build.timestamp}</Build-Timestamp> 
       <Git-Revision>${build.commit.id}</Git-Revision> 
      </manifestEntries> 
     </archive> 
    </configuration> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>war</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
... 

Come si aggiunge l'war di applicazione web per project_b con <groupId>org.itsme</groupId>, <artifactId>spring3-mvc-maven-xml-hello-world</artifactId>, <packaging>war</packaging> e <version>1.0-SNAPSHOT</version>?

+2

controllare questo link http://stackoverflow.com/questions/1769586/maven-war-dependency – Filosssof

+0

suppongo estratto logica comune nel modulo Java separata e aggiungere è come una dipendenza da vaso per entrambe le destinazioni è il modo migliore. –

+0

Voglio aggiungere una pagina html al progetto –

risposta

22

In Maven, aggiungere dipendenza è solo un gioco da ragazzi. Dai un'occhiata al seguente pom.xml.

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

    <!-- Project Details --> 
    <groupId>ykyuen</groupId> 
    <artifactId>project-apple</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0</version> 
    <name>project-apple</name> 

    <dependencies> 
     <!-- project-apple depends on project-banana --> 
     <dependency> 
      <groupId>ykyuen</groupId> 
      <artifactId>project-banana</artifactId> 
      <version>1.0</version> 
     </dependency> 
    </dependencies> 
</project> 

L'impostazione della dipendenza sopra descritta equivale all'importazione di project-banana.jar in project-apple.

Ora ho un altro progetto di applicazione Web Maven chiamato project-orange con tipo di imballaggio uguale a war. L'aggiunta del collegamento delle dipendenze sopra descritto non funziona affatto poiché Java non vede il file .war come percorso di classe. Per risolvere il problema, ci sono due approcci.

  1. Creare un modulo Maven che contiene le classi di progetto arancione con confezione jar. Ora puoi trattare il nuovo modulo Maven come normale dipendenza.

  2. Configurare il plug-in maven-war in modo da creare il file .jar durante la creazione del file .war. Aggiungi il seguente codice sotto il nodo del tuo progetto di guerra. Quanto segue è un esempio.

.

... 
<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.1.1</version> 
      <configuration> 
       <attachClasses>true</attachClasses> 
       <classesClassifier>classes</classesClassifier> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
... 

Dopo l'esecuzione mvn installare, è possibile trovare i seguenti file di archivio nella cartella di destinazione

  • progetto-orange.war
  • progetto-arancio-classes.jar

Ora puoi modificare pom.xml di project-apple per aggiungere la nuova dipendenza.

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

    <!-- Project Details --> 
    <groupId>ykyuen</groupId> 
    <artifactId>project-apple</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0</version> 
    <name>project-apple</name> 

    <dependencies> 
     <!-- project-apple depends on project-banana --> 
     <dependency> 
      <groupId>ykyuen</groupId> 
      <artifactId>project-banana</artifactId> 
      <version>1.0</version> 
     </dependency> 
     <!-- project-apple depends on project-orange --> 
     <dependency> 
      <groupId>ykyuen</groupId> 
      <artifactId>project-orange</artifactId> 
      <version>1.0</version> 
      <!-- To map the project-orange-classes.jar --> 
      <classifier>classes</classifier> 
     </dependency> 
    </dependencies> 
</project> 

riferimento: http://eureka.ykyuen.info/2009/10/30/maven-dependency-on-jarwar-package/

+0

https://maven.apache.org/plugins/maven-war-plugin/ –

2

Recentemente, sono stato anche affrontando lo stesso problema. Ecco come l'ho risolto molto semplicemente.

Passaggio 1: Nella finestra del progetto originale (Non dipende da alcun progetto) Configurare il plug-in di guerra di Maven in modo tale che esso costruisca war e jar. Il jar verrà caricato nel repository di Maven quando eseguiremo l'installazione di mvn clean.

La mia prima parte del pom si presentava così:

<modelVersion>4.0.0</modelVersion> 
<groupId>com.pancharatna</groupId> 
<artifactId>TestWebApp</artifactId> 
**<packaging>jar</packaging>** 
<version>1.0-SNAPSHOT</version> 

Avanti, aggiungere un altro plug-in nella sezione di generazione:

<build> 
    <finalName>TestWebApp</finalName> 
    <plugins> 
     **<plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>make-a-war</id> 
        <phase>compile</phase> 
        <goals> 
         <goal>war</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin>** 

     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 

    </plugins> 
</build> 

Fase 2: Nel 2 ° progetto (che dipende dal primo progetto), metti il ​​vaso delle dipendenze (Progetto originale) nel pom.

<dependency> 
     <groupId>com.pancharatna</groupId> 
     <artifactId>TestWebApp</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <scope>compile</scope> 
    </dependency> 

Fase 3: Do mvn nuova installazione per il progetto e poi per il secondo progetto

Fase 4: Opzionale: Invece di costruire progetti in sequenza e separatamente come detto al punto 3, possiamo creare un pom genitore. Possiamo semplice mvn run installazione pulita .:

C:/Test/ 
     ├───Project1 
     │ └───src/main/... 
     │ └───pom.xml 
     │ 
     ├───Project2 
     │ └───src/main/... 
     │ └───pom.xml 
     │ 
     ├───pom.xml <!-- parent pom --> 

<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.MyApp</groupId> 
    <artifactId>myproject</artifactId> 
    <packaging>pom</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>myproject</name> 
    <url>http://maven.apache.org</url> 
    </dependencies> 
    <modules> 
     <module>/Project1</module> 
     <module>/Project2</module> 
    </modules> 
</project> 
+0

Come posso ottenere questo utilizzando gradle? –

Problemi correlati