You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

问题:Lib目录未加入最终项目Jar包,Maven依赖插件配置无效

解决Maven打包时Lib目录未加入Jar包的问题

我来帮你一步步排查和解决这个问题~你配置的maven-dependency-plugin是用来把依赖复制到target/classes/lib,但最终Jar里没包含这个目录,大概率是两个环节出了问题:要么依赖没成功复制到指定目录,要么打包插件没把这个目录包含进去。

第一步:验证依赖是否成功复制到目标目录

先运行mvn clean prepare-package命令,然后去项目的target/classes/lib目录看看:

  • 如果这个目录是空的或者不存在,说明maven-dependency-plugin没正常执行,检查以下几点:
    • 插件的groupId和artifactId是否正确(你写的配置没问题,但可以确认下有没有拼写错误)
    • 执行阶段prepare-package是否正确,这个阶段确实在package之前执行,也可以尝试换成compile阶段试试
    • 有没有其他插件的execution和这个插件的id(copy-dependencies)冲突?可以改个唯一的id试试

第二步:如果依赖已复制,确保打包插件包含Lib目录

如果target/classes/lib已经有依赖Jar,但最终Jar里没有,那需要检查打包插件的配置:

情况1:使用默认的maven-jar-plugin

默认情况下,maven-jar-plugin会把target/classes下的所有内容打包到Jar里,但如果你的项目有自定义的includes/excludes配置,可能把lib目录排除了。可以显式添加包含规则:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.3.0</version>
    <configuration>
        <includes>
            <include>**/*.class</include>
            <include>lib/**/*</include>
        </includes>
    </configuration>
</plugin>

情况2:使用maven-assembly-plugin构建可执行Jar

如果你是要打包包含依赖的可执行Jar,更推荐用maven-assembly-plugin,它可以更灵活地控制打包内容,同时配置类路径指向lib目录:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.6.0</version>
    <executions>
        <execution>
            <id>package-with-deps</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
            <configuration>
                <archive>
                    <manifest>
                        <!-- 替换成你的主类全路径 -->
                        <mainClass>com.yourcompany.YourMainClass</mainClass>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <includes>
                    <include>**/lib/**</include>
                </includes>
            </configuration>
        </execution>
    </executions>
</plugin>

情况3:使用maven-shade-plugin

如果用的是shade插件打包,需要配置显式包含lib目录:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.4.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <includes>
                    <include>lib/**/*</include>
                </includes>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.yourcompany.YourMainClass</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

最后验证

运行mvn clean package,然后解压生成的Jar包,看看根目录下是否有lib目录,里面有没有依赖Jar。如果还是不行,可以检查项目的.gitignore或者其他maven配置文件有没有排除lib目录的规则哦~

内容的提问来源于stack exchange,提问作者Ashwani Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 17:02:36