Maven打包Jar缺失依赖问题及带依赖运行方案咨询
解决Maven打包Jar不含依赖的运行问题
下面提供几种实用方案,按需选择:
方案一:用Maven Assembly插件打包带依赖的可执行Jar
这是最直接的方式,会把所有依赖打包进同一个Jar里:
- 在项目的
pom.xml中添加以下插件配置,记得替换<mainClass>里的内容为你的主类全路径(比如com.example.App):
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.6.0</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>你的主类全路径</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
- 执行打包命令:
mvn clean package - 运行生成的Jar(文件名会带
-jar-with-dependencies后缀):
java -jar target/slab-1.0-SNAPSHOT-jar-with-dependencies.jar
方案二:用Maven Shade插件构建Fat Jar
Shade插件比Assembly更灵活,能处理依赖冲突、重命名类等场景:
- 在
pom.xml中添加Shade插件配置,同样替换主类路径:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.5.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>你的主类全路径</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
- 执行打包:
mvn clean package - 直接运行原文件名的Jar即可(此时它已经包含所有依赖):
java -jar target/slab-1.0-SNAPSHOT.jar
方案三:手动指定依赖到Classpath运行
如果不想打包依赖,可手动把所有依赖Jar加入Classpath:
- 先把项目依赖复制到本地目录,执行:
mvn dependency:copy-dependencies -DoutputDirectory=target/dependency
- 运行时把主Jar和所有依赖Jar都加入Classpath:
# Linux/Mac系统 java -cp "target/slab-1.0-SNAPSHOT.jar:target/dependency/*" App # Windows系统,把冒号换成分号 java -cp "target/slab-1.0-SNAPSHOT.jar;target/dependency/*" App
方案四:Spring Boot项目用官方插件打包
如果你的项目是Spring Boot项目,直接用Spring Boot Maven插件打包最省心:
- 在
pom.xml中添加插件:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
- 打包后直接运行:
java -jar target/slab-1.0-SNAPSHOT.jar
内容的提问来源于stack exchange,提问作者Jordi
相关产品推荐
相关产品推荐

