Maven: загрузка файлов с URL - PullRequest
49 голосов
/ 30 апреля 2010

Можно ли загрузить некоторые файлы с http в течение жизненного цикла maven? любой плагин?

Ответы [ 6 ]

52 голосов
/ 30 апреля 2010

Если файл является зависимостью Maven, вы можете использовать плагин Maven Dependency , который имеет цель get.

Для любого файла вы можете использовать плагин Antrun для вызова Ant's Get task .

Другим вариантом был бы maven-download-plugin , он был точно создан для облегчения такого рода вещей. Он не очень активно разрабатывается, и в документации упоминается только цель artifact, которая делает то же самое, что и dependency:get , но .. Если вы посмотрите на источники, вы увидите, что у них есть WGet Моджо, который сделает работу.

Используйте это так в любом 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>

Ключевыми преимуществами этого плагина являются кэширование загрузки и проверка на подпись, такую ​​как MD5.

Обратите внимание, что этот ответ был сильно обновлен, чтобы отразить изменения в плагине, как отмечено в комментариях.

25 голосов
/ 22 апреля 2011

Похоже, wagon-maven-plugin из CodeHaus позволяет загружать файлы по HTTP (хотя это не является первоначальной целью).

Вот пример загрузки ZIP-файла GlassFish перед интеграционными тестами:

<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>
17 голосов
/ 24 июля 2013

Плагин maven-antrun-plugin является более прямым решением:

<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 голосов
/ 03 октября 2013

Я бы хотел добавить кое-что о плагине download-maven:

  • Проект теперь размещен на GitHub https://github.com/maven-download-plugin/maven-download-plugin
  • Его релизы доступны в Maven Central, а SNAPSHOT доступны в репозитории моментальных снимков oss.sonatype.org
  • По сравнению с другими предложениями, упомянутыми здесь, плагин download-maven добавляет следующую интересную функцию: кэширование файлов (чтобы избежать повторной загрузки больших файлов всегда) и проверка подписи, чтобы убедиться, что загрузка получила правильные биты.
0 голосов
/ 13 ноября 2016

Вы можете использовать цель download-single в плагине wagon. Вот пример загрузки страницы HTML (обратите внимание, что URL-адрес должен быть разделен на URL-адрес «каталога» и «имя файла»)

<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 голосов
/ 08 января 2014

Если доступно, wget можно использовать напрямую с 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>
...