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

我有两个名为A和B的Java项目。它们都是作为war文件部署的Web应用程序。 我分别在Eclipse工作区中创建它们。 项目B使用名为MusicMapper项目A中的类。 我按照本文中的建议将项目A添加到项目B的Eclipse构建路径中。 所以现在项目B可以编译而没有任何错误,通过在项目B中导入它可以在项目B中看到类MusicMapper

 import com.projectA.MusicMapper; 

在我启动项目B的Web应用程序之前,一切似乎MusicMapper 。但是,当我启动项目B并调用项目A中引用类MusicMapper的代码时,我收到以下运行时错误:

 java.lang.ClassNotFoundException: com.projectA.MusicMapper 

所以这个错误似乎是由从项目A导入的未完成的类com.projectA.MusicMapper引起的。因为我已经将项目A添加到项目B构建路径并且项目B编译没有任何错误,为什么它在运行时报告此错误?

我采取的另一种方法是:我还尝试在项目B的pom.xml使用以下Maven导入:

   com.projectA projectA 0.0.1-SNAPSHOT system /path/to/projectA.jar  

其中projectA.jar是我从项目A导出的jar文件。但它仍然给了我相同的ClassNotFoundException 。 如何使项目A中的类可以被项目B使用? 似乎我试过的这两种方法都不起作用。

首先,如果你有两个项目都被部署为战争,那么将一个项目作为依赖项包含在另一个项目中并不是一个好主意。 因为你将在项目B中不需要许多其他东西。

一个更好的方法是创建一个第三个java项目,让我们说“Common”这应该只是一个java项目,不是一个动态Web项目,应该编译为jar。 将项目A和项目B之间共享的所有内容移动到Common项目中。

现在回到你的问题只是在eclipse中添加项目构建路径中的一些东西并不意味着你已经在eclipse之外添加了对项目的依赖。 Eclipse不会抱怨因为它可以解析并找到项目,因为你在eclipse构建路径中添加了它。 您必须使用某些构建工具(如ant,maven或gradle)编译公共依赖项目,并在构建war时将jar打包在war文件中。

如果你不想使用构建工具,一个简单的路径就是将第二个项目从eclipse导出为jar。 在从Eclipse中导出war文件之前,复制项目A和项目B的WEB-INF / lib文件夹中的公共jar文件。

我希望它有帮助:)