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

Maven相关技术问询:执行mvn clean install时导出依赖到文件,及在plugin.yml中生成依赖列表并过滤特定依赖

Maven相关技术问询:执行mvn clean install时导出依赖到文件,及在plugin.yml中生成依赖列表并过滤特定依赖

嗨,这个需求我之前帮同事处理过,其实用Groovy脚本配合Maven插件就能很灵活地实现,既能生成你要的groupId:artifactId:version格式的依赖列表,还能轻松过滤掉不需要的依赖,具体步骤我给你拆解下:

一、在pom.xml中添加Groovy插件生成依赖属性

我们可以用groovy-maven-plugin在Maven处理资源文件之前,先遍历项目依赖、过滤掉不需要的项,然后把符合要求的依赖列表转成Maven属性,这样后面资源过滤的时候就能直接引用了。

在你的pom.xml的<build><plugins>节点下添加如下配置:

<plugin>
  <groupId>org.codehaus.gmaven</groupId>
  <artifactId>groovy-maven-plugin</artifactId>
  <version>2.1.1</version>
  <executions>
    <execution>
      <id>generate-dependency-list</id>
      <!-- 选generate-resources阶段,确保在资源过滤前执行 -->
      <phase>generate-resources</phase>
      <goals>
        <goal>execute</goal>
      </goals>
      <configuration>
        <source>
          // 定义要排除的特定依赖,格式为「groupId:artifactId」
          def excludedDeps = [
            "javax.annotation:javax.annotation-api",
            "some.group:excluded-artifact"
          ]
          // 遍历项目依赖,过滤出符合要求的项
          def libraries = project.dependencies.findAll { dep ->
            // 这里可以自定义过滤规则:
            // 1. 排除scope为provided的依赖
            // 2. 排除在excludedDeps列表中的特定依赖
            dep.scope != "provided" && !excludedDeps.contains("${dep.groupId}:${dep.artifactId}")
          }.collect { dep ->
            // 转成你要的「groupId:artifactId:version」格式
            "${dep.groupId}:${dep.artifactId}:${dep.version}"
          }.join(", ")
          // 把结果设置为Maven属性,名字叫project.libraries
          project.properties.setProperty("project.libraries", libraries)
        </source>
      </configuration>
    </execution>
  </executions>
</plugin>

过滤规则的灵活调整

你可以根据自己的需求修改findAll里的判断条件:

  • 如果要排除test scope的依赖,就加&& dep.scope != "test"
  • 如果要排除某个groupId下的所有依赖,改成&& !dep.groupId.equals("javax.annotation")
  • 如果要排除optional依赖,加&& !dep.optional

二、在plugin.yml中引用生成的依赖属性

在你的src/main/resources/plugin.yml里,直接用Maven占位符引用刚才生成的属性:

libraries: [${project.libraries}]

别忘了你已经配置的资源过滤要保留,确保Maven会替换这个占位符:

<resources>
  <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
  </resource>
</resources>

三、验证效果与导出依赖到文件

执行mvn clean process-resources命令,然后去target/classes目录下查看生成的plugin.yml,你会看到libraries已经变成了符合要求的依赖列表,而且不需要的依赖已经被过滤掉了。

如果要把依赖同时导出到单独的文件,你可以在Groovy脚本里加几行代码,把列表写入到文件里,比如:

// 在生成libraries之后添加
new File(project.build.directory, "dependency-list.txt").text = libraries

这样执行命令后,target/dependency-list.txt里就会有同样的依赖列表了。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 11:48:12