使用maven可以快速地构建Java项目,运行Java Main也是其中的一项基础操作。本文将介绍基于maven运行Java Main的三种方法:使用exec-maven-plugin、使用maven-shade-plugin、使用maven-assembly-plugin。下面我们逐一分析这三种方法:
使用exec-maven-plugin
exec-maven-plugin可以用于在maven构建期间执行任意外部进程,例如运行Java Main。在pom.xml中添加以下插件配置:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>my-execution</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<mainClass>com.example.Main</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
上述配置告诉maven在package阶段,运行Main类中的main方法。需要注意的是,如果main方法需要传递参数,可以通过使用<arguments>
标签传递参数。
执行mvn package
命令后,可以在target目录下找到打包生成的jar文件。通过执行以下命令,即可在终端中运行Main类的main方法:
java -jar target/my-app.jar
实际使用过程中,可能需要运行多个Main类的main方法,可以对上述插件配置进行扩展,添加多个execution。
使用maven-shade-plugin
maven-shade-plugin用于打包包含所有依赖的可执行jar包。在pom.xml中添加以下插件配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.Main</mainClass>
</transformer>
</transformers>
<finalName>my-app</finalName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
上述配置告诉maven在package阶段,用maven-shade-plugin打包,生成可执行jar包。其中,使用<transformers>
标签指定如何转换源jar包。在这个例子中,我们使用ManifestResourceTransformer
转换生成的jar包MANIFEST.MF文件中的mainClass属性,指向Main类。打包生成的jar包文件可以在target目录下找到。
执行以下命令,即可在终端中运行Main类的main方法:
java -jar target/my-app.jar
使用maven-assembly-plugin
maven-assembly-plugin用于将项目打包成一组独立的文件。在pom.xml中添加以下插件配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<mainClass>com.example.Main</mainClass>
</manifest>
</archive>
<finalName>my-app</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
上述配置告诉maven在package阶段,生成包含所有依赖的可执行jar包(含有mainClass属性的MANIFEST.MF),并将该jar包与生成的依赖文件打包成一个zip文件。可以在target目录下找到打包生成的zip文件。
执行以下命令,在终端中运行Main类的main方法:
unzip target/my-app.zip
java -cp my-app.jar com.example.Main
或者可以直接使用以下命令来运行打包生成的可执行jar包:
java -jar target/my-app-jar-with-dependencies.jar
这是一个包含所有依赖的可执行jar包,可以在任意机器运行(有Java环境的情况下)。
有关这三种方法的示例可以从以下github仓库中下载:
https://github.com/ZhouYixuanJava/java-exec-demo
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用maven运行Java Main的三种方法解析 - Python技术站