Java Gradle在目录中包含可传递的依赖项

Java Gradle在目录中包含可传递的依赖项,java,gradle,jar,dependencies,transitive-dependency,Java,Gradle,Jar,Dependencies,Transitive Dependency,我有一个java项目,它有几个依赖项,例如: dependencies { compile("com.whatever.jar:jar-1:1.2.3") compile("com.whatever.jar:jar-2:4.5.6") compile("com.whatever.jar:jar-3:7.8.9") } 我将其打包为jar库,并将其与描述这些依赖关系的POM文件一起发布到存储库: 4.0.0 com.my.project 我的图书馆 1.0.0 com

我有一个java项目,它有几个依赖项,例如:

dependencies {
    compile("com.whatever.jar:jar-1:1.2.3")
    compile("com.whatever.jar:jar-2:4.5.6")
    compile("com.whatever.jar:jar-3:7.8.9")
} 
我将其打包为jar库,并将其与描述这些依赖关系的POM文件一起发布到存储库:


4.0.0
com.my.project
我的图书馆
1.0.0
com.whatever.jar
jar-1
1.2.3
编译
com.whatever.jar
jar-2
4.5.6
编译
com.whatever.jar
jar-3
7.8.9
编译
我还有另一个项目,它在编译时依赖于以前构建的jar:

dependencies {
    compileOnly("com.my.project:my-library:1.0.0")
}
我想创建一个任务来构建第二个项目,并创建一个包含
com.my.project:my library:1.0.0
jar及其可传递依赖项(
jar-1
jar-2
jar-3
)的zip文件


task createZip下面是一个自包含的
build.gradle
脚本,它演示了如何创建
createZip
任务(它只向ZIP存档添加特定的依赖项):

/*使“compileOnly”配置可用*/
插件{
id‘java’
}
/*向项目中添加一些演示依赖项*/
存储库{
jcenter()
}
依赖关系{
仅编译“junit:junit:4.12”
仅编译“org.slf4j:slf4j simple:1.7.28”
}
任务createZip(类型:Zip){
//ZIP文件中的“lib”目录将只具有所有这些依赖项
//属于“compileOnly”配置的文件
//“junit:junit:4.12”模块:
def depOfInterest=dependencies.create('junit:junit:4.12')
进入('lib'){
从configurations.compileOnly.resolvedConfiguration.getFiles({dep->
dep==depOfInterest
})
}
//ZIP文件中的“justForDemonstration”目录将包含所有
//“compileOnly”配置的依赖项文件,包括SLF4J:
进入('justForDemonstration'){
从configurations.compileOnly
}
}

这可以使用
/gradlew createZip
(使用Gradle 5.6.2进行测试)运行。它在
build/distributions/.ZIP
下生成ZIP文件。请告诉我您对伪代码的想法。

我在
sourceset.main.runtimeClasspath
中找不到这些可传递的依赖项。但是,它们存在于
sourceset.main.compileClasspath
中。是否有可能以编程方式获取一个依赖项的可传递依赖项列表?
task createZip << {
    into('lib') {
        // here I would like to do something like (it's a horrible pseudo-code):
        from configurations.(com.my.project:my-library:1.0.0).jar.transitiveDependencies.files
    }
}
task uberJar(type: Jar) {
   dependsOn classes
   from sourceSets.main.runtimeClasspath.collect { it.directory?fileTree(it):zipTree(it)}
   classifier = 'uber-jar'
} 
assemble.dependsOn uberJar