You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:51:09