studio dependency java gradle dependencies artifactory

java - dependency - gradle resolve dependencies



Gradle excluye archivos específicos dentro de la dependencia (2)

No creo que Gradle tenga ningún soporte incorporado para lograr esto, pero usted mismo puede limpiar los artefactos del classpath.

Inspirado por este hilo en los foros de Gradle, se me ocurrió esto:

// The artifacts we don''t want, dependency as key and artifacts as values def unwantedArtifacts = [ "dep.location:example": [ "foo-1-0-xml", "bar-1-0", "bar-1-0-async", "bar-1-0-xml"], ] // Collect the files that should be excluded from the classpath def excludedFiles = configurations.compile.resolvedConfiguration.resolvedArtifacts.findAll { def moduleId = it.moduleVersion.id def moduleString = "${moduleId.group}:${moduleId.name}:${moduleId.version}" // Construct the dependecy string // Get the artifacts (if any) we should remove from this dependency and check if this artifact is in there it.name in (unwantedArtifacts.find { key, value -> moduleString.startsWith key }?.value) }*.file // Remove the files from the classpath sourceSets { main { compileClasspath -= files(excludedFiles) } test { compileClasspath -= files(excludedFiles) } }

Tenga en cuenta que Gradle probablemente aún descargue los archivos y los guarde en caché, pero no deberían estar en su classpath.

Me preguntaba si había alguna forma de excluir archivos específicos, que están dentro de una dependencia (no una dependencia transitiva), de ser descargados.

Estoy cambiando una compilación de Ant + Ivy a Gradle y esto fue hecho en Ivy antes. Lo pregunto porque tengo una sola dependencia que contiene muchos archivos jar wsdl compilados en Artifactory que estamos retirando, pero no quiero descargar todos los archivos jar en la dependencia.

En Ivy fue configurado como:

Estos 6 artefactos se publican en Artifactory en un directorio repo / dep.location / example / 7.3 / jar.

<publications> <artifact name="foo-1-0" type="jar" /> <artifact name="foo-1-0-async" type="jar" /> <artifact name="foo-1-0-xml" type="jar" /> <artifact name="bar-1-0" type="jar" /> <artifact name="bar-1-0-async" type="jar" /> <artifact name="bar-1-0-xml" type="jar" /> </publications>

Así es como recupero solo dos de los seis artefactos.

<dependency org="dep.location" name="example" rev="7.3" conf="compile,runtime"> <include name="foo-1-0-async"/> <include name="foo-1-0-xml"/> </dependency>

Actualmente, si intento hacer algo similar en Gradle, las exclusiones se ignoran y se descargan los seis artefactos.

compile (group:"dep.location", name:"example", version:"7.3") { exclude module:''foo-1-0-xml'' exclude module:''bar-1-0'' exclude module:''bar-1-0-async'' exclude module:''bar-1-0-xml'' }

Estoy usando Gradle versión 1.8.


No estoy seguro de si esto es lo que quieres, pero como usamos Spring Boot y Wildfly, tenemos que eliminar el módulo tomcat-starter del paquete estándar de arranque de primavera, y se ve muy similar a lo que has hecho. Sin embargo, nuestro código dice:

configurations { compile.exclude module: "spring-boot-starter-tomcat" }

No he comprobado si el jar correspondiente no está descargado o simplemente no está en el classpath, sé sin embargo que ya no se usa.