如何为groovy-maven-plugin/gmavenplus添加仅用于执行Groovy脚本的依赖?
如何为Groovy Maven插件添加脚本执行依赖(以及仅为脚本引入第三方依赖)
针对你的两个问题,我分两种常用插件来讲解——传统的groovy-maven-plugin和更推荐的继任者gmavenplus-plugin,核心思路都是把脚本专属依赖放在插件内部的依赖配置中,和项目本身的依赖完全隔离。
一、使用groovy-maven-plugin的配置方式
要给插件添加执行Groovy脚本所需的依赖,你不需要把依赖放在项目根目录的<dependencies>里,而是直接在插件的<dependencies>节点下声明。这样这些依赖只会被插件在执行脚本时加载,不会进入项目的依赖树。
举个实际例子:假设你的脚本需要用到Guava库,同时想指定Groovy的版本(避免插件自带版本和你脚本预期的不一致),pom.xml的配置如下:
<build> <plugins> <plugin> <groupId>org.codehaus.gmaven</groupId> <artifactId>groovy-maven-plugin</artifactId> <version>2.1.1</version> <!-- 记得使用最新稳定版本 --> <executions> <execution> <id>run-my-groovy-script</id> <phase>process-resources</phase> <!-- 选择适合的构建阶段,比如资源处理后执行 --> <goals> <goal>execute</goal> </goals> <configuration> <script>src/main/groovy/MyCustomScript.groovy</script> <!-- 你的外部脚本路径 --> </configuration> </execution> </executions> <!-- 这里就是插件专属的依赖区,仅服务于脚本执行 --> <dependencies> <!-- 指定Groovy版本,保证脚本运行环境的一致性 --> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>3.0.17</version> <!-- 替换成你需要的Groovy版本 --> <scope>runtime</scope> </dependency> <!-- 脚本需要的第三方依赖,项目本身不会引入这个依赖 --> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>32.1.3-jre</version> <scope>runtime</scope> </dependency> </dependencies> </plugin> </plugins> </build>
二、使用gmavenplus-plugin(更推荐)
gmavenplus-plugin是groovy-maven-plugin的现代替代,支持更高版本的Groovy,功能也更完善,配置逻辑和前者一致——同样把脚本依赖放在插件内部。
示例配置如下:
<build> <plugins> <plugin> <groupId>org.codehaus.gmavenplus</groupId> <artifactId>gmavenplus-plugin</artifactId> <version>1.13.1</version> <!-- 使用最新稳定版本 --> <executions> <execution> <id>execute-inline-script</id> <phase>compile</phase> <!-- 根据你的需求调整构建阶段 --> <goals> <goal>execute</goal> </goals> <configuration> <!-- 如果你不想用外部脚本,也可以直接内嵌脚本 --> <inlineScript> import com.google.common.collect.ImmutableMap def map = ImmutableMap.of("key1", "value1", "key2", "value2") println "Generated map: ${map}" </inlineScript> <!-- 用外部脚本的话,替换成下面的配置 --> <!-- <scripts> <script>src/main/groovy/MyScript.groovy</script> </scripts> --> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>3.0.17</version> <scope>runtime</scope> </dependency> <!-- 脚本专属的第三方依赖 --> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>32.1.3-jre</version> <scope>runtime</scope> </dependency> </dependencies> </plugin> </plugins> </build>
关键注意点
- 依赖隔离:插件内部的
<dependencies>和项目根的<dependencies>完全独立,这里声明的依赖不会被打包到项目的产物中,也不会影响项目的其他依赖。 - 版本兼容性:确保插件版本和你指定的Groovy版本兼容,比如
gmavenplus-plugin 1.13.1支持Groovy 2.5.x到4.x版本。 - 构建阶段选择:根据你的脚本用途选择合适的Maven构建阶段,比如
process-resources适合在资源处理后执行,compile适合在编译后执行。
内容的提问来源于stack exchange,提问作者Tom Jerry
相关产品推荐
相关产品推荐

