是否有包装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,它是各种库的常春藤定义的存储库.
只需使用Maven Ant Tasks.它们可以在普通的maven下载页面下载.