GKe*_*lly 7 maven-3 maven-ant-tasks
我在Ant文件中定义了一个POM,构建工作正常,从存储库中提取正确的工件,然而,工件:安装任务推送到'super-pom'而不是我指定的pom
我使用以下POM文件
<project name="my-proj" default="build"
xmlns:artifact="antlib:org.apache.maven.artifact.ant">
<!-- Define the Maven tasks -->
<path id="mvn.classpath"
path="${env.MAVEN_HOME}/lib/maven-ant-tasks-2.1.1.jar" />
<typedef resource="org/apache/maven/artifact/ant/antlib.xml"
uri="antlib:org.apache.maven.artifact.ant"
classpathref="mvn.classpath" />
<target name="set-deps">
<artifact:pom id="jar.pom" packaging="jar"
groupId="com.me" artifactId="my-proj"
version="1.0-SNAPSHOT">
<dependency groupId="commons-logging"
artifactId="commons-logging"
version="1.1.1"/>
</artifact:pom>
<artifact:dependencies filesetId="project.jar.files"
pomRefId="jar.pom"/>
</target>
<target name="compile" depends="set-deps">
<mkdir dir="${basedir}/output/casses"/>
<javac srcdir="${basedir}/src"
destdir="${basedir}/output/classes"
classpathref="project.jar.files" />
</target>
<target name="build" depends="compile">
<jar destfile="output/${project.name}.jar"
basedir="${basedir}/output/classes"/>
</target>
<target name="install" depends="build">
<echo message="Installing JAR file - ${project.name}.jar"/>
<echo message=" groupId - ${jar.pom.groupId}"/>
<echo message="artifactId - ${jar.pom.artifactId}"/>
<echo message=" version - ${jar.pom.version}"/>
<artifact:install file="${basedir}/output/${project.name}.jar"
pomRefId="jar.pom"/>
</target>
</project>
Run Code Online (Sandbox Code Playgroud)
调用ant build将正确构建JAR文件,因此Ant脚本正在正确设置POM(至少从依赖性的角度来看).
但是,调用ant installJAR的结果作为super-pom版本1.0安装在本地存储库中.安装第二次失败,因为存储库中已存在完整版本(1.0,没有SNAPSHOT),只能覆盖SNAPSHOT版本.
我在POM上设置了groupId/artifactId/version.他们怎么没被捡起来?我已尝试在安装任务上再次设置这些(想想可能有任务的未记录的属性),但此任务不接受这些属性.
实际上,正确的值将在安装之前显示,因此POM知道它的groupId/artifactId/version,但仍然无法使用这些设置进行安装.
顺便说一句,如果有任何帮助,我使用2.1.1 maven-ant-tasks JAR文件,但我安装的Maven版本是3.0.2(不确定任务是否对Maven Jars进行外部调用,或者是否功能是ant任务Jar的内部功能.
PS.我已经尝试将依赖项放在外部POM文件中,这似乎有效,pom.xml除了依赖项和groupId/artifactId/version(与上面定义的内存中的pom相同)之外什么都没有,工件:pom更改为:
<artifact:pom id="jar.pom" file="ant-pom.xml"/>
Run Code Online (Sandbox Code Playgroud)
没有其他改变,但ant install现在正常工作.这是maven-ant-tasks中的一个错误还是我缺少的东西?
我现在在哪里使用Ant,我想避免在构建过程中提供更多文件进行管理.如果我需要,但我宁愿避免它!
好的,我代替等待解决这个问题的方法来解决这个问题.我在安装中写出了POM,然后使用基于磁盘的POM进行安装:
...
<target name="install" ...
...
<artifact:writepom pomRefId="jar.pom" file="${basedir}/output/${project.name}-pom.xml" />
<artifact:pom id="disk-based.pom" file="${basedir}/output/${project.name}-pom.xml" />
<artifact:install file="${basedir}/output/${project.name}.jar"
pomRefId="disk-based.pom"/>
</target>
...
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.