首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发行版ZIP中的多项目分级重复依赖关系

发行版ZIP中的多项目分级重复依赖关系
EN

Stack Overflow用户
提问于 2014-09-09 19:21:23
回答 2查看 4K关注 0票数 6

我有一个分级多项目的设置,我希望收集所有的依赖和输出罐子到一个ZIP在顶层。我得到了一些有用的东西,但是我在ZIP文件中得到了副本。我在关于多项目设置的正式文件中没有发现任何有用的东西

  • 我怎样才能移除复制件?
  • 我还有别的办法吗?

结构

代码语言:javascript
复制
./multi-project
./multi-project/build.gradle
./multi-project/settings.gradle
./multi-project/bar
./multi-project/bar/build.gradle
./multi-project/foo
./multi-project/foo/build.gradle

顶层build.gradle

代码语言:javascript
复制
apply plugin: 'java'

allprojects {
  apply plugin: 'java'

  repositories {
    mavenCentral()
  }
}

task buildDist(type: Zip) {
    from subprojects.configurations.compile into 'jars'
    from subprojects.jar.outputs.files into 'jars'
}

Settings.gradle

代码语言:javascript
复制
include ':foo'
include ':bar'

用于foo和bar的较低级别的build.gradle文件(两者相同)

代码语言:javascript
复制
dependencies {
   compile 'org.springframework:spring-beans:4.1.0.RELEASE'
}

当我从顶层运行gradle :buildDist时,ZIP有重复的

代码语言:javascript
复制
unzip -l build/distributions/multi-project.zip 

Archive:  build/distributions/multi-project.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2014-09-09 20:17   jars/
   701334  2014-09-09 19:53   jars/spring-beans-4.1.0.RELEASE.jar
    62050  2014-07-05 21:09   jars/commons-logging-1.1.3.jar
  1005039  2014-09-09 19:53   jars/spring-core-4.1.0.RELEASE.jar
   701334  2014-09-09 19:53   jars/spring-beans-4.1.0.RELEASE.jar
    62050  2014-07-05 21:09   jars/commons-logging-1.1.3.jar
  1005039  2014-09-09 19:53   jars/spring-core-4.1.0.RELEASE.jar
      301  2014-09-09 20:12   jars/bar.jar
      301  2014-09-09 20:12   jars/foo.jar
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-18 05:24:48

代码语言:javascript
复制
task buildDist(type: Zip) {
    into 'jars'
    from { subprojects.configurations.runtime }
    from { subprojects.jar }
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}

要查看特定级别任务类型的所有配置选项,请参阅分级构建语言参考

票数 13
EN

Stack Overflow用户

发布于 2014-09-09 20:36:24

这是我想出的最好的办法

  • 将所有依赖项解析为“文件实例”并放入HashSet中。
  • 在gradle.taskGraph.whenReady闭包中包装,否则过早的解析会导致在它们试图添加依赖项闭包时锁定配置。

示例

代码语言:javascript
复制
task buildDist(type: Zip) {
    gradle.taskGraph.whenReady { taskGraph ->
      def uniqueFiles = new HashSet()

      uniqueFiles.addAll(subprojects.configurations.compile.resolvedConfiguration.resolvedArtifacts.file)
      uniqueFiles.addAll(subprojects.jar.outputs.files)

      from uniqueFiles into 'jars'

   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25752078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档