使用Maven只是为了获取一些库jar

时间:2010-12-31 06:53:15

标签: java maven-2 ant maven

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

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

4 个答案:

答案 0 :(得分:18)

否否否所有人!

如果您正在使用Ant,那么使用Maven存储库下载jar依赖项的最佳方法是使用Ivy和Ant。这正是Ivy的用途。

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

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

答案 1 :(得分:6)

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的依赖关系管理?

答案 2 :(得分:4)

可能,您应该使用maven-ant-tasks

特别是它的dependencies蚂蚁任务。使用此设置不需要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 Nexusdocumentation)Maven存储库管理器来集中访问不同的存储库,甚至维护一些特定于我们环境的二进制文件。借助Nexus&#39;帮助我只使用已知网址中的ant maven-ant-tasks.jar任务获取<get>。您不必使用Nexus,但它大大加快了构建速度,因为它可以将二进制文件缓存在开发人员的计算机附近。

答案 3 :(得分:2)

常春藤这样做, 当它引导自己:
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>