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

标签 java groovy gradle jar shared-libraries

我们有一个 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。

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

最佳答案

我现在通过记住 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')
}

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

关于java - 从 Gradle 中的复制任务中排除所有子项目 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24909667/

相关文章:

java - Gradle不运行测试

gradle - Gradle从1.12升级到2.4后无法解决依赖关系

java - 文本文件只读在 java temp.setReadonly() 中不起作用

java - 将参数从 java 传递到 groovy

jenkins - 为什么迭代列表时需要@NonCPS?

grails - grails 中的编码和解码如何使用grails 中的decodeHTML 和encodeAsHTML 进行?

Gradle - 从 .properties 文件加载属性

java - thymeleaf - 组合 th :each with th:href

java - 从HDFS读取zip文件并使用Spark Java提取

java - Hibernate + c3p0 Pool + ehcache 启动失败