Подтвердить что ты не робот

Maven: загрузка файлов с URL-адреса

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

4b9b3361

Ответ 1

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

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

Другим вариантом будет maven-download-plugin, он был точно создан для облегчения такого рода вещей. Он не очень активно развивается, и в документации упоминается только цель 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.

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

Ответ 2

Кажется, что wagon-maven-plugin из 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>

Ответ 3

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>

Ответ 4

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

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

Ответ 5

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

Ответ 6

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