带有依赖库的 Maven EJB 打包
Posted
技术标签:
【中文标题】带有依赖库的 Maven EJB 打包【英文标题】:Maven EJB packaging with dependent libraries 【发布时间】:2011-12-30 15:56:34 【问题描述】:我面临一个问题,如何使用简单的 WAR 和 EJB3 模块为 JBoss7 应用服务器正确打包我的企业 (EAR) 应用程序。问题是,EJB 模块正在使用 XML-RPC 库(来自 Apache),而在部署 EAR 期间,我仍然得到 NoDefClassFound
(来自这个 xmlrpc 库的类)。
问题是,maven-ejb-plugin 不在最终的 EJB jar 中打包依赖项,但 maven-ear-plugin 确实打包它位于 EAR 目录的根目录。
当 EAR 被部署时,INSTALL 在内部 EJB 模块上被调用,但它没有找到 xmlrpc lib 类(它不是用 EJB jar 而是用 EAR 打包的,并且它在清单中没有任何条目)。
EJB 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>
<groupId>cz.ctu.fee.voxport.app_logic</groupId>
<artifactId>core</artifactId>
<version>1.0</version>
<packaging>ejb</packaging>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.xmlrpc</groupId>
<artifactId>xmlrpc-common</artifactId>
<version>3.1.3</version>
</dependency>
<dependency>
<groupId>org.apache.xmlrpc</groupId>
<artifactId>xmlrpc-client</artifactId>
<version>3.1.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.3</version>
<configuration>
<ejbVersion>3.1</ejbVersion>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
有什么方法可以使用 maven 彻底解决这个问题?
【问题讨论】:
请发布您的 POM 的相关部分。 可能是我设法解决了这个问题。似乎这些库必须打包在 /lib 目录中,而不是在 EAR 的根目录中。添加 defaultLibBundleDir 元素解决了这个问题。
例如:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.6</version>
<configuration>
<defaultLibBundleDir>lib</defaultLibBundleDir>
...
【讨论】:
如果这是对您有用的答案,请继续并将其标记为已接受的答案,让未来的观众知道什么对您有用。 我会接受,但我可以在 19 小时内完成(*** 规则) 您是否在 EJB 配置中留下了<addClasspath>true</addClasspath>
?
当然,他必须在EJB pom文件上留下true才能引用EAR文件中打包好的库
感谢所有关注的 cmets。无论如何,这些都已经过时了,因为 EAR 的时代已经过去了【参考方案2】:
您是否在 EJB 配置中留下了
<addClasspath>true</addClasspath>
?
好吧,您可以这样保留它,但是您会在服务器上收到一堆日志条目 (WARN),开始抱怨类路径条目。
我更喜欢将其设置为 false。 <addClasspath>false</addClasspath>
【讨论】:
以上是关于带有依赖库的 Maven EJB 打包的主要内容,如果未能解决你的问题,请参考以下文章
Maven - settings.xml里的offline节点的作用