【问题标题】:Excluding all subproject jars from a copy task in Gradle从 Gradle 中的复制任务中排除所有子项目 jar
【发布时间】:2014-09-14 14:08:30
【问题描述】:

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

使用this answer 回答上一个问题,我几乎可以做到这一点,除了我的共享项目库被复制到 lib/ 和 lib/ext/ 中。但是,它们只能复制到 lib/。

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

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

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

我怎样才能做到这一点?对于如何实现将库复制到上述文件夹的主要目标,我也愿意接受其他建议。

【问题讨论】:

  • 你能在 GitHub 上准备一个最小的工作示例吗?我可以试试,但是设置起来很费时间,而且我没有太多时间。
  • 嗨@Opal,感谢您的帮助!我在 github.com/Prom42/gradle-test 创建了一个最小示例。只需运行gradle build copyFiles

标签: java groovy gradle jar shared-libraries


【解决方案1】:

我现在已经解决了我的问题,方法是记住 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')
}

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

【讨论】:

    【解决方案2】:

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

    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')
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-11
      • 2016-03-08
      • 2020-09-06
      • 1970-01-01
      • 2019-07-23
      • 2018-01-23
      • 2016-11-17
      相关资源
      最近更新 更多