我有两个名为 A 和 B 的 Java 项目。它们都是部署为 war 文件的 Web 应用程序。我分别在 Eclipse 工作区中创建了它们。项目 B 使用项目 A 中名为 MusicMapper
的类。我按照 this post 中的建议将项目 A 添加到项目 B 在 Eclipse 中的构建路径中.所以现在项目 B 可以编译没有任何错误,并且类 MusicMapper
可以通过在项目 B 中导入它来在项目 B 中看到:
import com.projectA.MusicMapper;
在我启动项目B的web应用程序之前一切似乎都很好。但是,当我启动项目B并调用引用项目A中的类MusicMapper
的代码时,我得到了以下运行时错误:
java.lang.ClassNotFoundException: com.projectA.MusicMapper
所以这个错误似乎是由未找到的类 com.projectA.MusicMapper
引起的,它是从项目 A 导入的。因为我已经将项目 A 添加到项目 B 构建路径并且项目 B 编译正常,没有任何错误,为什么在运行时会报这个错误?
我采用的另一种方法是:我还尝试在项目 B 的 pom.xml
中使用以下 Maven 导入:
<dependency>
<groupId>com.projectA</groupId>
<artifactId>projectA</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>system</scope>
<systemPath>/path/to/projectA.jar</systemPath>
</dependency>
其中 projectA.jar
是我从项目 A 导出的 jar 文件。但它仍然给了我相同的 ClassNotFoundException
。如何使项目 B 可以使用项目 A 中的类?似乎我尝试过的两种方法都不起作用。
最佳答案
首先,如果您有两个项目都部署为 war ,那么将一个项目作为依赖包含到另一个项目中并不是一个好主意。因为您将引入项目 B 中不需要的许多其他内容。
更好的方法是创建一个Third java project lets say "Common" 这应该只是一个java 项目 而不是动态 Web 项目,应该编译为 jar。将项目 A 和项目 B 之间共享的所有内容移动到 Common 项目中。
现在回到你的问题 只是在 eclipse 的项目构建路径中添加一些东西并不意味着你已经在 eclipse 之外的项目中添加了依赖项。 Eclipse 不会提示,因为它可以解析并找到项目,因为您在 eclipse 构建路径中添加了项目。您将不得不使用一些构建工具(如 ant、maven 或 gradle)编译公共(public)依赖项项目,并在构建 war 时将 jar 打包到您的 war 文件中。
如果您不想使用构建工具,一个简单的方法就是将第三个项目从 eclipse 导出为 jar。在从 eclipse 导出 war 文件之前,复制项目 A 和项目 B 的 WEB-INF/lib 文件夹中的公共(public) jar 文件。
希望对你有帮助:)
关于java - 如何在两个项目之间共享代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23704903/