侧边栏壁纸
博主头像
小小猫儿鱼的菜园

夜晚,影子也离我而去

  • 累计撰写 5 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Maven 版本管理插件 flatten-maven-plugin

小小猫儿鱼
2025-01-06 / 0 评论 / 0 点赞 / 7 阅读 / 0 字 / 正在检测是否收录...

最近由于项目需要在构建一个公用的Jar包,在3各项目间进行调用.使用中发现依赖版本存在一些问题,同时在Jar包的发布时需要手动上传到私有仓库,有点小麻烦.

寻找之前用过的flatten插件,对现有的项目进行配置后,发现很好用,这里记录一下使用过程中遇到的一些问题,希望能帮助一些有同样困惑的童鞋.

官方介绍

Maven Flatten Plugin

个人理解,能一下把整个项目的版本同时修改.

项目目录

使用的父子项目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>

打包上传仓库

  1. 使用IDEAMaven插件里面的deploy直接把打包好的Jar包长传到私有仓库

  1. 仓库验证

代码附件

flatten-demo.7z

0

评论区