我有一个Java项目X对项目Y.Maven的依赖版本和java.lang.NoClassDefFoundError
我修改Y和构建X,Y与Maven工具,然后乳宁X的依赖(在POM文件)(在JBoss上)没有问题。
当我在Y中添加新类,然后使用Maven构建(没有问题),然后运行X时,它为新类引发java.lang.NoClassDefFoundError
。
我认为它的Maven依赖版本或类似的东西...我主要搜索谷歌,但没有影响...如何解决这个问题?
我有一个Java项目X对项目Y.Maven的依赖版本和java.lang.NoClassDefFoundError
我修改Y和构建X,Y与Maven工具,然后乳宁X的依赖(在POM文件)(在JBoss上)没有问题。
当我在Y中添加新类,然后使用Maven构建(没有问题),然后运行X时,它为新类引发java.lang.NoClassDefFoundError
。
我认为它的Maven依赖版本或类似的东西...我主要搜索谷歌,但没有影响...如何解决这个问题?
好的,对于迟到的信息抱歉。
X包是ejb,所以X.jar没有lib目录。
然后Y.jar应该放在Jboss/server/default/lib中,它工作正常。
Thanx所有。
您是否安装/部署新版本的Y,升级X对新版本Y的依赖关系,并重新构建X?
在Y POM具有版本
尽管IDE插件(如m2eclipse)也会解析工作区内项目的依赖项,Maven可以解决本地和远程存储库的依赖关系。如果您没有这样的插件,则需要将工件Y安装到本地存储库或将其部署到远程存储库,以便您和您的同事可以在Maven识别出构建项目时进行更改之前访问它十
如果这两个项目是紧密相关的,你可以考虑创建一个multi-module build使项目X和Y在同一时间建成。
1.它在存储库中,这样我使用安装命令2.它已经是一个多模块项目......并且我试图在父项目中构建它......但是同样的事情 – Moro 2009-10-08 17:07:28
摩洛,你在评论中写道,X具有以下依赖声明:
<dependency>
<groupId>Y</groupId>
<artifactId>Y</artifactId>
<scope>provided</scope>
<version>1.0</version>
</dependency>
第一点。您在此处使用“固定”版本(与“SNAPSHOT
”相反)。当使用SNAPSHOT
时,maven会自动获取最新的SNAPSHOT
,每次您建立。另一方面,当你使用1.0时,一旦maven下载了这个神器,它永远不会试图获得一个新的1.0。所以,你应该增加Y的版本,或者,如果Y正在积极开发(增强,错误修复等),你应该真的使用SNAPSHOT
。 约SNAPSHOT
欲了解更多信息,请Sonatype的书的章节9.3.1.2. SNAPSHOT Versions:
为什么你会使用吗? SNAPSHOT 版本用于 积极开发的项目。如果你的项目 依赖于软件组件 正在积极开发中,你可以 依赖于一个快照版本,并 Maven会定期尝试 从 库下载最新的快照,当你运行构建。 同样,如果您的 系统的下一个版本将具有版本 “1.4”,那么您的项目将具有 版本“1.4-SNAPSHOT”,直到它正式发布为 。
第二点。您正在使用provided
范围。据章 9.4.1. Dependency Scope:当你 期望JDK或 容器为他们提供
provided
依赖性使用。例如,如果你 开发Web应用程序,你 需要提供 了Servlet API的类路径编译编译 servlet的,但你不会想 包括在 打包WAR在Servlet API; Servlet API JAR是由您的应用程序服务器或 servlet容器提供的 。provided
编译类路径(不是运行时)的 上存在依赖关系。 它们不是传递性的,也不是 打包。
这真的是你想要的吗?你如何在JBoss上部署X和Y?你不应该使用默认的compile
范围吗?
我注意到生成的x.jar没有包含y.jar的“lib”目录...我手动添加了这个...并且运行正常......但是现在,如何让Maven自动执行此操作(如果这是一个正确的解决方案)? – Moro 2009-10-14 17:37:42