Quelle serait la méthode appropriée de téléchargement et de décompression du fichier à partir de l’URL (http
)?
Si possible, j'aimerais éviter de retélécharger chaque fois que j'exécute la tâche (dans ant.get
peut être obtenu par skipexisting: 'true'
).
Ma solution actuelle serait:
task foo {
ant.get(src: 'http://.../file.Zip', dest: 'somedir', skipexisting: 'true')
ant.unzip(src: 'somedir' + '/file.Zip', dest: 'unpackdir')
}
encore, je m'attendrais à une solution sans fourmi. Une chance de réaliser cela?
Il n'y a pas actuellement d'API Gradle pour le téléchargement à partir d'une URL. Vous pouvez l'implémenter à l'aide de Ant, Groovy ou, si vous souhaitez bénéficier des fonctionnalités de résolution de dépendance/mise en cache de Gradle, en prétendant qu'il s'agit d'un référentiel Ivy avec une URL d'artefact personnalisée. La décompression peut être effectuée de la manière habituelle de Gradle (méthode copy
ou tâche Copy
).
@CMPS:
Supposons donc que vous souhaitiez télécharger ce fichier Zip en tant que dépendance:
https://github.com/jmeter-gradle-plugin/jmeter-gradle-plugin/archive/1.0.3.Zip
Vous définissez votre repo ivy comme:
repositories {
ivy {
url 'https://github.com/'
layout 'pattern', {
artifact '/[organisation]/[module]/archive/[revision].[ext]'
}
}
}
et ensuite l'utiliser comme:
dependencies {
compile 'jmeter-gradle-plugin:jmeter-gradle-plugin:1.0.3@Zip'
//This maps to the pattern: [organisation]:[module]:[revision]:[classifier]@[ext]
}
Emprunt de la tâche de décompression de @Matthias, à l'exception du ramassage du fichier Zip à partir du cache de niveaux
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
}
La décompression à l'aide de la tâche de copie fonctionne comme suit:
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
La réponse de @ RaGe fonctionnait bien, mais je devais l'adapter car la méthode de mise en page ivy avait été amortie, voir 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)
Donc, pour que cela fonctionne, je devais l'adapter à ceci pour un adaptateur de porte-clés 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
}