Puis-je télécharger des fichiers à partir de http pendant le cycle de vie de Maven? un plugin?
Si le fichier est une dépendance Maven, vous pouvez utiliser le plugin Maven Dependency Plugin qui contient un get
goal.
Pour le fichier any, vous pouvez utiliser le plug-in Antrun pour appeler Ant Get task .
Une autre option serait le maven-download-plugin , il a été créé précisément pour faciliter ce genre de choses. Ce 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 .. Si vous regardez les sources, vous verrez qu'il a un mojo WGet qui fera l'affaire .
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é considérablement mise à jour pour refléter les modifications apportées au plug-in, comme indiqué dans les commentaires.
On dirait que wagon-maven-plugin de CodeHaus permet de télécharger des fichiers via HTTP (bien que ce ne soit pas son objectif initial).
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>
J'aimerais ajouter quelque chose à propos du plugin download-maven:
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 "répertoire" et un "nom de fichier")
<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>