【问题标题】:Maven: downloading files from urlMaven:从 url 下载文件
【发布时间】:2011-02-14 01:40:18
【问题描述】:

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

【问题讨论】:

    标签: maven-2 get


    【解决方案1】:

    如果文件是 Maven 依赖项,您可以使用 Maven Dependency Plugin,它的目标是 get

    对于任何文件,你可以使用Antrun插件调用Ant的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。

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

    【讨论】:

    • +1 也可以检查 MD5 sum eg: 3921c19528d180902939b9f4c9ac92f1
    • 虽然对很多人来说可能很明显,但从命令行执行mvn process-resources 将开始下载
    • 我对这个有一些问题,我希望当我运行 mvn clean-install 时,下载的文件将包含在 jar 中当我尝试这个答案时,每当我下载时(文件不是可用)文件将被下载,但不包含在 jar 中。
    • 如何下载多个文件
    【解决方案2】:

    似乎来自 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>
    

    【讨论】:

    • 它是否像 maven-download-plugin 一样将文件缓存在本地存储库中?
    • 插件的当前版本是 2.0,否则 - 这很好用。
    【解决方案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>
    

    【讨论】:

    • 我不知道是我使用的插件版本还是什么,但是在 标记中如果我使用 什么也没发生,但是当我将其更改为 开始工作。这里的例子有帮助:maven.apache.org/guides/mini/guide-using-ant.html
    • 发生了一些非常奇怪的事情。下载完成后,我期待下载目录中有一个文件。但结果是“下载”被创建为与下载文件具有相同扩展名的文件。当我打开这个“下载”文件时,你也发现了一个名为“下载”的独特文件。
    【解决方案4】:

    我想补充几点关于 download-maven-plugin 的内容:

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

    【讨论】:

    • 究竟是哪个应用的插件?蚀?为什么是插件而不是独立的?
    • Maven 插件。单击关于的链接并查看带有示例的 README。
    • 等等,所以你下载了maven,然后还有一个叫做“maven”的maven插件?
    • 参见自述文件。这个问题是关于如何从 Maven 下载文件,这是一个允许使用 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>
    

    【讨论】:

    • 只有当 wget 本身在运行 Maven 的机器上可用时才有可能。例如,如果在 Windows 上运行,wget 将不可用。
    • @AdamBurley 它实际上在 Windows 上运行良好,无需安装 wget
    • @RuslanLópez 没有安装 wget 怎么可能工作? exec-maven-plugin 所做的只是在本地系统上执行命令。如果没有找到该程序,则该命令无法执行。
    • @AdamBurley 你是对的,但是它使用的是 Apache 库,而不是 WGet,请检查github.com/maven-download-plugin/maven-download-plugin/blob/…中的代码
    • 在这里你可以找到我的工作提交:github.com/maven-download-plugin/maven-download-plugin/issues/…
    【解决方案6】:

    您可以在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>
    

    【讨论】:

      猜你喜欢
      • 2016-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多