【发布时间】:2011-06-01 21:40:36
【问题描述】:
我们在构建过程中使用 ANT,并且没有计划在不久的将来更改它。
是否可以使用 Maven只获取常见的开源 jar 文件(例如 Log4J、SWT、JFace)并将它们放在我们项目的正确位置,这样我们就不必将它们存储在我们的版本控制中——最好不要在主目录中创建典型的 Maven 缓存?
【问题讨论】:
我们在构建过程中使用 ANT,并且没有计划在不久的将来更改它。
是否可以使用 Maven只获取常见的开源 jar 文件(例如 Log4J、SWT、JFace)并将它们放在我们项目的正确位置,这样我们就不必将它们存储在我们的版本控制中——最好不要在主目录中创建典型的 Maven 缓存?
【问题讨论】:
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>
【讨论】:
【讨论】:
有可能,你应该使用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 的 <get> 任务从已知 URL 获取 maven-ant-tasks.jar。您不必使用 Nexus,但它极大地加快了构建速度,因为它将二进制文件缓存在您的开发人员机器附近。
【讨论】:
在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 的依赖管理?
【讨论】: