Gradle 分发ZIP中的多项目渐变重复依赖项
我有一个gradle多项目设置,我希望将所有相关的JAR和输出JAR收集到顶层的ZIP中。我有一些东西在工作,但是我在ZIP文件中找到了重复的东西。我在这本书里找不到任何有用的东西Gradle 分发ZIP中的多项目渐变重复依赖项,gradle,build.gradle,Gradle,Build.gradle,我有一个gradle多项目设置,我希望将所有相关的JAR和输出JAR收集到顶层的ZIP中。我有一些东西在工作,但是我在ZIP文件中找到了重复的东西。我在这本书里找不到任何有用的东西 如何删除重复项 我还有别的办法吗 结构 ./multi-project ./multi-project/build.gradle ./multi-project/settings.gradle ./multi-project/bar ./multi-project/bar/build.gradle ./multi
- 如何删除重复项
- 我还有别的办法吗
./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
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'
}
格雷德尔酒店
include ':foo'
include ':bar'
foo和bar的低级build.gradle文件(两者相同)
当我从顶层运行gradle:buildDist时,ZIP中有重复项
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
这是我想到的最好的
- 将所有依赖项解析为文件实例并放入哈希集中李>
- 包装在gradle.taskGraph.whenReady闭包中,否则过早解析会导致配置在尝试添加依赖项闭包时被锁定
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'
}
}
要查看特定Gradle任务类型的所有配置选项,请参阅。Nice one,非常感谢,我知道您参与了
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'
}
}
task buildDist(type: Zip) {
into 'jars'
from { subprojects.configurations.runtime }
from { subprojects.jar }
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}