Sto utilizzando Maven 3 per creare un'applicazione java con 3 livelli: server, ejb e ui. Il progetto EJB dipende dal progetto Server e il progetto UI dipende solo da EJB e fornisce un'esclusione per la dipendenza transitiva del server.Maven Build different to Dependency Tree
Quando il progetto dell'interfaccia utente viene creato come una guerra, la dipendenza del server viene inclusa nonostante non venga visualizzata la dipendenza: comando albero.
Ecco la relativa uscita di correre mvn dependency:tree
**project.name:UI:war:1.0 SNAPSHOT**
+- project.name:Common:jar:1.0 SNAPSHOT:compile
| + org_common:_lib:jar:16.0.006:compile
| | +- log4j:log4j:jar:1.2.16:compile
| | \- commons configuration:commons configuration:jar:1.6:compile
| | +- commons lang:commons lang:jar:2.4:compile
| | +- commons digester:commons digester:jar:1.8:compile
| | \- commons beanutils:commons beanutils core:jar:1.8.0:compile
| +- org_common:_security_lib:jar:16.0.006:compile
| \- org.springframework:spring:jar:2.0:compile
+- **project.name:EJB:ejb client:client:1.0 SNAPSHOT:compile**
| \- com.ibm.websphere.appserver:j2ee:jar:7.0.0.9:compile
+- org_common:_uicomponent:jar:16.0.006:compile
E qui è l'albero di uscita della dipendenza da quando si esegue mvn clean install -X
**project.name:UI:war:1.0 SNAPSHOT**
+- project.name:Common:jar:1.0 SNAPSHOT:compile
| + org_common:_lib:jar:16.0.006:compile
| | +- log4j:log4j:jar:1.2.16:compile
| | \- commons configuration:commons configuration:jar:1.6:compile
| | +- commons lang:commons lang:jar:2.4:compile
| | +- commons digester:commons digester:jar:1.8:compile
| | \- commons beanutils:commons beanutils core:jar:1.8.0:compile
| +- org_common:_security_lib:jar:16.0.006:compile
| \- org.springframework:spring:jar:2.0:compile
+- **project.name:EJB:ejb client:client:1.0 SNAPSHOT:compile**
| +- **project.name:Server:jar:1.0 SNAPSHOT:compile**
| | +- javassist:javassist:jar:3.4.GA:compile
| | +- project.filestore:filestore_client:jar:7.0.003:compile
| | +- com.ibm.db2:db2jcc:jar:9.7.fp1.aix64.s091114:compile
| | +- com.ibm.db2:db2java:jar:9.7.fp1.aix64.s091114:compile
| | +- com.ibm.db2:db2jcc_license_cu:jar:9.7.fp1.aix64.s091114:compile
| \- com.ibm.websphere.appserver:j2ee:jar:7.0.0.9:compile
+- org_common:_uicomponent:jar:16.0.006:compile
La dipendenza Server è l'unica differenza tra i due alberi. Non dovrebbero queste due uscite essere sempre le stesse? Cosa potrebbe causare l'inclusione di una libreria che non viene visualizzata nella dipendenza: tree?
Il POM genitore definisce i moduli:
<modules>
<module>Server</module>
<module>EJB</module>
<module>UI</module>
</modules>
La dipendenza elencato nella POM EJB è:
<dependencies>
<dependency>
<groupId>project.name</groupId>
<artifactId>Server</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
La dipendenza nell'interfaccia utente è:
<dependencies>
<dependency>
<groupId>project.name</groupId>
<artifactId>EJB</artifactId>
<version>${project.version}</version>
<type>ejb-client</type>
<exclusions>
<exclusion>
<groupId>project.name</groupId>
<artifactId>Server</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
I Sono consapevole del fatto che posso escludere esplicitamente il server jar dall'essere incluso nel WAR, ma preferirei correggere l'actua l problema.
Se l'interfaccia utente dipende da EJB e EJB dipende dal server, l'interfaccia utente dipende dal server. Quindi, si esclude EJB con le sue dipendenze transitive da 'WEB-INF/lib' impostando il suo ambito su' provided', o impacchettandoli tutti in guerra.Per quanto ne sappia, non c'è modo di includere nella guerra solo gli artefatti di base senza le sue dipendenze transitive. –
Stai utilizzando il plug-in di dipendenza più aggiornato (2.4)? – khmarbaise
@AndrewLogvinov Ecco perché ho l'esclusione sul server quando il progetto EJB viene aggiunto come dipendenza all'interfaccia utente. Il livello EJB è speciale in Maven - è suddiviso in contenitori Client e Server - il jar del Cliente da cui dipende l'IU non ha una dipendenza dal Server. Se la dipendenza transitiva è esclusa esplicitamente, perché dovrebbe essere inclusa? –