我有一个问题要提交,因为我很确定它存在一个简单的解决方案。
精度:
我们有一个自制的共享库,我们将其称为“myLibrary”:它是一个 Java 库(构建时为 JAR),我们在许多独立应用程序(不是模块化应用程序)之间共享。
例如,该库提供了一个自制的抽象类来连接到 MongoDB。 在其 pom.xml 中:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.9.1</version>
</dependency>
我们的应用程序之一是 Java Web 服务器:
在myApplication的pom.xml中:
当我们构建 WAR 时(借助 Eclipse 的“Maven Build”功能和/或通过我们的 CI/CD 管道),我们得到了一个 WAR,其中包含:
在这个级别,它工作得非常完美。
但是当我们尝试直接在 Eclipse 中执行此应用程序(实时开发会话/调试)时,我们遇到了问题。
在此上下文中,我们收到与 MongoDB 相关的错误 NoClassDefFoundError。 我们分析了很多,结果是这样的:
我们测试了很多东西,但似乎没有任何效果,除非我们在 myApplication 的 pom.xml 中显式添加依赖项:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.9.1</version>
</dependency>
出于多种原因,我们希望避免这种情况。
有关我们环境的详细信息:
有人有想法可以建议吗?
非常感谢。
我们尝试执行 mvn [...] eclipse:eclipse 但它失败了+我们在 Eclipse 中破坏了我们的项目。
我们尝试使用“Java Build Path”功能:
我们尝试使用“部署组装”功能:
我找到了目前有效的解决方案。
在 myLibrary 的 pom.xml 中,我有这个:
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<revision>${revision}</revision>
[...]
</properties>
解决方案是将变量 ${revision} 替换为硬编码值:
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<revision>1.0</revision>
[...]
</properties>
现在看来它有效了。