我想使用Gradle下载依赖项及其源文件,并将它们全部放在一个目录中。我在下面找到了这个答案,它告诉我如何为依赖本身做这件事,但我想得到源文件。我该怎么做?
我知道Eclipse插件可以获取源文件,但我不知道它放在哪里。
答案 0 :(得分:4)
这有效
apply plugin: 'java'
repositories { ... }
dependencies {
compile 'foo:bar:1.0'
runtime 'foo:baz:1.0'
}
task download {
inputs.files configurations.runtime
outputs.dir "${buildDir}/download"
doLast {
def componentIds = configurations.runtime.incoming.resolutionResult.allDependencies.collect { it.selected.id }
ArtifactResolutionResult result = dependencies.createArtifactResolutionQuery()
.forComponents(componentIds)
.withArtifacts(JvmLibrary, SourcesArtifact)
.execute()
def sourceArtifacts = []
result.resolvedComponents.each { ComponentArtifactsResult component ->
Set<ArtifactResult> sources = component.getArtifacts(SourcesArtifact)
println "Found ${sources.size()} sources for ${component.id}"
sources.each { ArtifactResult ar ->
if (ar instanceof ResolvedArtifactResult) {
sourceArtifacts << ar.file
}
}
}
copy {
from configurations.runtime
from sourceArtifacts
into "${buildDir}/download"
}
}
}
答案 1 :(得分:1)
apply plugin: 'java'
configurations {
runtimeSources
}
dependencies {
compile 'foo:bar:1.0'
runtime 'foo:baz:1.0'
configurations.runtime.resolvedConfiguration.resolvedArtifacts.each { ResolvedArtifact ra ->
ModuleVersionIdentifier id = ra.moduleVersion.id
runtimeSources "${id.group}:${id.name}:${id.version}:sources"
}
}
task download(type: Copy) {
from configurations.runtime
from configurations.runtimeSources
into "${buildDir}/download"
}