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

时间:2014-05-16 21:34:39

标签: java eclipse maven classpath

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

import com.projectA.MusicMapper;

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

java.lang.ClassNotFoundException: com.projectA.MusicMapper

所以这个错误似乎是由从项目A导入的未完成的类com.projectA.MusicMapper引起的。因为我已经将项目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。如何让项目A中的类可以被项目B使用?似乎我尝试过的这两种方法都不起作用。

1 个答案:

答案 0 :(得分:5)

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

更好的方法是创建一个第三个java项目让我们说&#34; Common&#34; 这应该只是一个 java项目 NOT 动态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文件。

我希望它有所帮助:)