2013-10-15 17 views
6

Ho bisogno di accedere a una classe di bean dal progetto war nel mio altro progetto di guerra. La classe bean esiste in MyProject. Ho scritto pom di un altro progetto chiamato NewProject come segue.dipendenza da progetto di guerra in maven

<groupId>MyProject</groupId> 
    <artifactId>MyProject</artifactId> 
    <version>1</version> 
</parent> 
<artifactId>MyProject</artifactId> 
<packaging>war</packaging> 

E 'possibile aggiungere dipendenza di guerra in un altro progetto di guerra?

+1

Vedere http: //jira.codehaus.org/browse/MNG-1991 –

+0

@ArnaudDenoyelle Il problema indicato non è correlato al problema qui. Il problema riguarda le dipendenze transitive che qui non è il caso. – khmarbaise

risposta

1

Le dipendenze funzionano utilizzando i jar e normalmente si definisce una dipendenza comune in un file .jar a cui è possibile accedere entrambi da .war s. Questo non è specifico per Maven, ma come funzionano le dipendenze in Java. La struttura interna di un .war è diversa da un .jar in termini di modalità di presentazione delle classi.

Di conseguenza in Maven, mi aspetto di definire un progetto .jar e quindi due progetti .war sia in base al progetto iniziale.

16

Se si configura il maven-war-plugin con il seguente attributo:

<attachClasses>true</attachClasses> 

si otterrebbe un artefatto supplementare con le seguenti coordinate:

<dependency> 
    <groupId>myGroup</groupId> 
    <artifactId>myArtifact</artifactId> 
    <version>myVersion</myVersion> 
<classifier>classes</classifier> 
</dependency> 

che contiene tutte le classi all'interno del progetto di guerra che può essere usato come dipendenza che è un file jar che risolverà il tuo problema.

+0

+1 Oh. Bello. Non sapevo che –

2

si sta meglio IMHO la creazione di un jar con i tuoi war classi che sono necessari nel progetto.

E quindi aggiungere la dipendenza alla configurazione del progetto (classi classifier).

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>classes</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      <configuration> 
       <classifier>classes</classifier> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+0

+1: vorrei andare in quel modo. – carlspring

4

Nel progetto guerra

<plugin> 
<artifactId>maven-war-plugin</artifactId> 
<version>2.1.1</version> 
<configuration> 
    <attachClasses>true</attachClasses> 
</configuration></plugin> 

crea un artefatto classi che è possibile utilizzare nel progetto desiderato

<dependency> 
<groupId>your-group-id</groupId> 
<artifactId>your-artifact-id</artifactId> 
<version>your-version</version> 
<classifier>classes</classifier> 

riferiscono maven war plugin

spero che aiuti ...

+0

'Ora accetti il ​​tuo progetto' ...? Non ho idea di cosa stai cercando di dire. Potresti correggere questo? – carlspring

+0

Crea un artefatto di classi che è possibile utilizzare nel progetto richiesto. – Ashish

+0

Leggi la frase citata. – carlspring

1

Sposta le tue classi riutilizzabili in un modulo separato. Questo aiuterà:

  • Verificare le cose più rapidamente.

  • utilizzare il Codice come una dipendenza in altri progetti.

In alternativa, si potrebbe produrre un solo vaso classi utilizzando la maven-jar-plugin e la produzione di un manufatto classificatore-based. Tuttavia, credo che il mio suggerimento è migliore nel fatto che ti danno una netta separazione tra il codice e ti costringe a organizzare il codice migliore.

Problemi correlati