我有一个 Java 项目 X 依赖于项目 Y(在 pom 文件中)。
我在 Y 中进行修改并使用 Maven 工具构建 X,Y,然后运行 X(在 JBoss 上)没有问题。
当我在 Y 中添加新类然后使用 Maven 构建(没有问题),然后运行 X 时,它会抛出java.lang.NoClassDefFoundError
为了新班级。
我认为它是 Maven 依赖版本控制或类似的东西...我主要在 Google 搜索,但没有任何效果...如何解决这个问题?
Moro,您在评论中写道,X 声明了以下依赖项:
<dependency>
<groupId>Y</groupId>
<artifactId>Y</artifactId>
<scope>provided</scope>
<version>1.0</version>
</dependency>
第一点。您在这里使用“固定”版本(而不是“SNAPSHOT
”)。使用时SNAPSHOT
,maven会自动抓取最新的SNAPSHOT
每次你建造。另一方面,当你使用 1.0 时,一旦 maven 下载了这个工件,它就会never尝试获得新的 1.0。因此,您应该增加 Y 的版本,或者,如果 Y 正在积极开发(增强、错误修复等),您应该真正使用SNAPSHOT
。
欲了解更多信息SNAPSHOT
,查看章节9.3.1.2。快照版本 http://www.sonatype.com/books/maven-book/reference/pom-relationships-sect-pom-syntax.html#pom-relationships-sect-snapshot-versionsSonatype 的书:
你为什么要用这个?快照
版本用于以下项目
积极发展。如果你的项目
取决于一个软件组件
正在积极开发中,您可以
取决于快照版本,并且
Maven 将定期尝试
从 a 下载最新的快照
运行构建时的存储库。
同样,如果您的下一个版本
系统将会有一个版本
“1.4”,您的项目将有一个
版本“1.4-SNAPSHOT”直到它
正式发布。
第二点。您正在使用一个provided
范围。根据章节9.4.1.依赖范围 http://www.sonatype.com/books/maven-book/reference/pom-relationships-sect-project-dependencies.html#pom-relationships-sect-dependency-scope:
provided
当使用依赖项时
您期望 JDK 或容器
提供他们。例如,如果您是
开发 Web 应用程序,您
需要可用的 Servlet API
在编译类路径上编译
servlet,但你不会想要
将 Servlet API 包含在
打包的 WAR; Servlet API JAR 是
由您的应用程序服务器提供或
servlet 容器。provided
依赖项可在
编译类路径(不是运行时)。
它们不是传递性的,也不是
包装好的。
这真的是你想要的吗?您如何在 JBoss 上部署 X 和 Y?你不应该使用默认的吗compile
scope?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)