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

可以看到正常运行

相关推荐
PetterHillWater14 分钟前
基于AI互联网系统架构分析与评估
后端·aigc
MaxHua34 分钟前
多数据源与分库分表方案设计
后端·面试
季风113237 分钟前
17.Axon框架-消息
后端·领域驱动设计
苏三说技术43 分钟前
Token续期的5种方案
后端
小森林81 小时前
分享一次Guzzlehttp上传批量图片优化的经历
后端·php
码事漫谈1 小时前
一文彻底搞懂缓存:从菜鸟到专家的完全指南
后端
华仔啊1 小时前
final在Java中到底有啥用?5个实际场景告诉你
java·后端
码事漫谈1 小时前
一文读懂:跨服务调用,用HTTP还是RPC?
后端
似水流年流不尽思念1 小时前
Redis 分布式锁和 Zookeeper 进行比对的优缺点?
redis·后端
郭京京1 小时前
go操作redis
redis·后端·go