我有一个build.xml(基于ant),它需要来自nexus的一些jar才能复制到现有的lib文件夹中。即,当它构建时,它应该从nexus复制jar,并定义一些版本&然后在lib&中复制做汇编。 就像在maven中发生的那样,我们定义了神器&它的版本。如果更改将自动从maven repo下载。 我怎么能在基于ant的构建中做到这一点?
专家建议。
答案 0 :(得分:7)
我已经将此线程中列出的示例更进一步,并创建了一个macrodef来清理一些东西以便重复使用。请参阅下文,了解从nexus下载两个工件(一个快照,一个版本)。
<project>
<target name="get-all">
<mkdir dir="lib" />
<nexus-get
groupId="foo.bar"
artifactId="some-artifact"
version="1.0.28"
repo="releases"
extension="jar"
dest="lib"
/>
<nexus-get
groupId="foo.bar"
artifactId="another-artifact"
version="1.0.0-SNAPSHOT"
repo="snapshots"
extension="jar"
dest="lib"
/>
</target>
<macrodef name="nexus-get">
<attribute name="groupId"/>
<attribute name="artifactId"/>
<attribute name="version"/>
<attribute name="repo"/>
<attribute name="extension"/>
<attribute name="dest"/>
<sequential>
<get src="http://my-nexus:9999/nexus/service/local/artifact/maven/redirect?r=@{repo}&g=@{groupId}&a=@{artifactId}&v=@{version}&e=@{extension}" dest="@{dest}/@{artifactId}.@{extension}" usetimestamp="true" />
</sequential>
</macrodef>
答案 1 :(得分:4)
您可能会对Ivy感兴趣。它是Ant的依赖项管理的子项目。它非常适合您的情况,因为它可以读取Maven存储库并提供用于下载已发布工件的Ant任务,从它们构建类路径等。它支持您获取最新版本的依赖项的用例,如果您将其配置为询问对于模块的“latest.release”修订版。
答案 2 :(得分:3)
虽然有一些特定的方法来组合ant和maven最简单的方法(如果你知道nexus URL和你的工件参数来构建下载URL)只是使用ant Get任务。
<project name="MyProject" default="resolveDependencies" basedir=".">
<target name="resolveDependencies">
<mkdir dir="lib" />
<get src="http://search.maven.org/remotecontent?filepath=log4j/log4j/1.2.9/log4j-1.2.9.jar" dest="lib/log4j-1.2.9.jar" usetimestamp="true" />
</target>
</project>
答案 3 :(得分:0)
也许使用Maven Ant Tasks。
如http://maven.apache.org/ant-tasks/examples/dependencies.html所示 可以列出ant中的依赖项,也可以复制它们
我认为使用FileSets和版本映射器部分可以满足您的需求
您可以使用is filesetId,它将为您提供可用于将文件复制到特定位置的文件集引用。例如,要使用您的依赖项填充WEB-INF / lib,您可以使用以下命令:
<artifact:dependencies filesetId="dependency.fileset" useScope="runtime">
<dependency groupId="junit" artifactId="junit" version="3.8.2" scope="test"/>
</artifact:dependencies>
<copy todir="${webapp.output}/WEB-INF/lib">
<fileset refid="dependency.fileset" />
<!-- This mapper strips off all leading directory information -->
<mapper type="flatten" />
</copy>