美芬: 从网址下载文件

我可以从 http 下载一些文件,而梅文生命周期? 任何插件?

72916 次浏览

如果该文件是 Maven 依赖项,则可以使用具有 get目标的 Maven Dependency Plugin Maven 依赖插件

对于 任何文件,可以使用 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。

请注意,这个答案已经被大量更新,以反映插件中的变化,如评论中所述。

似乎来自 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 是一个更直接的解决方案:

<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 的东西:

  • 项目现在托管在 GitHub https://github.com/maven-download-plugin/maven-download-plugin
  • 它的发行版可以在 Maven Central 上找到,而 SNAPSHOT 可以在 oss.sonatype.org 快照存储库中找到
  • 与这里提到的其他建议相比,download-maven-plugin 增加了以下有趣的特性: 缓存文件(以避免总是重新下载大文件)和签名验证,以确保下载获得正确的位。

如果可用,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>

您可以在 wagon插件中使用 download-single目标。下面是一个下载 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>