Maven项目打包后如何运行及导出依赖包供无Maven环境使用
问题1:如何通过Maven直接运行项目
你可以直接使用Maven的exec插件完成运行,Maven会自动管理所有依赖的版本和classpath配置,无需你手动指定依赖路径:
- 临时运行无需修改pom.xml,直接执行以下命令即可:
mvn exec:java -Dexec.mainClass="com.mycompany.app.App"
- 如果需要频繁运行,可以在pom.xml的
<build><plugins>节点下添加exec插件的固定配置:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.1.0</version> <configuration> <mainClass>com.mycompany.app.App</mainClass> </configuration> </plugin>
配置完成后,后续只需要执行mvn exec:java就可以直接启动项目。
问题2:如何交付给未安装Maven的用户
有两种常用的实现方案:
方案1:收集所有依赖到独立文件夹
就是你预期的Maven功能,直接使用dependency插件的copy-dependencies目标即可:
执行命令:
mvn dependency:copy-dependencies
执行完成后,所有项目依赖的jar包都会自动导出到target/dependency目录下。你只需要把以下文件打包交给用户:
- 你项目编译生成的jar包(位于target目录下,一般命名为{artifactId}-{version}.jar)
- 整个dependency文件夹
用户只需要本地安装有JRE,执行以下命令即可启动: - Windows系统:
java -cp 你的项目jar包名.jar;dependency/* com.mycompany.app.App
- Linux/macOS系统:
java -cp 你的项目jar包名.jar:dependency/* com.mycompany.app.App
你也可以提前写好对应系统的启动脚本,和文件一起交付,用户直接运行脚本即可。
方案2:打包为可执行Fat Jar
更简单的方式是把所有依赖和你自己的代码打包到同一个可执行jar包中,用户只需要执行java -jar xxx.jar就能启动,不需要额外处理依赖。
可以用maven-assembly-plugin实现,在pom.xml的<build><plugins>节点下添加如下配置:
<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.mycompany.app.App</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
配置完成后执行mvn clean package,会在target目录下生成后缀为jar-with-dependencies的jar包,直接把这个文件交给用户即可。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

