http - releases - gradle-descargar y descomprimir el archivo de url
org gradle (4)
¿Cuál sería la forma correcta de descargar y descomprimir el archivo de url ( http
)?
Si es posible, me gustaría evitar que se vuelvan a descargar cada vez que ejecuto la tarea (en ant.get
se puede lograr skipexisting: ''true''
).
Mi solución actual sería:
task foo {
ant.get(src: ''http://.../file.zip'', dest: ''somedir'', skipexisting: ''true'')
ant.unzip(src: ''somedir'' + ''/file.zip'', dest: ''unpackdir'')
}
aún así, esperaría una solución libre de hormigas. ¿Alguna posibilidad de lograr eso?
@CMPS:
Entonces digamos que desea descargar este archivo zip como una dependencia:
https://github.com/jmeter-gradle-plugin/jmeter-gradle-plugin/archive/1.0.3.zip
Usted define su repo de hiedra como:
repositories {
ivy {
url ''https://github.com/''
layout ''pattern'', {
artifact ''/[organisation]/[module]/archive/[revision].[ext]''
}
}
}
y luego usarlo como:
dependencies {
compile ''jmeter-gradle-plugin:jmeter-gradle-plugin:1.0.3@zip''
//This maps to the pattern: [organisation]:[module]:[revision]:[classifier]@[ext]
}
Tomar prestado la tarea de descompresión de @Matthias, excepto recoger el zip de la caché de Gradle
task unzip(type: Copy) {
def zipPath = project.configurations.compile.find {it.name.startsWith("jmeter") }
println zipPath
def zipFile = file(zipPath)
def outputDir = file("${buildDir}/unpacked/dist")
from zipTree(zipFile)
into outputDir
}
Actualmente no hay una API de Gradle para descargar desde una URL. Puede implementar esto utilizando Ant, Groovy o, si quiere beneficiarse de las funciones de resolución de dependencias / almacenamiento en caché de Gradle, simulando que es un repositorio Ivy con una URL de artefacto personalizada. La descompresión se puede hacer de la manera habitual de Gradle (método de copy
o tarea de Copy
).
Conseguí que la respuesta de @ RaGe funcionara, pero tuve que adaptarla, ya que el método de diseño de hiedra se ha depreciado, vea https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.repositories.IvyArtifactRepository.html#org.gradle.api.artifacts.repositories.IvyArtifactRepository:layout(java.lang.String,%20groovy.lang.Closure)
Así que para hacerlo funcionar, tuve que ajustarlo a esto para un adaptador keycloak tomcat:
ivy {
url ''https://downloads.jboss.org/''
patternLayout {
artifact ''/[organization]/[revision]/adapters/keycloak-oidc/[module]-[revision].[ext]''
}
}
dependencies {
// https://downloads.jboss.org/keycloak/4.8.3.Final/adapters/keycloak-oidc/keycloak-tomcat8-adapter-dist-4.8.3.Final.zip
compile "keycloak:keycloak-tomcat8-adapter-dist:$project.ext.keycloakAdapterVersion@zip"
}
task unzipKeycloak(type: Copy) {
def zipPath = project.configurations.compile.find {it.name.startsWith("keycloak") }
println zipPath
def zipFile = file(zipPath)
def outputDir = file("${buildDir}/tomcat/lib")
from zipTree(zipFile)
into outputDir
}
Descomprimir usando la tarea de copia funciona así:
task unzip(type: Copy) {
def zipFile = file(''src/dists/dist.zip'')
def outputDir = file("${buildDir}/unpacked/dist")
from zipTree(zipFile)
into outputDir
}
http://mrhaki.blogspot.de/2012/06/gradle-goodness-unpacking-archive.html