java - 如何在两个项目之间共享代码?

标签 java eclipse maven classpath

我有两个名为 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/

相关文章:

java - 如何在 List<Object> 中找到 Max Date?

java - 如何将我的返回方法与这段代码结合起来? (Java、Eclipse)

java - 向 Heroku 启动 Dropwizard 项目失败

java - 无法连接 Spark-Cloudant

java - Solr LukeRequest 返回一个空的 fieldInfo 映射

java - 将映射中具有最低值的键转置到集合中

java - 静态数组长度,替换值

java - 无法在 Eclipse 中将源分配给 jar

linux - 使用 eclipse 插件下载 Lejos 固件 (Linux Mint 17.3)

java - 使用 Mina JAR 依赖项而不是 bundle ?