最近由于项目需要在构建一个公用的Jar
包,在3各项目间进行调用.使用中发现依赖版本存在一些问题,同时在Jar
包的发布时需要手动上传到私有仓库,有点小麻烦.
寻找之前用过的flatten
插件,对现有的项目进行配置后,发现很好用,这里记录一下使用过程中遇到的一些问题,希望能帮助一些有同样困惑的童鞋.
官方介绍
个人理解,能一下把整个项目的版本同时修改.
项目目录
使用的父子项目log模块依赖于common模块,log模块使用了common模块的几个常量.
主pom内容
版本约束
全局使用<revision>1.0.0</revision>
进行版本的控制,修改项目的整体版本,仅需要修改这里即可
<dependencyManagement></dependencyManagement>
标签内是对项目整体公共依赖的版本约束,后面项目需要对应依赖时,不需要写版本号即可使用对应依赖,做到了全局依赖的统一.
私有仓库
由于是在内部使用,因此Jar
包需要在私有仓库中<distributionManagement></distributionManagement>
配置有私有仓库的地址,后面打包后,可直接使用deploy
上传到私有仓库.
注意: maven配置文件 settings
设置server的密码(我的私有仓库设置有密码,因此这里配置了用户名和密码).
<servers>
<server>
<id>liu-releases</id>
<username>admin</username>
<password>abcd@123</password>
</server>
<server>
<id>liu-snapshot</id>
<username>admin</username>
<password>abcd@123</password>
</server>
</servers>
打包Source
刚开始打包后,有同事反应看不到源码里面的注释,因此加入了源码注释的Jar
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.3.0</version>
<!-- 绑定source插件到Maven的生命周期,并在生命周期后执行绑定的source的goal -->
<executions>
<execution>
<!-- 绑定source插件到Maven的生命周期 -->
<phase>compile</phase>
<!--在生命周期后执行绑定的source插件的goals -->
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
解决打包后POM文件异常问题
最开始打包文件后,发现下载的Jar
包里面的POM里面的依赖都是这种${hutool-5.version}
变量,使用以下配置后,生成Jar
包的POM文件内容正常了.
<configuration>
<!-- 避免IDE将 .flattened-pom.xml 自动识别为功能模块 -->
<flattenedPomFilename>pom-xml-flattened</flattenedPomFilename>
<updatePomFile>true</updatePomFile>
<flattenMode>resolveCiFriendliesOnly</flattenMode>
</configuration>
POM文件汇总
pom内容做了一定的注释,上面有了详细说明,这里只是一个汇总文件
<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.liu.demo</groupId>
<artifactId>flatten-demo</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<name>flatten-demo</name>
<url>http://maven.apache.org</url>
<modules>
<module>flatten-demo-common</module>
<module>flatten-demo-log</module>
</modules>
<properties>
<!-- 整体项目版本 -->
<revision>1.0.0</revision>
<!-- 基础信息 -->
<java.version>17</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<hutool-5.version>5.8.32</hutool-5.version>
<!--跳过单元测试-->
<skipTests>true</skipTests>
</properties>
<dependencyManagement>
<dependencies>
<!-- 内部依赖管理 -->
<dependency>
<groupId>com.liu.demo</groupId>
<artifactId>flatten-demo-common</artifactId>
<version>${revision}</version>
</dependency>
<!-- 外部依赖管理 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool-5.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 私有MAVEN仓库 打包上传到该目录 本地maven配置文件配置有密码-->
<distributionManagement>
<repository>
<id>liu-releases</id>
<name>java-release</name>
<url>http://192.168.11.250/repository/java-release/</url>
</repository>
<snapshotRepository>
<id>liu-snapshot</id>
<name>java-snapshot</name>
<url>http://192.168.11.250/repository/java-snapshot/</url>
</snapshotRepository>
</distributionManagement>
<build>
<plugins>
<!-- 打包插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.9.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
<!-- 打包跳过测试 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.5</version>
<configuration>
<skipTests>${skipTests}</skipTests>
</configuration>
</plugin>
<!-- 打包source.jar -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.3.0</version>
<!-- 绑定source插件到Maven的生命周期,并在生命周期后执行绑定的source的goal -->
<executions>
<execution>
<!-- 绑定source插件到Maven的生命周期 -->
<phase>compile</phase>
<!--在生命周期后执行绑定的source插件的goals -->
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- revision控制 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>1.6.0</version>
<configuration>
<!-- 避免IDE将 .flattened-pom.xml 自动识别为功能模块 -->
<flattenedPomFilename>pom-xml-flattened</flattenedPomFilename>
<updatePomFile>true</updatePomFile>
<flattenMode>resolveCiFriendliesOnly</flattenMode>
</configuration>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
打包上传仓库
使用
IDEA
的Maven
插件里面的deploy
直接把打包好的Jar
包长传到私有仓库
仓库验证
评论区