私はJava EEプロジェクトを持っています。このプロジェクトは、Mavenを.earアーカイブに使用してビルドされています。耳のライブラリディレクトリにあるJPA 2パーシスタンスユニットを含むライブラリのjarファイルがあります(他の複数のモジュールでも使用できます)。Java EEでは、どのjarファイルをライブラリディレクトリに置くべきですか?
ShiroのPermissionインタフェースの実装をこのパーシスタンスユニットのエンティティとして追加すると、永続ユニットで使用できないshiroクラスが存在するため、耳を正しく配置することができませんでした。私は最終的に、ライブラリー・ディレクトリー内のライブラリー・ジャーナルのすべての依存関係(ライブラリー・ディレクトリーにも適用されています)を配備する必要があることを理解しました。
だから、最終的なレイアウトは、このように大まかに見える:
今ear
`- lib
`- persistence-unit.jar
- shiro-core.jar
- slf4j-api.jar
- module1
- moduleN
- library1.jar
- libraryN.jar
、質問のために:
- は、ライブラリディレクトリに置くべきである何のための任意のガイド線が存在し、そして私ですソリューションは一般的に受け入れられる?
- 耳の根元のライブラリがlibディレクトリのjarファイルで利用できないのはなぜですか?
- なぜこれを自動的に把握していないのですか?
EDIT:耳用のpom.xml
<?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>
そして永続ユニット用:
<?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>
質問3についてのあなたの仮定が正しいです。私はポムで質問を更新しました。単純化されていますが、実際には問題がなくても十分です。 –
私は自分の答えにもっと多くの情報を加えました。少しでも助けてくれることを願っています - 少なくとも 'addClasspath'が必要なものかもしれません。あなたの問題が実際に一時的なdepsを含めるようになっているのか、クラスパスで利用できるようにするのかは疑問です。後者の場合、これはあなたが必要とするものだと私は思う。乾杯、 –