Maven多模块及version修改

Maven多模块及version修改

对于使用maven构建的java项目,通常聚合多个子模块项目。在版本迭代的过程中经常变更版本号,更新parent版本号,发现子模块版本号没有更新,需要一个个的手动去更新,太麻烦,且容易出错。
在版本更新之后,内部模块之间的依赖也需要变更,往往存在遗漏。

MAVEN多个子模块项目

在这里插入图片描述

以上是一个基本的

  • 主项目parent包
    maven-multily-module/pom.xml

    1. 指定整个应用的dependencyManagement
    2. 定义项目的发布的仓库地址distributionManagement
    3. 所有第三方依赖的版本号全部定义在properties下
    4. 所有内部模块依赖版本号统一使用**${project.version}**
    5. 指定所有的子模块modules
  • 项目子模块pom.xml
    app-api/pom.xml;app-dao/pom.xml;util/pom.xml;trade-core/pom.xlm;user-core/pom.xml

    1. 明确定义parent模块的artifactId,groupId,version
    2. 不要定义子模块的version(同parent保持一致)
    3. 子模块无需定义groupId
    4. 子模块所有的依赖包版本全部集成parent模块,即:子模块不得定义依赖包版本号
    5. 子模块需定义是否需要deploy到私服<maven.deploy.skip>true</maven.deploy.skip>
    6. 对于需要depoly的子模块【对外发布的,比如dubbo提供的api包】不应该依赖重量级jar包(比如:spring,mybatis等)
  • 子模块packaging为pom
    app-core/pom.xml

    1. 指定所有的子模块modules
    2. 无需定义groupId
    3. 明确定义parent模块的artifactId,groupId,version

以上定义规则保证了项目内部模块之间的依赖版本统一,第三方依赖包版本不冲突

MAVEN聚合多个子模块项目版本号修改

虽然按照以上的规则定义模块及依赖,但是在版本迭代过程中需要修改对应的版本号,还是需要顶级pom的版本号,及每个子模块内部parent的版本号。

   <parent>
        <groupId>com.maven.multily.module</groupId>
        <artifactId>parent</artifactId>
        <!--版本升级需要修改每个子模块 parent.version的值-->
        <version>1.1.0-SNAPSHOT</version>
    </parent>

这种手工修改方式极容易遗漏,导致项目内部模块版本依赖存在问题。

我们可以通过maven的插件方式来升级整个项目的版本号。方案如下:

  • 在项目顶层pom中添加version插件
 <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>versions-maven-plugin</artifactId>
      <version>2.3</version>
      <configuration>
          <generateBackupPoms>false</generateBackupPoms>
      </configuration>
  </plugin>
  • 在项目根目录下执行以下命令修改版本号
// 设置新的版本号未1.2.0-SNAPSHOT
mvn versions:set -DnewVersion=1.2.0-SNAPSHOT

以上命令会将maven-multily-module/pom.xml版本修改为1.2.0-SNAPSHOT,且会修改所有子模块内 parent的version为1.2.0-SNAPSHOT。所以建议子模块不设置version,自动从parent继承version即可

参考 versions-maven-plugin 命令介绍
项目demo代码maven-multily-mudule

  • 6
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Maven是一个用于构建和管理Java项目的工具,而模块应用是指将一个大型项目拆分成多个模块进行开发和管理的方式。代码混淆是一种通过修改代码结构和变量名等方式来增加代码的复杂性,从而提高代码的安全性和保护知识产权的方法。 在Maven中,可以使用插件来实现代码混淆。常用的插件有ProGuard和Apache Maven Shade Plugin。 1. ProGuard是一个流行的Java代码混淆工具,可以通过删除无用的类、字段和方法,重命名类、字段和方法名称,以及优化字节码等方式来混淆代码。在Maven项目中使用ProGuard可以通过配置插件来实现。你可以在项目的pom.xml文件中添加以下配置: ```xml <build> <plugins> <plugin> <groupId>com.github.wvengen</groupId> <artifactId>proguard-maven-plugin</artifactId> <version>2.3.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>proguard</goal> </goals> </execution> </executions> <configuration> <!-- 配置ProGuard规则 --> <proguardVersion>6.2.2</proguardVersion> <injar>${project.build.finalName}.jar</injar> <outjar>${project.build.finalName}-obfuscated.jar</outjar> <obfuscate>true</obfuscate> <options> <option>-keep public class com.example.MainClass {*;}</option> <!-- 其他ProGuard配置 --> </options> </configuration> </plugin> </plugins> </build> ``` 2. Apache Maven Shade Plugin是另一个常用的Maven插件,它可以将多个模块的代码打包成一个可执行的JAR文件,并且可以对代码进行混淆。你可以在项目的pom.xml文件中添加以下配置: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <!-- 配置混淆规则 --> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>com/example/MainClass.class</exclude> <!-- 其他需要排除的类 --> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin> </plugins> </build> ``` 这样配置后,运行`mvn package`命令即可生成混淆后的JAR文件。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值