1、问题
一个项目原来由于全部采用ant构建,非常庞大。想换为maven来管理依赖与构建。但初期不可能一步到位,所以需要主体还是用ant,只是局部先采用maven。这时问题就来了,ant打包时需要私有maven仓库中一些jar。所以需要自动把maven中的jar资源下载下来,参与ant打包。
maven在没有pom.xml文件存在时并没有直接下载依赖的指令。
2、解决
查看资料后发现maven-ant-tasks可以做到,下面是ant的脚本。
<?xml version="1.0" encoding="UTF-8"?>
<project name="lib" default="download-libs" xmlns:artifact="urn:maven-artifact-ant">
<property name="maven.ant.tasks.jar" value="maven-ant-tasks-2.1.3.jar" />
<property name="maven.settings.file" value="/Nautilus/java/maven/apache-maven-latest/conf/settings.xml" />
<target name="download-libs" depends="-init-maven-task">
<artifact:dependencies pathId="dependencies.classpath" settingsFile="${maven.settings.file}">
<dependency groupId="org.slf4j" artifactId="slf4j-api" version="1.6.6">
<exclusion groupId="org.springframework" artifactId="spring-core" /><!--屏蔽依赖示例-->
</dependency>
</artifact:dependencies>
<move todir=".\lib">
<path refid="dependencies.classpath" />
</move>
</target>
<target name="-init-maven-task" depends="-obtain-maven-task-jar">
<available property="maven.ant.tasks.jar.exists" file="${maven.ant.tasks.jar}" />
<typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant" classpath="${maven.ant.tasks.jar}" />
</target>
<target name="-obtain-maven-task-jar">
<available property="maven.ant.tasks.jar.exists" file="${maven.ant.tasks.jar}" />
<antcall target="download-maven-jar" />
</target>
<target name="download-maven-jar" unless="maven.ant.tasks.jar.exists">
<property name="maven.ant.tasks.url" value="http://www.apache.org/dist/maven/binaries/${maven.ant.tasks.jar}" />
<get src="${maven.ant.tasks.url}" dest="${maven.ant.tasks.jar}" />
</target>
</project>
这个脚本第一次会自动下载maven-ant-tasks-2.1.3.jar,如果没有找到请登录http://www.apache.org/dist/maven/binaries/参考一下现在的版本来修改脚本。
maven.settings.file为你的maven settings.xml的位置。这样就会自动使用你配置的profile。
从仓库下载下来的jar会放到当前的lib目录中。(move todir=".\lib")
如果有多个lib目录需要copy。重复target中的artifact:dependencies与move代码块就可以了。