【问题标题】:Use Maven just to fetch some library jars使用 Maven 来获取一些库 jars
【发布时间】:2011-06-01 21:40:36
【问题描述】:

我们在构建过程中使用 ANT,并且没有计划在不久的将来更改它。

是否可以使用 Maven只获取常见的开源 jar 文件(例如 Log4J、SWT、JFace)并将它们放在我们项目的正确位置,这样我们就不必将它们存储在我们的版本控制中——最好不要在主目录中创建典型的 Maven 缓存?

【问题讨论】:

    标签: java maven-2 ant maven


    【解决方案1】:

    Ivy 就是这样做的, 当它自行引导时:
    http://ant.apache.org/ivy/history/latest-milestone/samples/build.xml

    <property name="ivy.install.version" value="2.0.0-beta1"/>
    <property name="ivy.jar.dir" value="lib"/>
    <property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar"/>
    <target name="resolve" unless="skip.download">
        <mkdir dir="${ivy.jar.dir}"/>
        <echo message="installing ivy..."/>
        <get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar" dest="${ivy.jar.file}" usetimestamp="true"/>
    </target> 
    

    【讨论】:

      【解决方案2】:

      不不不大家!

      如果您使用的是 Ant,使用 Maven 存储库下载 jar 依赖项的最佳方法是将 Ivy 与 Ant 一起使用。这正是 Ivy 的用途。

      安装 Ivy 并开始使用当前的 Ant 项目很简单。如果您将 Nexus 和 Artifactory 用作本地 Maven 存储库,它可以与它们一起使用。

      看看Ivy。这可能正是您想要的。

      【讨论】:

      • 或 maven ant 任务。要么使用 ant 从存储库下载工件。 maven.apache.org/ant-tasks/index.html
      • 不要使用 maven-ant-tasks 这是一个非常古老的项目,应该被弃用,它可以解决基本问题,但除此之外的任何事情都可能会出现问题
      【解决方案3】:

      有可能,你应该使用maven-ant-tasks

      尤其是它的dependencies ant 任务。使用此设置,无需安装 Maven。

      <?xml version="1.0" encoding="UTF-8"?>
      <project
        name="download-dependency"
        basedir="."
        default="download-dependency"
        xmlns:artifact="antlib:org.apache.maven.artifact.ant"
      >
        <target name="download-dependency">
      
          ... define properties ...
      
          <taskdef
            resource="org/apache/maven/artifact/ant/antlib.xml"
            uri="antlib:org.apache.maven.artifact.ant"
          />
      
          <artifact:dependencies>
            <localRepository path="${local-repo.dir}"/>
            <remoteRepository id="central" url="${repository-uri}"/>
            <dependency
              groupId="${groupId}"
              artifactId="${artifactId}"
              version="${version}"
              type="${type}"
              classifier="${classifier}"
              scope="runtime"
            />
          </artifact:dependencies>
        </target>
      </project>
      

      您应该签入项目的唯一二进制文件是maven-ant-tasks.jar

      实际上,在我们的项目中,我使用了Sonatype Nexus (documentation) Maven 存储库管理器来集中访问不同的存储库,甚至维护我们环境特有的一些二进制文件。在 Nexus 的帮助下,我只需使用 ant 的 &lt;get&gt; 任务从已知 URL 获取 maven-ant-tasks.jar。您不必使用 Nexus,但它极大地加快了构建速度,因为它将二进制文件缓存在您的开发人员机器附近。

      【讨论】:

        【解决方案4】:

        org.life.java's answer 的变体中,我不会使用mvn install

        相反,我会在 pom.xml 中添加以下位:

        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>2.1</version>
                    <executions>
                        <execution>
                            <phase>generate-sources</phase>
                            <goals>
                                <goal>copy-dependencies</goal>
                            </goals>
                            <configuration>
        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
        

        现在你只需要做mvn generate-sources,比完整的mvn install快很多,所有的依赖都会复制到指定目录。


        哦,顺便说一句,这不是Apache Ivy 的意思吗?扩展 Ant 来理解 Maven 的依赖管理?

        【讨论】:

        • 我也不了解 Apache Ivy。是否可以在此处复制某些库并在此处复制其他库?
        • @mklhmnn 我从未尝试过 Ivy。我是一个有时使用 ant 的 maven 用户,而不是相反,所以我不会成为 Ivy 的目标受众。但是这里有一个来自特性页面的引用:'因此,对于那些已经使用 Apache Ant 并且不想设置 Apache马文项目。但 Apache Ivy 并不止于此,它提供了更多强大的功能! ant.apache.org/ivy/features.html
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-07
        • 2020-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-14
        相关资源
        最近更新 更多