我有一个问题要提交,因为我很确定它存在一个简单的解决方案。
精密度:
- 我是系统管理员
- 我发布这条消息是因为我试图帮助我的同事开发商没有成功的时刻
我们有一个自制的共享库,我们称之为“myLibrary”:它是一个Java库(构建时是一个编译器),我们在许多独立应用程序(而不是模块化应用程序)之间共享它。
例如,这个库提供了一个自制的抽象类来连接到MongoDB。在其pom.xml中:
- 我们有很多依赖
- 其中一个依赖项是mongodb-driver-sync:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.9.1</version>
</dependency>
我们的一个应用程序是一个Java Web服务器:
- 我们称之为“myApplication”
- 在生产环境中,我们将应用程序部署在Tomcat服务器中
在myApplication的pom.xml中:
- 我们有许多依赖关系显式声明
- 我们显式声明了对“myLibrary”的依赖
当我们构建WAR时(通过Eclipse的“Maven Build”功能和/或通过我们的CI/CD管道),我们得到了一个WAR,它包含:
- 所有的依赖都显式声明
- 库myLibrary显式声明
- 我们得到了myLibrary的依赖项:因此,在WEB-INF/lib中,我们有mongodb-driver-sync文件
在这个层面上,它工作得很完美。
但是当我们试图直接在Eclipse中执行这个应用程序时(实时开发会话/调试),我们遇到了一个问题。
在这个上下文中,我们得到了一个与MongoDB相关的错误NoClassDefFoundError。我们分析了很多,结果是这样的:
- 当我们在Eclipse中执行应用程序时,Eclipse会将应用程序部署到某个位置。我们找到了部署应用程序的目录:
- 此目录包含目录WEB-INF/lib
- 此WEB-INF/lib目录仅包含在myApplication的pom.xml中显式声明的依赖项:myLibrary的依赖项未嵌入
- 如果我们手动添加缺少的字符串(例如:MongoDB驱动程序):它的工作
我们测试了很多东西,但似乎没有什么工作,除非我们在myApplication的pom.xml中显式地添加依赖项:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.9.1</version>
</dependency>
我们希望避免这种情况,原因有很多。
关于我们的环境:
- 日 eclipse :2023-03
- JDK:1.8
- Maven:3.8.7
请问有人有想法建议吗?
非常感谢
我们尝试执行mvn [...] eclipse:eclipse,但失败了,我们在Eclipse中破坏了我们的项目。
我们尝试使用“Java Build Path”功能:
- 添加“Maven认证”
- 删除“Maven的重复”->它失败了,但也许我们错过了一些东西
我们尝试使用“部署组装”功能:
- 添加“myLibrary”
- 删除“myLibrary”->它失败了,但也许我们错过了一些东西
1条答案
按热度按时间au9on6nz1#
我找到了一个暂时有效的解决办法。
在myLibrary的pom.xml中,我有:
解决方案是将变量${revision}替换为硬编码值:
现在看来,它的工作。