plugin - Manera más limpia en Gradle para obtener la ruta a un archivo jar en la memoria caché de dependencia gradle
gradle publish (4)
Así es como lo hice:
project.buildscript.configurations.classpath.each {
String jarName = it.getName();
print jarName + ":"
}
Estoy usando Gradle para ayudar a automatizar las tareas de Hadoop. Cuando llamo a Hadoop, necesito poder pasarle la ruta a algunas jarras de las que depende mi código para que Hadoop pueda enviar esa dependencia durante la fase de mapa / reducción.
He descubierto algo que funciona, pero se siente desordenado y me pregunto si hay alguna característica que me falta en alguna parte.
Esta es una versión simplificada de mi script gradle que tiene una dependencia en el archivo solr 3.5.0 y una tarea findSolrJar
que recorre todos los archivos jar en la configuración para encontrar el archivo correcto:
apply plugin: ''groovy''
repositories {
mavenCentral()
}
dependencies {
compile ''org.apache.solr:solr-solrj:3.5.0''
}
task findSolrJar() {
println project.configurations.compile*.toURI().find { URI uri -> new File(uri).name == ''solr-solrj-3.5.0.jar''}
}
ejecutar esto me da resultados como este:
gradle findSolrJar
file:/Users/tnaleid/.gradle/caches/artifacts-8/filestore/org.apache.solr/solr-solrj/3.5.0/jar/74cd28347239b64fcfc8c67c540d7a7179c926de/solr-solrj-3.5.0.jar
:findSolrJar UP-TO-DATE
BUILD SUCCESSFUL
Total time: 2.248 secs
¿Hay una mejor manera de hacer esto?
Necesitaba lombok.jar como una java build flag para gwt. ¡Funcionó muy bien!
configurations {
lombok
}
dependencies {
lombok ''org.projectlombok:lombok+''
}
ext {
lombok = configurations.lombok.asPath
}
compileGwt {
jvmArgs "-javaagent:${lombok}=ECJ"
}
Me sorprendió que la resolución funcionara lo suficientemente temprano en la fase de configuración, pero lo hace.
Su código se puede simplificar un poco, por ejemplo project.configurations.compile.find { it.name.startsWith("solr-solrj-") }
.
También puede crear una configuración dedicada para un artefacto, para mantenerlo limpio; y use asPath
si el hecho de que potencialmente puede devolver varias ubicaciones funciona bien para su caso de uso (sucede si resuelve el mismo contenedor en varias ubicaciones):
configurations {
solr
}
dependencies {
solr ''org.apache.solr:solr-solrj:3.5.0''
}
task findSolrJars() {
println configurations.solr.asPath
}
Para evitar copiar y pegar, en caso de que necesite ese jarrón en la configuración de compile
, puede agregar esta configuración dedicada a la compile
, como:
dependencies {
solr ''org.apache.solr:solr-solrj:3.5.0''
compile configurations.solr.dependencies
}