2010-03-24 11 views
6

Supponiamo che io abbia un progetto war e jar definito in maven.Jar dipendente dalle classi nel progetto di guerra

Il progetto Jar dipende dal progetto di guerra

sono riuscito a ottenere questo lavoro in modalità pacchetto con l'aggiunta di

Nel progetto di guerra <attachClasses> true nel plugin guerra.

E facendo una dipendenza per

 <groupId>com</groupId> 
     <artifactId>oneway-delegator</artifactId> 
     <version>1.0</version> 
     <classifier>classses</classifier> 

nel pom vaso.

Ma quando si esegue solo compilare le classi jar non viene creato e tutto fallisce.

Qualche idea?

+0

Non riesco a capire la tua domanda. Il tuo progetto di guerra dipende dal tuo progetto jar o viceversa? Se il tuo progetto di guerra dipende da un progetto jar, dovrebbe essere molto semplice, e la dichiarazione di dipendenza sembra buona tranne l'elemento classificatore. Non dovrebbe essere necessario. – Buhb

+0

Beh, non sarei chiedendo questo se la guerra dipende il vaso, il vaso la sua seconda guerra (seconda linea in questione) – Roman

risposta

12

Ma quando si esegue solo compilare le classi jar non viene creato e tutto fallisce.

È infatti possibile configurare il Maven-guerra plugin per confezionare/distribuire le classi e le risorse incluse nella vostra webapp come un "allegato" artefatto JAR con un classificatore con la seguente configurazione:

<project> 
    ... 
    <artifactId>mywebapp</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>X.Y</version> 
     <configuration> 
      <attachClasses>true</attachClasses> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 

Ma questo artefatto viene creato durante la fase package quindi non aspettarti che sia lì se si esegue solo compile.

Si noti che questa opzione di configurazione è stata introdotta per un caso d'uso molto particolare, la custodia per uso di guerra magro. Se è necessario riutilizzare questo JAR in un altro progetto, l'approccio consigliato è in generale quello di spostare le classi in un modulo separato che crea un JAR e quindi dichiarare una dipendenza da quel JAR dalla tua webapp e da qualsiasi altro progetto che bisogno di essa.

7

Non farlo.

Questa non è una dipendenza accettabile per rendere un jar (codice Java semplice) dipendente da una guerra (pacchetto di applicazioni specifiche Java EE). Se si dispone di codice nella propria guerra da cui si dipende, il codice dovrebbe trovarsi nel proprio jar e quindi sia l'app Web che il progetto jar avrebbero una dipendenza comune su di esso.

+0

Sì, che suona come una buona idea ... Grazie – Roman

+1

buon consiglio. "In caso di dubbio, crea un altro modulo", quando si tratta di esperti. – whaley

+2

È un caso comune quando si dispone di un modulo di guerra e di un secondo modulo Maven contenente alcuni test di integrazione della prima webapp. In questo caso, essere in grado di utilizzare le classi webapp e le dipendenze sarebbe estremamente utile. –

Problemi correlati