Java Gradle在目录中包含可传递的依赖项
我有一个java项目,它有几个依赖项,例如: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
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