maven属性与groovy变量对照表
| maven属性 | groovy变量 |
|---|---|
${project.basedir} | project.basedir |
${project.build.directory} | project.build.directory |
${project.artifactId} | project.artifactId |
${project.version} | project.version |
${project.build.outputDirectory} | project.build.outputDirectory |
<properties> | project.properties['property.name'] |
命令行传入-Dxxx=yyy | System.getProperty("xxx") |
${maven.multiModuleProjectDirectory} | System.getProperty("maven.multiModuleProjectDirectory") |
特殊模块执行多脚本
方式1-多Execution机制
隔离性最好,特殊模块追加一个单独的<execution>来运行特定脚本。
根pom的pluginManagement中定义全局默认的execution:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>3.0.2</version>
<executions>
<!-- 全局公共execution -->
<execution>
<id>exec-common-c1</id>
<phase>generate-sources</phase>
<goals><goal>execute</goal></goals>
<configuration>
<scripts>
<script>file:///${maven.multiModuleProjectDirectory}/corp-parent/src/main/scripts/c1.groovy</script>
</scripts>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.groovy</groupId>
<artifactId>groovy</artifactId>
<version>4.0.15</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
</plugins>
</pluginManagement>
</build>
特殊模块,并非覆盖:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<executions>
<!-- 追加仅属于特殊模块的 execution -->
<execution>
<id>exec-parent-c2</id>
<phase>generate-sources</phase>
<goals><goal>execute</goal></goals>
<configuration>
<scripts> <script>file:///${project.basedir}/src/main/scripts/c2.groovy</script>
</scripts>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
方式2-多script标签机制
<scripts>标签支持按顺序罗列多个<script>
<!-- corp-parent-api/pom.xml -->
<build>
<plugins>
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<configuration>
<scripts>
<!-- 1. 先运行公共脚本 c1 -->
<script>file:///${maven.multiModuleProjectDirectory}/corp-parent/src/main/scripts/c1.groovy</script>
<!-- 2. 紧接着运行专有脚本 c2 -->
<script>file:///${project.basedir}/src/main/scripts/c2.groovy</script>
</scripts>
</configuration>
</plugin>
</plugins>
</build>
全局配置仅指定模块生效
方式1-使用gmaven.skip属性开关
<properties>
<!-- 默认全局跳过 Groovy 脚本执行 -->
<gmaven.skip>true</gmaven.skip>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<!-- 绑定跳过开关 -->
<skip>${gmaven.skip}</skip>
</configuration>
<executions>
<execution>
<id>exec-common-c1</id>
<phase>generate-sources</phase>
<goals><goal>execute</goal></goals>
<configuration>
<scripts>
<script>file:///${maven.multiModuleProjectDirectory}/corp-parent/src/main/scripts/c1.groovy</script>
</scripts>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
需要的模块开启:
<!-- corp-diligence-api/pom.xml (其他 api 模块同理) -->
<properties>
<api.pkg>com.corp.diligence.api</api.pkg>
<!-- 仅 API 模块开启插件执行 -->
<gmaven.skip>false</gmaven.skip>
</properties>
方式2-脚本内匹配artifactId
// c1.groovy 头部
// 仅当当前模块的 artifactId 以 "-api" 结尾时才执行
if (!project.artifactId.endsWith("-api")) {
return
}
// ... 下面是正常生成的 c1 逻辑 ...
方式3-抽取独立父POM
将gmavenplus-plugin 声明在专属父POM的 <build><plugins>中。