Idea下将Maven项目打成公共依赖jar包

一、场景:

开发中常常遇到多个项目共同依赖某些公共项目的情况

  1. 比如:“二维码生成-解析包”就同时被内网端和外网端依赖使用;
  2. 再比如:基于Dubbo-RPC的微服务系统,生产者和消费者往往依赖同一批service接口,此时最佳实践就是将这批接口独立成maven模块,打包成sdk包;
  3. 还比如:自定义的Spring-boot-starter;
    共享依赖包可以有效的复用代码,同时也提高了可维护性。

二、打包方式

  1. 关键点在共享依赖包的pom.xml配置文件的两项;
  2. 快速构建一个空的Spring-boot项目,如果此独立jar包不需要,不勾选任何功能组件,目录结构如下:
├─.mvn
│  └─wrapper
└─src
    ├─main
    │  ├─java
    │  │  └─com
    │  │      └─yang
    │  │          └─sdk
    │  └─resources
    └─test
        └─java
            └─com
                └─yang
                    └─sdk

删掉test、resources目录和MainClass;添加service目录已存放共享源码,此时目录结构如下:

├─.mvn
│  └─wrapper
└─src
    └─main
        └─java
            └─com
                └─yang
                    └─sdk
                        └─service
  1. 修改pom.xml
    关键点在packaging节点声明本模块达成jar包,build节点声明打包的源码位置
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.yang</groupId>
    <artifactId>sdk</artifactId>
    <version>1.0</version>

    <packaging>jar</packaging>

    <name>sdk</name>
    <description>Demo project for sharing-jar</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <!--
    <dependencies>
        若有需要可以添加依赖
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-core</artifactId>
            <version>7.7.2</version>
        </dependency>
    </dependencies>
    -->

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.*</include>
                </includes>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>
</project>
  1. 上层模块可以使用GAV坐标,对共享模块进行依赖,打包父pom即可自动将共享包打入上层模块中,形成完整的fat-jar。
    若上层模块和共享模块不在同一个父pom下,通过maven-install将共享模块的jar安装到本地maven-repo和nexus中即可。
posted @ 2020-08-24 23:55  JaxYoun  阅读(3166)  评论(0编辑  收藏  举报