這看起來應該很簡單,但我還沒有弄明白,並且沒有從閱讀文檔和搜索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類呢?
工作得很好,謝謝。不過,我不必添加元素... –