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?

45
demandé sur Pascal Thivent 2010-04-30 05:29:04

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.

44
répondu Pascal Thivent 2017-04-11 11:41:23

Semble que wagon-maven-plugin {[3] } de CodeHaus permet de télécharger des fichiers via HTTP (bien que ce ne soit pas l'objectif original).

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>
22
répondu mmuller 2017-01-13 08:07:34

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>
14
répondu aaron 2013-07-23 20:26:18

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.
12
répondu Mickael 2013-10-03 06:36:37

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
répondu fracz 2014-01-07 22:47:46

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>
0
répondu César García 2016-11-13 14:06:43