Maven 项目打包:实现业务代码与第三方依赖分离

Maven 项目打包:实现业务代码与第三方依赖分离

在实际项目部署中,我们有时不希望将所有代码打成一个 fat jar(大包) ,而是希望实现如下目标:

  • 自己的业务代码 :打包成一个干净的 xxx.jar(仅包含 .class、资源等,不含依赖)。
  • 第三方依赖库 :打包输出到 lib/ 子目录中,便于管理、替换、升级。

这种方式类似于 Java 应用的模块化部署结构,类似早期的 .jar + lib/ 结构,适合:

  • 多环境部署(测试 / 生产)
  • 依赖版本替换

我创建一个新的maven项目做演示

自己写了一个类Main

如下

Gson这个是第三方引入的库

引入依赖

即可运行

将自己写的代码 打包到module-admin.jar中,而第三方依赖库打包到module-admin.jar 文件的子目录 lib 下,配置

重点

xml 复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
​
    <groupId>com.anfioo</groupId>
    <artifactId>module-admin</artifactId>
    <version>1.0.0</version>
​
    <build>
        <finalName>module-admin</finalName>
        <plugins>
            <!-- 让 JAR 知道主类是哪个 -->
            <plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.anfioo.Main</mainClass>
                        </manifest>
                    </archive>
                    <outputDirectory>${project.build.directory}/output</outputDirectory>
                </configuration>
            </plugin>
​
​
            <!--            配置了maven坐标,会把依赖放入project.build.directory的output/lib下-->
​
            <!-- 拷贝依赖到 lib 目录 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.1.2</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/output/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
​
​
        </plugins>
    </build>
​
​
    <dependencies>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.10.1</version>
        </dependency>
    </dependencies>
</project>
​

这个时候运行命令

mvn clean package

可以看到

输出中多了

module-admin.jar,lib

在目标文件夹中运行

bash 复制代码
java -cp "module-admin.jar;lib/*" com.anfioo.Main

可以看到正常运行

相关推荐
舒一笑20 分钟前
PandaCoder 1.1.8 发布:中文开发者的智能编码助手全面升级
java·后端·intellij idea
少妇的美梦26 分钟前
Spring Boot搭建MCP-SERVER,实现Cherry StudioMCP调用
后端·mcp
SimonKing26 分钟前
跨域,总在发OPTIONS请求?这次终于搞懂CORS预检了
java·后端·程序员
这里有鱼汤35 分钟前
如何用Python找到股票的支撑位和压力位?——均线簇
后端·python
考虑考虑1 小时前
dubbo3超时时间延长
java·后端·dubbo
刘立军1 小时前
本地大模型编程实战(36)使用知识图谱增强RAG(2)生成知识图谱
后端·架构
yk100101 小时前
Spring DefaultSingletonBeanRegistry
java·后端·spring
databook1 小时前
Manim实现涟漪扩散特效
后端·python·动效
间彧2 小时前
死锁(Deadlock)深入解析
后端
小信丶2 小时前
Spring Boot请求体缺失异常分析与解决方案
java·spring boot·后端