Maven: téléchargement de fichiers depuis l'url
Puis-je télécharger des fichiers à partir de http pendant le cycle de vie de maven? n'importe quel plugin?
6 réponses
Si le fichier est une dépendance Maven, vous pouvez utiliser le Dépendance Maven Plugin, qui a un get
objectif.
Pour tout fichier, vous pouvez utiliser le Antrun plugin pour appeler Ant Me de la tâche.
Une autre option serait le Maven-download-plugin , il a été précisément créé pour faciliter ce genre de choses. Il n'est pas très activement développé et la documentation ne mentionne qu'un objectif artifact
qui fait exactement la même chose que dependency:get
mais..{[20] } si vous regardez les sources, vous verrez qu'il a un mojo WGet qui fera le travail.
Utilisez-le comme ceci dans N'importe quel POM:
<plugin>
<groupId>com.googlecode.maven-download-plugin</groupId>
<artifactId>download-maven-plugin</artifactId>
<version>1.3.0</version>
<executions>
<execution>
<!-- the wget goal actually binds itself to this phase by default -->
<phase>process-resources</phase>
<goals>
<goal>wget</goal>
</goals>
<configuration>
<url>http://url/to/some/file</url>
<outputFileName>foo.bar</outputFileName>
<!-- default target location, just to demonstrate the parameter -->
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
Les principaux avantages de ce plugin sont la mise en cache du téléchargement et la vérification par rapport à une signature, telle que MD5.
notez que cette réponse a été fortement mise à jour pour refléter les changements dans le plugin comme indiqué dans les commentaires.
Voici un exemple de téléchargement de GlassFish zip avant les tests d'intégration:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>wagon-maven-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>download-glassfish</id>
<phase>pre-integration-test</phase>
<goals>
<goal>download-single</goal>
</goals>
<configuration>
<url>http://download.java.net</url>
<fromFile>glassfish/3.1/release/glassfish-3.1.zip</fromFile>
<toDir>${project.build.directory}/glassfish</toDir>
</configuration>
</execution>
</executions>
</plugin>
Le plugin maven-antrun est une solution plus directe:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>download-files</id>
<phase>prepare-package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<!-- download file -->
<get src="http://url/to/some/file"
dest="${project.build.directory}/downloads/"
verbose="false"
usetimestamp="true"/>
</target>
</configuration>
</execution>
</executions>
</plugin>
Je voudrais ajouter quelques choses à propos du plugin download-maven:
- le projet est maintenant hébergé sur GitHub https://github.com/maven-download-plugin/maven-download-plugin
- ses versions sont disponibles sur Maven Central, et les instantanés sont disponibles sur oss.sonatype.org référentiel d'instantanés
- par rapport aux autres suggestions mentionnées ici, le download-maven-plugin ajoute la fonctionnalité intéressante suivante: la mise en cache des fichiers (pour éviter toujours de télécharger gros fichiers) et vérification de la signature pour s'assurer que le téléchargement a obtenu les bons bits.
Si disponible, wget peut être utilisé directement avec exec-maven-plugin:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>wget</executable>
<arguments>
<argument>http://example.com/file.zip</argument>
<argument>destination.zip</argument>
</arguments>
</configuration>
</plugin>
Vous pouvez utiliser l'objectif download-single
dans le plugin wagon
. Voici un exemple pour télécharger une page HTML (notez que l'URL doit être divisée en une url "directory" et un "file name")
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>wagon-maven-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<phase>validate</phase>
<goals><goal>download-single</goal></goals>
<configuration>
<url>http://www.mojohaus.org/wagon-maven-plugin</url>
<fromFile>download-single-mojo.html</fromFile>
<toFile>[my dir]/mojo-help.html</toFile>
</configuration>
</execution>
</executions>
</plugin>