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

ton*_*nga 5 java eclipse classpath maven

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

import com.projectA.MusicMapper;
Run Code Online (Sandbox Code Playgroud)

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

java.lang.ClassNotFoundException: com.projectA.MusicMapper
Run Code Online (Sandbox Code Playgroud)

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

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

    <dependency>
        <groupId>com.projectA</groupId>
        <artifactId>projectA</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <scope>system</scope>
        <systemPath>/path/to/projectA.jar</systemPath>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

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

vkg*_*vkg 6

首先,如果你有两个项目都被部署为战争,那么将一个项目作为依赖项包含在另一个项目中并不是一个好主意.因为你将在项目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文件.

我希望它有帮助:)