We have an old playframework 1.2.x version where we copy all the jars to project/lib so playframework can consume them. We would LOVE to copy all the source jars as well so that when runnig play eclipsify, we can view all the third party source. Is there a way to do this with gradle?
and I mean all the source jars that were downloaded when I ran gradle eclipse as I saw them download the cache locations. We have gradle eclipse calling play eclipsify for us on the one project as well so we can 100% just use gradle.
thanks, Dean
Here eskatos solution translated in Kotlin DSL:
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"))
}
}
this is not that straight forward as expected. The following snippet copies the source jars for all dependencies (runtime + compile) of a java project into a specific folder:
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')
}
The reason we use a lenientConfiguration here is, that we don't want to fail if a source artifact cannot be resolved. There might be a more elegant way, but I havn't looked deeper into that.
hope it helps,
René
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With