Intellij - maven模块依赖。 NoClassDefFound错误

时间:2015-08-19 11:34:51

标签: java maven intellij-idea

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

现在我想运行以下代码

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

B:

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" />

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

A是否有任何方式可以识别所有B的依赖关系?

Root 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&#39 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>A</artifactId>


</project>

B&p; 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>

2 个答案:

答案 0 :(得分: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依赖管理彼此无关。

答案 1 :(得分:0)

你没有将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的更多信息。