gpt4 book ai didi

maven-3 - 工件 :install pushes the super-pom instead of the POM I define

转载 作者:行者123 更新时间:2023-12-04 12:13:51 24 4
gpt4 key购买 nike

我在 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>

调用 ant build将正确构建 JAR 文件,因此 Ant 脚本正在正确设置 POM(至少从依赖关系的角度来看)。

但是,调用 ant install导致 JAR 作为 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 相同),artifact:pom 更改为:
<artifact:pom id="jar.pom" file="ant-pom.xml"/>

没有其他变化,但 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>
...

希望这可以帮助。

关于maven-3 - 工件 :install pushes the super-pom instead of the POM I define,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4887018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com