这看起来应该很简单,但我还没有弄明白,并且没有从阅读文档和搜索Web获得太多帮助。为了学习将Maven(2.2.1)用于多模块项目,我使用Maven创建了一个带有C类(包含main)和S类的简单项目P.当我运行mvn install
时,构建运行并生成建立成功的消息。但是,当我运行生成的C jar时,我得到一个异常:“线程异常”main“java.lang.NoClassDefFoundError:P/S”如何告诉Maven构建一个可执行的jar文件
目录结构(不显示src等子目录)是:
P
| --C
| --S
在目录中的pom.xml的P目前是:
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>P</groupId>
<artifactId>P</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<name>P</name>
<url>http://maven.apache.org</url>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>P</groupId>
<artifactId>C</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>P</groupId>
<artifactId>S</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>P.C</mainClass>
<packageName>P.C</packageName>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<modules>
<module>C</module>
<module>S</module>
</modules>
</project>
C语言中的pom.xml的是:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>P</artifactId>
<groupId>P</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>P</groupId>
<artifactId>C</artifactId>
<version>1.0-SNAPSHOT</version>
<name>C</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>P</groupId>
<artifactId>S</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
和S中的pom.xml的是:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>P</artifactId>
<groupId>P</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>P</groupId>
<artifactId>S</artifactId>
<version>1.0-SNAPSHOT</version>
<name>S</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
以上都是多次尝试后的最新版本。
对于这个简单的学习工作中,Java类是:
P/C/src目录/主/ JAVA/P/C.java:
package P;
public class C
{
public static void main(String[] args)
{
System.out.println("Hello World!");
S o = new S();
o.sayHey();
}
}
和S/src目录/主/ JAVA /P/S.java:
package P;
public class S
{
public void sayHey()
{
System.out.println("Hey!");
}
}
那么,我该如何告诉Maven在C jar中包含S类呢?
工作得很好,谢谢。不过,我不必添加元素... –