使用ant构建工具从nexus下载jar,在Maven中自动完成

时间:2011-05-11 12:09:31

标签: ant maven jar download nexus

我有一个build.xml(基于ant),它需要来自nexus的一些jar才能复制到现有的lib文件夹中。即,当它构建时,它应该从nexus复制jar,并定义一些版本&然后在lib&中复制做汇编。 就像在maven中发生的那样,我们定义了神器&它的版本。如果更改将自动从maven repo下载。 我怎么能在基于ant的构建中做到这一点?

专家建议。

4 个答案:

答案 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}&amp;g=@{groupId}&amp;a=@{artifactId}&amp;v=@{version}&amp;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>