20

我们有一个与已删除的某些要求相关的包,但我们不想删除代码,因为将来可能会再次需要它。因此,在我们现有的 ant 构建中,我们刚刚将这个包排除在我们的 jar 中编译。由于我们还删除了它们的依赖项,因此这些类无法编译,因此它们不能包含在构建中。

我试图在 Gradle 中模仿该功能,如下所示:

jar {
    sourceSets.main.java.srcDirs = ['src', '../otherprojectdir/src']

    include (['com/ourcompany/somepackage/activityadapter/**',
                 ...
        'com/ourcompany/someotherpackage/**'])

    exclude(['com/ourcompany/someotherpackage/polling/**'])
}

即使使用上面的 exclude 调用(我也尝试过不使用方括号),gradle 仍在尝试编译polling类,这会导致编译失败。如何防止 Gradle 尝试编译该包?

4

3 回答 3

41

如果您不想编译这些包,此解决方案是有效的,但如果您想编译它们并从您的 JAR 中排除,您可以使用

// tag::jar[]
jar {
    exclude('mi/package/excluded/**')   
    exclude('mi/package/excluded2/**')  
}
// end::jar[]
于 2015-04-21T19:20:18.320 回答
34

如果您有一些不想编译的源代码,则必须为源代码声明一个过滤器,而不是为放入 Jar 中的类文件声明一个过滤器。就像是:

sourceSets {
    main {
        java {
            include 'com/ourcompany/somepackage/activityadapter/**'
            include 'com/ourcompany/someotherpackage/**'
            exclude 'com/ourcompany/someotherpackage/polling/**'
        }
    }
}
于 2013-10-25T05:13:54.767 回答
1

2018 年:

您还可以使用闭包或 Spec 来指定要包含或排除的文件。闭包或 Spec 被传递一个 FileTreeElement,并且必须返回一个布尔值。

jar {
  exclude {
    FileSystems.getDefault()
      .getPathMatcher("glob:com/ourcompany/someotherpackage/polling/**")
      .matches(it.file.toPath())
  }
}

请参阅Jar.excludeFileTreeElement查找文件

于 2018-05-24T07:57:35.800 回答