type plugin application jar hadoop dependencies gradle

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 }