【问题标题】:How to create a collection of file collections in gradle?如何在 gradle 中创建文件集合的集合?
【发布时间】:2020-09-27 17:17:24
【问题描述】:

我正在将一个 ant 项目迁移到 gradle 项目。我有一组文件集合,可用作多个任务的输入。这在 ant 中是可能的。

<zipfileset id="zipfileset1" src="C:/reporter/servlet/reporter.war">
    <include name="WEB-INF/classes/**/*.class"/>
    <exclude name="WEB-INF/classes/**/*_jsp*.class"/>
</zipfileset>
<fileset id="fileset1" dir="C:/lib">
    <include name="test*.jar"/>
</fileset>
<union id="resources.reports.lib">
    <fileset refid="fileset1"/>
    <fileset id="fileset2" dir="C:/adaptors/lib">
        <include name="com*.jar"/>
    </fileset>
    <zipfileset refid="zipfileset1"/>
</union>

gradle中是否有任何方法相当于ant中的“union”。

【问题讨论】:

    标签: java gradle groovy build.gradle


    【解决方案1】:

    有一个工作示例here

    请注意,Gradle 与 Ant (see here) 紧密集成,因此一种选择是直接从 Ant 代码迁移。例如:

    // NOTE: this uses local dirs instead of Windows paths (e.g. C:\lib)
    
    ant.zipfileset(id:"zipfileset1", src:"c_reporter/servlet/reporter.war") {
        include(name:"WEB-INF/classes/**/*.class")
        exclude(name:"WEB-INF/classes/**/*_jsp*.class")
    }   
    ant.fileset(id:"fileset1", dir:"c_lib") {
        include(name:"test*.jar")
    }   
    ant.union(id:"resources.reports.lib") {
        fileset(refid:"fileset1")
        fileset(id:"fileset2", dir:"c_adaptors/lib") {
            include(name:"com*.jar")
        }   
        zipfileset(refid:"zipfileset1")
    }   
    

    根据评论,另一种替代方法 - 和更 Gradle 式的方法 - 是:(也在上面的链接中说明)

    project.ext.zipFiles1 = 
    zipTree("${projectDir}/c_reporter/servlet/reporter.war").matching {
        include 'WEB-INF/classes/**/*.class'
        exclude 'WEB-INF/classes/**/*_jsp.class'
    }
    
    project.ext.files1 = 
    fileTree("${projectDir}/c_lib").matching {
        include 'test*.jar'
    }
    
    project.ext.files2 = 
    fileTree("${projectDir}/c_adaptors/lib").matching {
        include 'com*.jar'
    }
    
    project.ext.allFiles = 
    project.ext.zipFiles1.plus(project.ext.files1)
                         .plus(project.ext.files2)
    

    【讨论】:

    • 是否可以使用 files.plus() 或 fileTree 代替 ant?
    • 我根据您的评论/问题添加了另一个选项。新样式包含在 GitHub 链接中的 b2.gradle 中。它不会复制文件,而是列出路径。我不确定最终目标是什么,但希望这会有所帮助。
    猜你喜欢
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多