我有一個Java EE項目。該項目使用Maven構建到.ear存檔中。有一個包含JPA 2持久性單元的庫jar,它位於耳朵的庫目錄中(所以其他多個模塊可以使用它)。在java EE中,應該將哪些jar放在庫dir中?
雖然在此持久性單元中添加Shiro的Permission接口的實現作爲實體,但我無法正確部署,因爲持久單元中不可用的shiro類。我最終發現我需要將庫jar目錄中的所有依賴關係(也適用於傳遞層次)放到庫目錄中以便部署它。
所以最終佈局看起來大致是這樣的:現在
ear
`- lib
`- persistence-unit.jar
- shiro-core.jar
- slf4j-api.jar
- module1
- moduleN
- library1.jar
- libraryN.jar
,對於問題:
- 是否有什麼應該被放入庫目錄中的任何引導線,並且是我的解決方案一般可接
- 爲什麼耳朵根中的庫不可用於lib目錄中的罐子?
- 爲什麼maven不能自動計算出來?
編輯: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的假設是正確的。我用poms更新了這個問題。簡化,但希望是足夠的,並沒有刪除實際問題:) – 2013-02-14 11:51:59
我已經添加了更多信息給我的答案,我希望能夠幫助你進一步 - 至少addClasspath'可能是你需要的。我懷疑你的問題是否讓maven實際上包含瞬態代價或只是讓它們在類路徑中可用。如果是後者,我認爲這正是你需要的。乾杯, – 2013-02-14 12:57:15