繁体   English   中英

从Gradle中的复制任务中排除所有子项目jar

[英]Excluding all subproject jars from a copy task in Gradle

我们有一个Java webstart应用程序,并希望在使用Gradle构建项目之后,将所有第三方库部署/复制到lib / ext /以及所有项目jar文件到lib /中。

使用对前一个问题的这个答案我几乎可以完成这个,除了我的共享项目库被复制到lib /和lib / ext /。 但是,它们只应复制到lib /。

现在我正在寻找一种方法从这个任务中排除所有共享项目库:

task copyDeps(type: Copy) {
    from(subprojects.configurations.runtime) 
    into project.file('lib/ext')
}

我试图添加像exclude(subprojects.jar)这样的东西,但我不知道如何在参数中获取所有子项目jar,我可以将其传递给exclude()。

我怎么能做到这一点? 我也对如何实现将库复制到上述文件夹的主要目标的其他建议持开放态度。

我现在通过记住copyJars项目jar文件的名称然后在copyDeps它们排除来解决我的问题:

List<String> projectLibs = new ArrayList<String>()
task copyJars(type: Copy, dependsOn: subprojects.jar) {    

    eachFile { fileCopyDetails -> 
      projectLibs.add(fileCopyDetails.name)
    }
    from(subprojects.jar) 
    into file('lib')
}

task copyDeps(type: Copy, dependsOn: copyJars) {

    eachFile { fileCopyDetails ->      
      if (fileCopyDetails.name in projectLibs){
        fileCopyDetails.exclude()
      }
    }
    from (subprojects.configurations.runtime)
    into file('lib/ext')
}

如果有人有更好的解决方案,我会很高兴听到它:-)

这是一个更短的解决方案:

task copyDeps (type: Copy, dependsOn: subprojects.jar) {
    from (subprojects.configurations.runtime) {
        subprojects.jar.each { it.outputs.files.each { exclude it.getName() } }
    }
    into project.file('lib/ext')
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM