Idea Maven项目打包工其他项目进行外部引用

2023-11-07

1、说明

我们在日常项目开发中经常会有许多公共的模块,如统一的父工程、工具类模块、中间实体类(DTO, VO),如果我们针对每个子项目都单独的创建一套工具类,多个子项目会存在很多重复的工具类、中间实体类代码。因此,我们可以将这些公共模块统一打成jar包,在各子项目中引入depency依赖即可。

2、将父工程打包成jar包

创建一个maven工程,统一管理各种外部jar 包依赖版本,如Spring Boot,maven plugins,mybatis,lombok等。

2.1、pom.xml

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
    </parent>
    <packaging>pom</packaging>
    <modules>
        <module>cloud-common</module>
    </modules>
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.latiny</groupId>
    <artifactId>cloud-parent</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF‐8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF‐8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <mybatis.version>1.3.5</mybatis.version>
        <lombok.version>1.18.12</lombok.version>
        <swagger.version>2.7.0</swagger.version>
        <spring.cloud.version>Hoxton.SR6</spring.cloud.version>
        <mysql.version>5.1.47</mysql.version>
        <fastjson.version>1.2.47</fastjson.version>
        <jwt.version>1.0.10.RELEASE</jwt.version>
        <servlet.version>3.1.0</servlet.version>
        <mybatis.version>1.3.5</mybatis.version>
        <oauth2.version>2.2.5.RELEASE</oauth2.version>
    </properties>

    <!--全局依赖版本,不会引入具体的包,后期只需引入坐标,不用再指定版本了-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <!-- Java编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

PS:一定要指定Java编译插件版本与encoding(UTF-8),否则打包时会报错。

2.2、工程目录

 创建maven工程后,作为父工程,只用配置管理pom.xml文件,src文件删掉。

2.3、打包编译

打包编译时,可以设置跳过test步骤,先clean,再package或者install。

package:打包成jar包,在工程目录下的target中会出现对应的jar包;

install:安装jar包到本地的仓库中,该仓库是idea maven配置中的仓库路径;

2.4、父工程打包结果

 这里面没有jar包,只有pom结尾的文件,因为父工程没有具体的代码。但是一旦打包成功,可以在其他项目引用该父工程的引用,PS:必须与父工程公用一个本地仓库。

添加父工程引用即可:

 <parent>
        <artifactId>cloud-parent</artifactId>
        <groupId>cn.latiny</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

3、公共模块打包-子工程

3.1、在父工程下创建子工程cloud-common

pom.xml

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud-parent</artifactId>
        <groupId>cn.latiny</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-common</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons</artifactId>
        </dependency>
    </dependencies>

</project>

此处以父工程的坐标作为common模块的parent,这里需要注意:

  • 如果在同一个工程目录下,父工程不需要install就可以引用;
  • 如果不在同一个工程目录下,需要先对父工程进行install才可以引用;

cloud-common工程结构

3.2、安装

先clean,后install,在maven配置的本地仓库路径下可以看到已安装好的jar包:

 4、外部项目引用

在任何其他项目想要使用cloud-common的公共工具类,只需要在起pom.xml添加依赖即可:

 <dependency>
            <groupId>cn.latiny</groupId>
            <artifactId>cloud-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

PS:该项目必须与cloud-common使用同一个本地maven仓库;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Idea Maven项目打包工其他项目进行外部引用 的相关文章

随机推荐

  • Cygwin环境变量设置(转载)

    开始运行bash之前 应该设置一些环境变量 cygwin提供了一个 bat文件 里面已经设置好了最重要的环境变量 通过它来启动bash是最安全的办法 这个 bat文件安装在cygwin所在的根目录下 可以随意编辑该文件 1 CYGWIN变量
  • java+selenium+new——杀掉windows的浏览器进程

    package rjcs import java util List import org openqa selenium os WindowsUtils import org openqa selenium By import org o
  • Shell脚本入门 01:格式与基础使用

    文章目录 目的 脚本格式 脚本使用 exit 命令 read 命令 组命令 总结 目的 通常在终端中操作Linux都是一行一行输入命令进行的 每输入一行执行后根据结果再输入下一条命令 这种操作在简单使用或是在单次使用中没什么问题 但是如果需
  • C语言赋值被截断,c语言中赋值截断

    在c语言中进行变量赋值的时候 如果将字节多的数据类型赋给一个占字节少的变量类型 会发生 截断 发生这种情况的原因是 在赋值过程中只将占字节较长的变量的地位赋给占字节较少的变量 如 int i 345 char c i c i 在进行c i赋
  • 区块链全节点与区块链轻节点的区别

    随着技术的发展更新 区块链上的交易也将日益增多 这也间接造成了区块链开发的数据容量越来越大 因为区块链的冗余备份 要求所有节点都需保存全量的数据文件 在这个节点间 假设有用户用自己创建一个区块链节点来进行DApp的开发 可又不想参与共识 那
  • 多智能体强化学习与博弈论-博弈论基础4

    多智能体强化学习与博弈论 博弈论基础4 本篇文章主要讲的是贝叶斯博弈 Bayesian Games 也称作不完全信息博弈 和拍卖理论 不完全信息博弈在我们生活中经常出现 比如拍卖 在市场和别人讨价还价等等 贝叶斯博弈 首先举一个贝叶斯博弈的
  • Spring声明式事务@Transactional传播行为

    在 Transactional注解中 可以propagation属性用来配置事务传播 支持7种不同的传播机制 REQUIRED 业务方法需要在一个事务中运行 如果方法运行时 已处在一个事务中 那么就加入该事务 否则自己创建一个新的事务 这是
  • js键盘移动事件

    keyboard box move
  • 第十三届蓝桥杯省赛Java A 组 F 题、Python A 组 G 题、Python B 组 G题——全排列的价值 (AC)

    目录 1 全排列的价值 1 题目描述 2 输入格式 3 输出格式 4 样例输入1 5 样例输出2 6 样例输出1 7 样例输出2 8 样例解释 9 原题链接 2 解题思路 3 Ac code 1 全排列的价值 1 题目描述 对于一个排列 A
  • GitHub Desktop官方下载链接

    Github Desktop官方下载 点击直达 https desktop github com
  • 云服务器vCPU与物理CPU关系

    CPU个数 看得见摸得找的CPU个数 插在主版上面的 在linux系统下面的 proc cpuinfo文件的条目中 有多少个不同的physical id就有多少个物理CPU CPU物理核 一个CPU可能有多个核 在linux系统下面的 pr
  • Android应用程序资源的查找过程分析

    我们知道 在Android系统中 每一个应用程序一般都会配置很多资源 用来适配不同密度 大小和方向的屏幕 以及适配不同的国家 地区和语言等等 这些资源是在应用程序运行时自动根据设备的当前配置信息进行适配的 这也就是说 给定一个相同的资源ID
  • 京东面试:如何实现分布式锁?

    案例背景 分布式锁是解决协调分布式系统之间 同步访问共享资源的一种方式 详细来讲 在分布式环境下 多个系统在同时操作共享资源 如写数据 时 发起操作的系统通常会通过一种方式去协调其他系统 然后获取访问权限 得到访问权限后才可以写入数据 其他
  • Python使用win32com.client()和load_workbook()追加写入excle

    win32com client 和load workbook 均可以实现在原有excle文件中写入内容 在实际使用中win32com client 使用的方法类似VBA来模拟用户进行操作 运行速度不如load workbook 1 win3
  • 数字锁相环——环路滤波器参数设计

    太难了 好像懂了 又好像没懂 梳理一下 模拟环路滤波器分别有RC积分滤波器 无源比例积分滤波器 有源比例积分滤波器 上图为有源比例积分滤波器 固有频率 n omega n n 和阻尼系数
  • An Introduction to GCC

    对于GCC特别的不熟练 只会google baidu来使用 最近想看看到底gcc如何使用 于是找到了这本书 写的很浅显易懂 而且框架写明白了 真的不错 1 gcc c 是编译的命令 编译与链接是不同的 gcc 不加任何选项时就是编译 链接了
  • VirtualBox安装Ubuntu教程(超详细)

    下载ubuntu系统镜像 准备虚拟机挂载镜像用 选择新建 创建虚拟机 选择系统版本 因为要安装ubuntu 所以选择ubuntu 设置虚拟机ubuntu的内存 创建虚拟机的磁盘 分配20G空间 动态分配是逐渐占用物理机硬盘空间
  • 软件外包公司到底干啥的?要不要去外包公司?

    一 什么是外包 软件外包分为 人力外包和项目外包两个方向 1 劳务派遣 指的是把员工外派到对应的用工企业打 短工 比如很多工程师虽然签约了中软国际 东软 文思海辉 软通动力 润和等软件公司 但实际工作地点是在华为 接受华为员相关负责人的工作
  • Spring系列之缓存使用(@EnableCaching、@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig)

    本文主要详解spring中缓存的使用 背景 缓存大家都有了解过吧 主要用来提升系统查询速度 比如电商中商品详情信息 这些信息通常不会经常变动但是会高频访问 我们可以将这些信息从db中拿出来放在缓存中 比如redis中 本地内存中 当获取的时
  • Idea Maven项目打包工其他项目进行外部引用

    1 说明 我们在日常项目开发中经常会有许多公共的模块 如统一的父工程 工具类模块 中间实体类 DTO VO 如果我们针对每个子项目都单独的创建一套工具类 多个子项目会存在很多重复的工具类 中间实体类代码 因此 我们可以将这些公共模块统一打成