2014-05-16 149 views
5

我有两个称为A和B的Java项目。它们都是部署为war文件的web应用程序。我分别在Eclipse工作区中创建了它们。项目B在名为MusicMapper的项目A中使用一个类。我在this post中建议将项目A添加到项目B的Eclipse构建路径中。所以,现在项目B可没有任何错误和类MusicMapper通过导入其B工程可以编译B工程中可以看出:如何在两个项目之间共享代码?

import com.projectA.MusicMapper; 

一切似乎要被罚款之前,我启动项目B的Web应用程序。然而,当我启动了B项目,并呼吁在项目A引用MusicMapper类的代码,我得到了以下运行时错误:

java.lang.ClassNotFoundException: com.projectA.MusicMapper 

所以这个错误似乎是由这是从项目A.进口unfound类com.projectA.MusicMapper引起由于我已经将项目A添加到项目B构建路径和项目B编译罚款没有任何错误,为什么它在运行时报告这个错误?

我又办法是:我已经使用以下Maven进口项目也试图B的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> 

其中projectA.jar是jar文件,我从项目A.出口但它仍然给了我相同的ClassNotFoundException。如何让项目A中的课程可以通过项目B使用?看来,我尝试过的两种方法都不行。

+0

你觉得这对你的答案:) – vkg

回答

5

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

一个更好的办法将是创建一个三Java项目可以说,“通用”这应该只是一个Java项目不是动态Web项目,应该编译为jar。将项目A和项目B之间共享的所有内容移到Common项目中。

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

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

我希望它能帮助:)

+0

感谢。所以我需要将'MusicMapper'类从项目A中移出并放入包装在jar中的“Common”项目中。但是如果类MusicMapper对项目A的某些类有依赖性呢?另外,有没有什么办法可以包含项目B的Maven pom.xml中项目A导出的jar?我如上所示尝试过,但没有成功。 – tonga

+0

很多问题:)是的,你应该把MusicMapper移到普通项目中。但是现在,如果您发现MusicMapper类有很多依赖关系,从而导致几乎所有的项目A都反映了代码中的糟糕设计。在这种情况下,你可能需要做一些重构来清理。现在回到maven。这里很难解释这一切。但是在构建maven期间它的基本概念将首先编译通用项目并发布到当地的mvaen回购站。如果你已经正确定义了它的依赖关系,它将在打包你的web项目的战争时包含这个jar。 – vkg

+0

是的,我认为如果'MusicMapper'对项目A的其他类具有很多依赖性,那么这意味着设计是有问题的。我将尝试为项目A和B之间的公共共享类建立一个“通用”项目。但是另一方面,使用包含项目A和B的主Maven项目会有帮助吗?这样,我可能不需要将任何课程移至共同的项目。但缺点是我必须正确设置主Maven项目的pom.xml。我也看到有人用这种方式。 – tonga

相关问题