使用Ant的Maven

All*_*nde 18 ant maven-2

是否有包装maven的ant插件,以便我可以利用其依赖管理功能为我下载jar并将它们放在我的ant build的lib文件夹中?

我的具体问题是我正在使用Hudson的Crap4j插件,但它还没有支持Maven.由于这是一个小项目,maven是矫枉过正,但mvn dependency:copy-dependcies如果我不需要,我不想没有.

有什么建议?(除了吮吸它)

Tim*_*ien 13

有一组使用Mercury的新Ant任务.Mercury是重构代码,它将成为Maven 3与Oleg Gusakov正在实施的Maven(和OSGi)存储库交互的方式的基础.Mercury经过了充分测试,您可以立即开始在Ant项目中使用它.看一下Oleg编写的一些How-to文档:

http://people.apache.org/~ogusakov/sites/mercury-ant/mercury-ant-tasks/howto.html

这是在Ant build.xml文件中使用Mercury的简单示例.以下构建文件创建一个依赖于asm工件的verion 3.0的类路径:

<javac srcdir="src/main/java"
       destdir="target/classes">
  <classpath> 
    <deps>
      <dependency name="asm:asm:3.0"/>
    </deps>
  </classpath>
</javac>
Run Code Online (Sandbox Code Playgroud)

有许多高级功能,例如支持验证PGP签名或MD5摘要.您还可以开始定义Mercury所依赖的不同存储库.除了使用本地目录作为存储库之外,此XML还允许您定义对诸如Nexus之类的存储库的引用:

<repo id="myCentral" 
 url="http://localhost:8081/nexus/contengs/groups/public"/>
<repository dir="/my/local/repo"/>

<javac srcdir="src/main/java"
       destdir="target/classes">
  <classpath> 
    <deps>
      <dependency name="asm:asm:3.0"/>
    </deps>
  </classpath>
</javac>
Run Code Online (Sandbox Code Playgroud)

如果您需要引用需要身份验证的存储库,Mercury支持存储用户名和密码:

<repo id="myCentral" 
 url="http://localhost:8081/nexus/contengs/groups/public">
  <auth name="foo" pass="bar"/>
</repo>

<javac srcdir="src/main/java"
       destdir="target/classes">
  <classpath> 
    <deps>
      <dependency name="asm:asm:3.0"/>
    </deps>
  </classpath>
</javac>
Run Code Online (Sandbox Code Playgroud)

最引人注目的是能够从Ant构建文件将工件发布到存储库.如果您在任何规模的组织中工作,您将需要开始考虑将工件部署到像Nexus这样的存储库管理器.使用Mercury,您可以开始将工件部署到存储库管理器,而无需采用Maven.这是一个构建文件,用于定义经过身份验证的存储库并编写工件:

<repo id="myCentral" 
 url="http://localhost:8081/nexus/contengs/groups/public">
  <auth name="foo" pass="bar"/>
</repo>

<write repoid="myCentral"
       name="t:t:1.0"
       file="${basedir}/target/t.jar"/>
Run Code Online (Sandbox Code Playgroud)

Mercury已经可以使用,你可以期待Oleg的许多发展.如果你想开始使用它,最好看的地方是Oleg的操作方法页面.(注意:此信息很快将整合到权威指南中)


Dom*_*ell 11

虽然汞任务有效,但我还没有使用它们.我和他们的前任,maven-ant-tasks取得了很大的成功.如果你已经有一个POM方便的话,它们很容易上手.

<project name="blah" xmlns:artifact="antlib:org.apache.maven.artifact.ant">
  <!-- If you drop the maven-ant-tasks in ~/.ant/lib, you don't need these two bits. -->
  <taskdef uri="antlib:org.apache.maven.artifact.ant"
           resource="org/apache/maven/artifact/ant/antlib.xml"
           classpathref="ant.classpath" />
  <path id="ant.classpath">
    <fileset dir="${ant.tasks.dir}">
      <include name="*.jar" />
    </fileset>
  </path>
  <target name="resolve" description="--> retrieve dependencies with maven">
      <!-- Resolve dependencies -->
      <artifact:dependencies filesetId="dependency.fileset">
          <pom file="pom.xml" />
      </artifact:dependencies>
      <!-- Copy all dependencies to the correct location. -->
      <copy todir="${web.dir}/WEB-INF/lib">
          <fileset refid="dependency.fileset" />
          <!-- This mapper strips off all leading directory information -->
          <mapper type="flatten" />
      </copy>
  </target>
</project>
Run Code Online (Sandbox Code Playgroud)

我喜欢将我的ant任务jar放在项目中,所以我添加了taskdef和path.但是,如果你想放maven-ant-tasks-2.0.9.jar~/.ant/lib,那么你并不需要声明这个东西.我认为.


Vla*_*mir 10

如果您认为Maven在您的项目中过度,您可以/应该尝试Apache Ivy:它是一个非常强大的依赖管理库,类似于Maven.

如果您在网络上托管项目,请查看Ivy Roundup,它是各种库的常春藤定义的存储库.

  • 那怎么可能是正确的答案? (11认同)

wha*_*ley 5

只需使用Maven Ant Tasks.它们可以在普通的maven下载页面下载.

  • +1 - 它是2012年和maven-ant-tasks是我发现通过ant使用依赖管理的最佳方式.几年前我曾认真地尝试使用常春藤,但最终还是放弃了它,只是为了蚂蚁专用项目和maven-ant-tasks,如果可能的话.Ivy只是重新实现了基本的maven想法而没有额外的好处,除了一个不同的名字(这对许多人来说已经足够卖点).但是今天,更多的项目简单地(是的,简单地)使用maven并且只针对角落案例(imo)使用ant.如果代码将被(重新)使用,请尽快使用poroject. (5认同)