【问题标题】:Intellij - maven module dependecy. NoClassDefFound ErrorIntellij - Maven 模块依赖。 NoClassDefFoundError
【发布时间】:2015-08-19 11:34:50
【问题描述】:

我创建了一个 maven 基础项目,它有两个模块,AB。在A 中,我添加了B 作为依赖项,还通过Project StructureB 中添加了来自maven 的JSoup。

现在我想运行以下代码 答:

public class A {
    public static void main(String args[]){
        new B().foo();
    }
}

乙:

public class B {
    public void foo() {
        System.out.println("B....");//prints B...
        new Document("S");// NoClassDefFoundError exception
    }
}

当我运行以下代码时,它会说:

Exception in thread "main" java.lang.NoClassDefFoundError: org/jsoup/nodes/Document

Jsoup 仅添加到 B.iml 而非 B.pom 文件中:

<orderEntry type="library" exported="" name="org.jsoup:jsoup:1.8.3" level="project" />

我可以通过将 jsoup 依赖项添加到 A 来解决这个问题,但我认为这不是一个好主意。

有什么方法可以让A 识别所有B 的依赖项?

根 pom:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>xxx</groupId>
    <artifactId>xxx</artifactId>
    <packaging>pom</packaging>
    <version>0.5-SNAPSHOT</version>
    <modules>
        <module>A</module>
        <module>B</module>
    </modules>


</project>

A 的绒球

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>xxx</artifactId>
        <groupId>xxx</groupId>
        <version>0.5-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>A</artifactId>


</project>

B 的 pom:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>xxx</artifactId>
        <groupId>xxx</groupId>
        <version>0.5-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>B</artifactId>


</project>

【问题讨论】:

  • 你试过File -&gt; Invalidate Cache\Restart -&gt; Invalidate and Restart
  • 使用maven时,依赖是在pom中声明的,别处没有
  • @KarthikeyanVaithilingam 是,但仍然出现异常
  • @Salvador 你能发布你的 pom.xml(s) 和模块结构吗?
  • AFAIK,这是另一种方式,您将 maven 项目导入 intellij,因此项目文件(iml 等)从 pom.xml 更新

标签: java maven intellij-idea


【解决方案1】:

在 A 中我添加了 B 作为依赖项

所以也需要将此依赖添加到A的pom文件中

 <dependencies>
        <dependency>
            <groupId>xxx</groupId>
            <artifactId>B</artifactId>
            <version>0.5-SNAPSHOT</version>
        </dependency>

    </dependencies>

并且还在 B 中添加了来自 maven 的 JSoup

你还应该把这个依赖添加到B的pom文件中

 <dependencies>
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.8.3</version>
        </dependency>
    </dependencies>

通过项目结构

IntelliJ 和 Maven 依赖管理不相互关联。

【讨论】:

    【解决方案2】:

    您没有将 B 作为依赖项添加到 A。为此,您必须在 A 的 pom.xml 中添加这一行。

    <dependencies>
        <dependency>
            <groupId>xxx</groupId>
            <artifactId>B</artifactId>
            <version>0.5-SNAPSHOT</version>
         </dependency>
    </dependencies>
    

    此外,jsoup 在任何项目中都没有被定义为依赖项。你应该阅读更多关于maven and its dependency management的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-20
      • 2014-02-10
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      • 2015-01-10
      相关资源
      最近更新 更多