Maven中如何禁止插件(plugin)在子模块(module)上执行

在多模块工程下,在父工程下执行的插件默认会在其所有的子模块上也执行一遍,大多数情况下这是合理的,比如像compiler这样的插件,但是有时候也种行为可能并不是开发人员所期望的,比如使用exec插件调用一个外部脚本或命令,一般来说开发人员只希望在父工程下maven exec:exec来执行一次该命令即可,但在多模块下,你会发现这个同样的命令被执行了多次,多出来的执行是在每个子模块上执行的,于是我们需要一种方法来禁用插件在子模块上的执行,一般来说两个方法:

一:查阅插件的文档,某些插件会主动提供禁用配置,以exec插件为例,如果子模块想禁用插件可以这样配置:

            <!-- Disable plugin exec running on sub-modules -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>${exec.version}</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>

二:将指定的execution(注意命令行执行的exectuion是default-cli)的phase设置为none,其实这是有点hack的做法,目地是将这个exection绑定到一个不存在的phase上,这样它就永远不会被触发执行了。以jar插件为例:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>${jar.version}</version>
                <executions>
                    <execution>
                        <id>default-jar</id>
                        <phase>none</phase>
                    </execution>
                </executions>
            </plugin>


另外,补充一点:对于你exec这样的插件,虽然插件被禁用了,但是maven的命令行还会输出INFO信息告知某某模块的exec被skip了,这些信息会干扰一个外部脚本或命令执行的输出,所以你可以在maven exec:exec的后面加上-q参数来disable maven的日志信息。

  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Maven模块脚手架搭建的步骤如下: 1. 创建一个 Maven 父级项目作为容器,使用 Maven 命令创建: ```bash mvn archetype:generate -DgroupId=com.example -DartifactId=parent -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false ``` 2. 在父级项目下创建多个子模块,每个子模块负责不同的功能模块,使用 Maven 命令创建: ```bash mvn archetype:generate -DgroupId=com.example -DartifactId=module1 -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false mvn archetype:generate -DgroupId=com.example -DartifactId=module2 -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false ... ``` 3. 在每个子模块的 pom.xml 文件配置依赖和插件,如数据库驱动、Spring 框架等,示例: ```xml <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.2.3.RELEASE</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.18</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.2.2.RELEASE</version> </plugin> </plugins> </build> ``` 4. 在父级项目的 pom.xml 文件使用 <modules> 标签将所有子模块引入,形成一个完整的项目,示例: ```xml <modules> <module>module1</module> <module>module2</module> ... </modules> ``` 5. 使用 Maven 命令进行编译、打包、部署等操作,如 mvn compile、mvn package、mvn deploy 等。 需要注意的是,Maven模块脚手架搭建需要考虑模块之间的依赖关系和代码复用,同时也需要遵循良好的设计原则和规范,以提高项目的可维护性和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

 Laurence

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值