Ho un progetto Java EE. Il progetto è stato realizzato utilizzando maven in un archivio .ear. C'è un barattolo di libreria contenente un'unità di persistenza JPA 2, che si trova nella directory della libreria dell'orecchio (quindi più altri moduli possono usarlo).In Java EE, quali vasi devo inserire nella directory della libreria?
Aggiungendo un'implementazione dell'interfaccia di autorizzazione di Shiro come un'entità in questa unità di persistenza, ho avuto difficoltà a distribuire l'orecchio correttamente, perché le classi shiro non erano disponibili nell'unità di persistenza. Alla fine ho capito che avevo bisogno di mettere tutte le dipendenze (applicate anche ai deps transitivi) del jar della libreria nella directory della libreria per farlo distribuire.
Così il layout finale sembrano grosso modo così:
ear
`- lib
`- persistence-unit.jar
- shiro-core.jar
- slf4j-api.jar
- module1
- moduleN
- library1.jar
- libraryN.jar
Ora, per le domande:
- Esistono linee guida per quello che dovrebbe essere messo nella directory di libreria, ed è il mio soluzione generalmente accettabile?
- Perché le librerie nella radice dell'orecchio non sono disponibili per i jar nella directory lib?
- Perché Maven non lo rileva automaticamente?
EDIT: pom.xml per l'orecchio
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>ear</artifactId>
<packaging>ear</packaging>
<parent>
<groupId>com.example</groupId>
<artifactId>project</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.7</version>
<configuration>
<modules>
<webModule>
<!-- ... -->
</webModule>
<ejbModule>
<!-- ... -->
</ejbModule>
<jarModule>
<groupId>com.example</groupId>
<artifactId>persistence-unit</artifactId>
<bundleDir>lib</bundleDir>
</jarModule>
<-- I added these to get the deployment working -->
<jarModule>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<bundleDir>lib</bundleDir>
</jarModule>
<jarModule>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<bundleDir>lib</bundleDir>
</jarModule>
</modules>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>persistence-unit</artifactId>
</dependency>
<dependency>
<!-- ... -->
<type>war</type>
</dependency>
<dependency>
<!-- ... -->
<type>ejb</type>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
</dependency>
</dependencies>
</project>
E per l'unità di persistenza:
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>persistence-unit</artifactId>
<packaging>jar</packaging>
<parent>
<groupId>com.example</groupId>
<artifactId>project</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.jboss.spec</groupId>
<artifactId>jboss-javaee-6.0</artifactId>
<type>pom</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
</dependency>
</dependencies>
</project>
La tua ipotesi circa la domanda 3 è corretta. Ho aggiornato la domanda con i poms. Semplificato, ma spero abbastanza e senza rimuovere il vero problema :) –
Ho aggiunto più informazioni alla mia risposta, spero che ti aiuti un po 'oltre - almeno il 'addClasspath' potrebbe essere quello che ti serve.Sono in dubbio se il tuo problema è far sì che Maven in realtà includa dee transitori o semplicemente che siano disponibili sul classpath. Se quest'ultimo, penso che questo è proprio quello che ti serve. Saluti, –