Maven:从url下载文件

Jin*_*won 54 maven-2 get

我可以在maven生命周期中从http下载一些文件吗?任何插件?

Pas*_*ent 57

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

对于任何文件,您都可以使用Antrun插件来调用Ant的Get任务.

另一种选择是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>
Run Code Online (Sandbox Code Playgroud)

这个插件的主要好处是缓存下载和检查签名,如MD5.

请注意,此答案已经过大量更新,以反映插件中的更改,如注释中所述.

  • 快进到2017年:这个答案有点陈旧; `maven-download-plugin`被重命名(artifactId)为`download-maven-plugin`.它包含在maven中心,你绝对不需要做svn checkout :)这里是官方github repo的链接,有使用示例:https://github.com/maven-download-plugin/maven-download-plugin#wget -目标 (5认同)
  • +1也可以检查MD5总和,例如:<md5> 3921c19528d180902939b9f4c9ac92f1 </ md5> (3认同)
  • 虽然对很多人来说可能很明显,但是从命令行执行 `mvn process-resources` 将启动此下载 (2认同)

mmu*_*ler 25

看起来像CodeHaus的wagon-maven-plugin允许通过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>
Run Code Online (Sandbox Code Playgroud)

  • 它是否像 maven-download-plugin 一样缓存本地存储库中的文件? (2认同)

aar*_*ron 17

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>
Run Code Online (Sandbox Code Playgroud)

  • 我不知道它是我使用的插件的版本还是什么,但是在<configuration>标签中,如果我使用<target>没有发生任何事情,但当我将其更改为<tasks>时,<get>开始工作.这里的示例有帮助:https://maven.apache.org/guides/mini/guide-using-ant.html (2认同)
  • 一些非常奇怪的事情正在发生。下载完成后,我期待下载目录中有一个文件。但结果是“下载”被创建为与下载文件具有相同扩展名的文件。当我打开这个“下载”文件时,您也发现了一个名为“下载”的独特文件。 (2认同)

Mic*_*ael 14

我想添加一些关于download-maven-plugin的东西:

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