如何使用maven的其他项目中的类? (抛出ClassNotFoundException和NoClassDefFoundError)

时间:2015-11-22 15:34:06

标签: java eclipse maven

我有两个Vaadin项目(我将它们命名为A和B)。两者都使用Maven来解析依赖关系并且位于同一个工作区中。我正在使用Eclipse,我正在使用m2e-plugin。我想在项目A中使用一些B类。在Eclipse中我可以在没有错误/警告的情况下实例化它们但是当我尝试运行AI时,通过实例化一个B类来获得ClassNotFoundExceptionNoClassDefFoundError

A的.class个文件位于...\workspace\A\target\classes,而项目B位于...\workspace\B\target\classes。 我一直试图解决这个问题,但我找不到解决方案。 到目前为止我尝试了什么:

  • 配置构建路径 - > Libaries - >添加类文件夹 - >乙\目标
  • 配置构建路径 - > Libaries - >添加外部类文件夹 - >乙\目标
  • 配置构建路径 - >项目 - >添加 - >乙

我认为添加项目是必要的,因为当我删除它时,当我尝试使用A中的B类时,Eclipse会给出错误消息

我不知道还能做什么。也许我必须配置我的pom.xml文件,但我不知道我必须在那里做什么。

编辑: 在项目B的pom.xml中:

<groupId>de.qufis</groupId>
<artifactId>CentwertApp</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>CentwertApp</name>

在项目A的pom.xml中:

    <dependency>
        <groupId>de.qufis</groupId>
        <artifactId>CentwertApp</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>war</type>
        <scope>import</scope>
    </dependency>

我使用maven build对项目B进行了清理编译。 然后我尝试用项目A做同样的事情,但后来我得到错误信息: 找不到工件de.qufis:CentwertApp:war:0.0.1-SNAPSHOT in vaadin-addons(http://maven.vaadin.com/vaadin-addons

当我正常运行应用程序时,我仍然得到ClassNotFoundException和NoClassDefError。

编辑2: 我添加了

<scope>compile</scope>

当我运行Maven构建(清理编译)时,我的构建过程的一部分如下所示:

[INFO]建筑物centwertAdmin 0.0.1-SNAPSHOT

[INFO] -------------------------------------------- ----------------------------

[警告] de.qufis的POM:CentwertApp:war:0.0.1-SNAPSHOT缺失,没有可用的依赖信息

[INFO] -------------------------------------------- ----------------------------

[INFO] BUILD FAILURE

然后是错误消息:

[错误]无法在项目centwertAdmin上执行目标:无法解析项目de.qufis的依赖项:centwertAdmin:war:0.0.1-SNAPSHOT:找不到de.qufis:CentwertApp:war:0.0.1-SNAPSHOT在http://maven.vaadin.com/vaadin-addons中缓存在本地存储库中,在vaadin-addons的更新间隔过去或强制更新之前,不会重新尝试解析 - &gt; [帮助1]

1 个答案:

答案 0 :(得分:4)

你可以尝试从B中删除<packaging>war</packaging>吗? Maven的默认包装是jar,这就是B所需要的。

另外,将B添加到A的dependencies

  • 构建B项目。使用mvn clean install,即可安装B&#39 本地存储库中的JAR + POM(.m2)。
  • 确认它在那里......然后 Maven将能够找到它,所以你不会得到错误&#34;可以 找不到神器de.qufis:CentwertApp&#34;
  • Build A。

通常,依赖项的类型为JAR。如果B 必须为WAR,请参阅this