我创建了一个maven基础项目,它有两个模块A
和B
。在A
我添加了B
作为依赖项,并通过B
在Project 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>
答案 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的更多信息。