Nota: Non ho ricevuto alcuna risposta nella prima versione di questa domanda, così ho modificato per essere più generico ...Come gestire le risorse condivise per diverse app Web in Maven AND Eclipse?
Contesto
Il mio progetto si divide in diverse Maven moduli e diverse applicazioni web. Ecco la struttura:
my-project
+ pom.xml
+-- commons
+-- persistence
+-- ...
+-- web-app-1
+-- web-app-2
+-- ...
Tutte le applicazioni Web condividono risorse comuni, come JS, CSS e file di immagini.
Invece di duplicare queste risorse in ogni web-app-X
, ho deciso di creare un altro progetto chiamato web-resources
, che è un progetto WAR. La struttura è quindi la seguente:
my-project
+ pom.xml
+-- commons
+-- persistence
+-- ...
+-- web-app-1
+-- web-app-2
+-- ...
+-- web-resources
+-- pom.xml
+-- src/main/webapp
+-- web.xml (which is almost empty, just need to be present for Maven)
+-- web_resources
+-- css
+-- images
+-- javascript
Maven
In Maven 2 (o 3 Maven, come ho appena migrato il mio progetto di Maven 3.0.2), questa configurazione è facile da gestire come tutti web-app-X
dichiarano web-resources
come dipendenza:
<groupId>foo.bar</groupId>
<artifactId>web-app-1</artifactId>
...
<dependencies>
<dependency>
<groupId>foo.bar</groupId>
<artifactId>web-resources</artifactId>
<version>${preclosing-version}</version>
<type>war</type>
</dependency>
...
Così, quando ho costruire il mio progetto WAR, prima prendi lo web-resources.war
(creato poco prima), decomprimilo e crea su di esso l'applicazione web web-app-X
. In questo modo, il mio file WAR conterrà anche una directory denominata web-resources/
che contiene le risorse condivise.
Questo è il principio di sovrapposizione di guerra.
Quindi su un punto di vista Maven, tutto è a posto!
Eclipse
Ora, ecco che arriva il problema principale: avere una buona configurazione di Eclipse.
Domanda: Come posso utilizzare la configurazione corrente per essere gestita correttamente da Eclipse? In particolare, quando distribuisco qualsiasi web-app-X
in Tomcat utilizzando Eclipse ...
Nota che voglio ottenere la configurazione più automatica (?) Ed evitare qualsiasi passaggio manuale, poiché questa configurazione dovrebbe essere utilizzata da dozzine di sviluppatori. ..
Per me, la soluzione migliore sembra utilizzare le risorse collegate a di Eclipse. Così, ho impostato la seguente configurazione nel mio pom web-app-X
.xml:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<wtpversion>1.5</wtpversion>
<linkedResources>
<linkedResource>
<name>web_resources</name>
<type>2</type>
<location>${project.basedir}\..\web-resources\src\main\webapp\web_resources</location>
</linkedResource>
</linkedResources>
</configuration>
</plugin>
...
Quando eseguo la configurazione mvn eclipse:eclipse
, aggiunge con successo queste informazioni nel mio file .project
:
<projectDescription>
...
<linkedResources>
<link>
<name>web_resources</name>
<type>2</type>
<location>C:\dev\project\web-resources\src\main\webapp\web_resources</location>
</link>
</linkedResources>
<projectDescription>
Ora, importare il mio progetto in Eclipse. Problema: in Project properties > Java Build Path > Source
, non vedo la sorgente di collegamento presente. Vedo solo le mie quattro directory predefinite Maven (src/main/java
, src/main/resources
, src/test/java
e src/test/resources
). Che è strano è che quando provo ad aggiungere manualmente le risorse collegate, si rifiuta e dice che esiste già ...
Così, quando schiero la mia applicazione web sul mio Tomcat in Eclipse, lo fa non Deploy la directory web_resources, e quindi non ho distribuito le immagini CSS/JS /.
Dopo alcuni test, sembra che devo fare due modifiche:
- aggiungere la riga
<classpathentry kind="src" path="web_resources" output="src/main/webapp/web_resources"/>
nel mio file.classpath
; - Rimuovere
<project>preclosing-web-resources</project>
nel file.project
.
Nota che l'utilizzo di questa configurazione, Eclipse copiare (e mantenere la sincronizzazione) il contenuto del progetto di web_resources nel mio web-app-X/src/main/webapp/web_resources
, ma questo non è un problema (questa directory viene ignorato dal SCM).
La soluzione automatizzata unica che ho trovato è stato quello di creare un semplice plugin Maven che fanno i due modifica precedente, e quindi eseguire il seguente comando (o utilizzare un file .bat):
mvn eclipse:clean eclipse:eclipse myEclipsePlugin:eclipse
Domanda
- C'è un modo migliore per gestire tale configurazione?
informazioni tecniche
Java 6, Maven 3.0.2, esperto di Plug-in Eclipse 2.8, Eclipse 3.3.2 (ma posso provare con la versione più recente di Eclipse), non m2eclipse collegare.