Maven: загрузка файлов с url

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

6 ответов


если файл является зависимостью Maven, вы можете использовать Плагин Зависимостей Maven С get цель.

на любой файл, вы можете использовать плагин Antrun для вызова Ant получить задание.

другой вариант будет maven-скачать-плагин, он был точно создан, чтобы облегчить такого рода вещи. Он не очень активно разрабатывается, и в документации упоминается только artifact цель, которая делает то же самое, что и dependency:get но.. если вы посмотрите на источники, вы увидите, что у этого есть wget mojo, который выполнит эту работу.

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

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


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

вот пример загрузки GlassFish zip перед интеграционными тестами:

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

плагин maven-antrun-это более прямое решение:

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

Я хотел бы добавить несколько вещей о download-maven-plugin:

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

Если доступно, 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>

можно использовать 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>