如何一次性提取Maven项目依赖的所有Jar包?
嘿,我完全懂你这种手动挨个找Jar包的痛苦——太耗时间了!下面给你几个高效的方案,能一次性把Maven项目的所有依赖Jar包提取出来,直接拿去给非Maven项目用:
方法1:用Maven内置命令一键导出(最推荐)
这是最简单的方式,不用改任何配置,直接在项目根目录(就是有pom.xml的那个文件夹)打开终端,运行下面的命令:
mvn dependency:copy-dependencies -DoutputDirectory=./target/dependency-jars
- 这个命令会自动把项目所有依赖(包括编译、测试、运行时范围的Jar包)复制到
target/dependency-jars目录里 - 如果只想导出编译时需要的依赖(非Maven项目通常只需要这个),可以加个范围过滤参数:
mvn dependency:copy-dependencies -DoutputDirectory=./target/dependency-jars -DincludeScope=compile
运行完之后,去target/dependency-jars里就能看到所有你需要的Jar包了,直接复制走就行。
方法2:用Maven Assembly插件自定义导出(更灵活)
如果你需要更个性化的导出方式(比如把依赖和自己的代码打包在一起,或者只导出特定类型的依赖),可以用Assembly插件:
- 先在项目的
pom.xml里添加插件配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.6.0</version> <executions> <execution> <id>export-dependencies</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <!-- 如果你想导出所有依赖到一个目录,用这个自定义描述器 --> <descriptor>src/main/assembly/dependency-export.xml</descriptor> </configuration> </execution> </executions> </plugin> </plugins> </build>
- 然后在
src/main/assembly目录下创建dependency-export.xml文件(没有这个目录就自己建),内容如下:
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd"> <id>dependency-export</id> <formats> <format>dir</format> <!-- 导出为目录,而不是压缩包 --> </formats> <includeBaseDirectory>false</includeBaseDirectory> <dependencySets> <dependencySet> <outputDirectory>/</outputDirectory> <useProjectArtifact>false</useProjectArtifact> <!-- 不包含自己项目的Jar包 --> <unpack>false</unpack> <scope>compile</scope> <!-- 只导出编译范围的依赖 --> </dependencySet> </dependencySets> </assembly>
- 最后在终端运行:
mvn package
运行完成后,你会在target目录下看到一个以-dependency-export结尾的文件夹,里面就是所有编译依赖的Jar包。
方法3:用脚本批量复制(适合不想碰Maven配置的场景)
如果不想用Maven命令或插件,也可以写个脚本自动从本地仓库复制依赖:
对于Linux/macOS用户
在项目根目录打开终端,依次运行下面的命令:
# 创建存储Jar包的目录 mkdir -p extracted-jars # 导出项目依赖列表 mvn dependency:list -DoutputFile=dependency-list.txt # 解析依赖列表并批量复制Jar包 grep -E '\[INFO\] .*:jar:' dependency-list.txt | awk '{print $4}' | while read dep; do group=$(echo $dep | cut -d: -f1 | tr '.' '/') artifact=$(echo $dep | cut -d: -f2) version=$(echo $dep | cut -d: -f3) cp ~/.m2/repository/$group/$artifact/$version/$artifact-$version.jar ./extracted-jars/ done # 清理临时文件 rm dependency-list.txt
对于Windows用户
打开PowerShell,切换到项目根目录,运行下面的脚本:
# 创建存储Jar包的目录 New-Item -ItemType Directory -Force -Path ./extracted-jars | Out-Null # 导出项目依赖列表 mvn dependency:list -DoutputFile=dependency-list.txt # 解析依赖列表并批量复制Jar包 $deps = Get-Content dependency-list.txt | Select-String -Pattern '\[INFO\] .*:jar:' foreach ($dep in $deps) { $parts = $dep.Line.Split()[3].Split(':') $group = $parts[0].Replace('.', '\') $artifact = $parts[1] $version = $parts[2] $sourcePath = "$env:USERPROFILE\.m2\repository\$group\$artifact\$version\$artifact-$version.jar" Copy-Item -Path $sourcePath -Destination ./extracted-jars/ } # 清理临时文件 Remove-Item dependency-list.txt
运行完之后,extracted-jars目录里就是你要的所有Jar包了。
内容的提问来源于stack exchange,提问作者 Ibrahim EL-Sanosi




