【问题标题】:Publish multiple sub project jars at the same location在同一位置发布多个子项目 jar
【发布时间】:2014-02-25 15:40:22
【问题描述】:

我有一个 gradle 多项目(java)

根 |-子A |-subB |-subC

我已成功配置我的根 build.gradle 和 gradle.settings 以解决依赖关系并构建整个项目 OK。

然后所有 jars 都在 subX/build/libs 中生成(X=A,B,C)

有没有办法在最后重新组合所有内容(也包括运行时资源) 所以一切都准备好发货了吗?

【问题讨论】:

    标签: java gradle


    【解决方案1】:

    您的解决方案存在一些问题:任务依赖项不正确,陈旧的 Jar 文件不会被删除,并且无法保证找到所有 Jar 任务。 (后者可以通过使用project.tasks.withType(Jar).all 而不是.each 来修复。)这里有一个更准确的解决方案:

    task deploy(type: Sync) {
        into "$buildDir/deploy"
        for (subproject in subprojects) {
            from subproject.tasks.withType(Jar)
        }
    }
    

    PS:除了某些需要最大灵活性的情况外,最好使用CopySync 任务而不是project.copy 方法。

    【讨论】:

    • 感谢您的帮助。我是 Groovy DSL 的新手,我并不完全理解某些命令的含义。我查看了“同步”任务规范,所以我了解了“进入”和“从”方法。但我还有一个问题:为什么我们使用 Jar 类型的任务来查找要同步的 jar 文件?如果我还想复制主要的 sourceSets 资源,您将如何找到这些文件?
    • 您为什么要这样做?它们包含在 Jar 中。你的意思是第三方依赖?
    【解决方案2】:

    在 gradle 在线帮助中找到了答案(尽管它并没有真正标记为找到它)

    task deploy(dependsOn: assemble) << {
        File deployDist = mkdir("$buildDir/deploy")
        subprojects.each {project ->
            project.tasks.withType(Jar).each {archiveTask ->
                copy {
                    from archiveTask.archivePath
                    into deployDist
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 2014-04-01
      • 2021-06-09
      • 1970-01-01
      • 2011-08-31
      相关资源
      最近更新 更多