【问题标题】:Any way to do a selective wildcard exclude in Gradle?有什么方法可以在 Gradle 中进行选择性通配符排除?
【发布时间】:2014-06-05 19:26:56
【问题描述】:

假设我有一个 Java 项目,在 src/main/java 中有一堆源代码,在 src/main/java/myfolder 中有一些进一步的源代码:

src/main/java/myfolder/a.java
src/main/java/myfolder/b.java
src/main/java/myfolder/c.java
...
src/main/java/myfolder/z.java

从这个文件夹中,我只想包含 a.java 和 b.java。有什么简单的方法可以做到这一点?

如果 Gradle 包含/排除直观地工作,我希望这能工作:

sourceSets {
  main {
    java {
      include 'src/main/java/**'
      exclude 'main/java/myfolder/**'
      include 'main/java/myfolder/a.java'
      include 'main/java/myfolder/b.java'
    }
  }
}

但是排除会覆盖后续的包含。

【问题讨论】:

  • 我不认为android插件在'main/java'中搜索如果你删除排除会发生什么?我想只包括 a.java 和 b.java。

标签: gradle build.gradle


【解决方案1】:

您指定的包含和排除顺序不相关。把它们想象成一组过滤器:

  • 不匹配任何包含的文件将被过滤掉
  • 将过滤掉与任何排除项匹配的文件

在你的情况下,我会尝试只使用包含

  • 包含一个.java
  • 包括 b.java
  • 包括所有除了文件在“myfolder”下的文件

为了实现最后一个包含,我会考虑将闭包传递给包含方法而不是匹配模式:http://www.gradle.org/docs/current/javadoc/org/gradle/api/tasks/util/PatternFilterable.html#include(groovy.lang.Closure)

【讨论】:

    猜你喜欢
    • 2022-10-23
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 2011-06-20
    • 2011-04-25
    • 2019-08-22
    相关资源
    最近更新 更多