我是初学者,不懂很多东西.我可以构建简单的可执行jar,但是如何将multimodule maven项目构建成可执行的jar对我而言是魔术.所以我有三个项目.
家长:
家长:
<?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>org.example</groupId> <artifactId>Test</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>Main</module> <module>Dep</module> </modules> </project>
和两个孩子项目:
<?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>Test</artifactId> <groupId>org.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>Main</artifactId> <dependencies> <dependency> <groupId>org.example</groupId> <artifactId>Dep</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </project>
和:
<?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>Test</artifactId> <groupId>org.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>Dep</artifactId> </project>
主模块主要有main方法(lol)
public class Main { public static void main(String[] args) { Hello hello = new Hello(); System.out.println(hello.sayHello()); } }
“类别”在“Dep”模块中定义.我应该添加到我的poms来构建可执行jar与Main类从主模块作为入口点?
解决方法
你需要改变你的pom为人造物主.
您需要添加maven-assembly-plugin
您需要添加maven-assembly-plugin
在配置中,您可以选择在清单中指定mainClass.这应该是Main类的完全限定名称.
<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> <parent> <groupId>org.example</groupId> <artifactId>Test</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>Main</artifactId> <properties> <!-- plugins --> <maven.assembly.plugin.version>2.4</maven.assembly.plugin.version> <!-- dependencies --> <dep.version>1.0-SNAPSHOT</dep.version> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> </plugin> </plugins> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.4</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>Main</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </pluginManagement> </build> <dependencies> <dependency> <groupId>org.example</groupId> <artifactId>Dep</artifactId> <version>${dep.version}</version> </dependency> </dependencies> </project>
在父项目上启动构建之后,应该在模块Main的目标子文件夹中创建可执行jar. (一个名为Main-1.0-SNAPSHOT-jar-with-dependencies.jar的jar是我得到的)