You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何一次性提取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插件:

  1. 先在项目的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>
  1. 然后在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>
  1. 最后在终端运行:
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

火山引擎 最新活动