如何使用gradle复制所有源jar
我们有一个旧的playframework 1.2.x版本,其中我们将所有JAR复制到project/lib,以便playframework可以使用它们。我们也希望复制所有源jar,以便在运行play eclipse时,我们可以查看所有第三方源。有没有办法让gradle做到这一点 我指的是当我运行GradleEclipse时下载的所有源JAR,因为我看到它们下载缓存位置。我们有GradleEclipse在一个项目上为我们调用PlayEclipsify,所以我们可以100%使用gradle 谢谢,如何使用gradle复制所有源jar,gradle,Gradle,我们有一个旧的playframework 1.2.x版本,其中我们将所有JAR复制到project/lib,以便playframework可以使用它们。我们也希望复制所有源jar,以便在运行play eclipse时,我们可以查看所有第三方源。有没有办法让gradle做到这一点 我指的是当我运行GradleEclipse时下载的所有源JAR,因为我看到它们下载缓存位置。我们有GradleEclipse在一个项目上为我们调用PlayEclipsify,所以我们可以100%使用gradle 谢谢,
迪恩这并不像预期的那样直截了当。以下代码段将java项目的所有依赖项(运行时+编译)的源JAR复制到特定文件夹中:
task copySourceJars(type:Copy){
def deps = configurations.runtime.incoming.dependencies.collect{ dependency ->
dependency.artifact { artifact ->
artifact.name = dependency.name
artifact.type = 'source'
artifact.extension = 'jar'
artifact.classifier = 'sources'
}
dependency
}
from(configurations.detachedConfiguration(deps as Dependency[]).resolvedConfiguration.lenientConfiguration.getFiles(Specs.SATISFIES_ALL))
into('sourceLibs')
}
我们在这里使用宽松配置的原因是,如果无法解决源工件,我们不希望失败。也许有一种更优雅的方式,但我还没有深入研究过
希望有帮助
ReneRene answer将下载直接依赖的源JAR,而不是所有传递依赖的源JAR 下面是一个可以实现此目的的任务:
task copySourceJars( type: Copy ) {
def sources = configurations.runtime.resolvedConfiguration.resolvedArtifacts.collect { artifact ->
project.dependencies.create( [
group: artifact.moduleVersion.id.group,
name: artifact.moduleVersion.id.name,
version: artifact.moduleVersion.id.version,
classifier: 'sources'
] )
}
from configurations.detachedConfiguration( sources as Dependency[] )
.resolvedConfiguration.lenientConfiguration.getFiles( Specs.SATISFIES_ALL )
into file( 'some-directory/' )
}
然后,通过将
分类器
更改为javadoc
,可以对javadocs JAR执行同样的操作,这里是用Kotlin DSL翻译的eskatos解决方案:
tasks {
"copySourceJars"(Copy::class) {
val sources = configurations.runtime.resolvedConfiguration.resolvedArtifacts.map {
with(it.moduleVersion.id) {
dependencies.create(group, name, version, classifier = "sources")
}
}
from(
configurations.detachedConfiguration(*sources.toTypedArray())
.resolvedConfiguration.lenientConfiguration.getFiles(Specs.SATISFIES_ALL)
)
into(File("some-directory"))
}
}
脚本中似乎有错误,
resolvedConfiguration
在from(..)
语句中拼写了两次。此外,此代码仅下载直接依赖项的源代码,而不下载传递项的源代码,请参见我的答案。@eskatos我已删除重复的resolvedConfiguration
。出于某种原因,此代码还复制了包含类的JAR子集。我只是添加了.filter{it.name.endsWith(“-sources.jar”)}
来修复它。