web-dev-qa-db-fra.com

Maven: téléchargement de fichiers à partir de l'URL

Puis-je télécharger des fichiers à partir de http pendant le cycle de vie de Maven? un plugin?

48
Jin Kwon

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:getmais .. 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.

50
Pascal Thivent

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>
24
mmuller

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>
15
aaron

J'aimerais ajouter quelque chose à 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 SNAPSHOT sont disponibles sur le référentiel de captures instantanées oss.sonatype.org
  • Par rapport aux autres suggestions mentionnées ici, download-maven-plugin ajoute la fonctionnalité intéressante suivante: la mise en cache des fichiers (pour éviter de toujours retélécharger de gros fichiers) et la vérification de la signature pour s'assurer que le téléchargement dispose des bons morceaux.
13
Mickael

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>
0
fracz

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>
0
César García