Maven 2 使用Maven ant任务将jar安装到本地存储库

Maven 2 使用Maven ant任务将jar安装到本地存储库,maven-2,ant,jar,maven,maven-ant-tasks,Maven 2,Ant,Jar,Maven,Maven Ant Tasks,在我的ant构建结束时,我希望它调用与命令行调用相同的调用 mvn install:install-file -Dfile=my.jar -DgroupId=com.company.project -DartifactId=my_project -Dversion=1.0 -Dpackaging=jar -DgeneratePom=true 因此,它将把新构建的jar添加到另一个项目将依赖的maven存储库中 我尝试过使用,并将maven ant任务jar添加到ant构建的项目中,并将以下代码

在我的ant构建结束时,我希望它调用与命令行调用相同的调用

mvn install:install-file -Dfile=my.jar -DgroupId=com.company.project -DartifactId=my_project -Dversion=1.0 -Dpackaging=jar -DgeneratePom=true
因此,它将把新构建的jar添加到另一个项目将依赖的maven存储库中

我尝试过使用,并将maven ant任务jar添加到ant构建的项目中,并将以下代码添加到build.xml中:

<target name ="minstall" depends="jar">
  <artifact:pom id="maven_install" file="maven_install.xml" />
  <artifact:install file="${out.dir}/my_project.jar">
      <pom refid="maven_install"/>
  </artifact:install> 
</target>

但似乎遗漏了一些东西,因为它对我不起作用。首先,我在build.xml(ant构建文件)中得到一个错误

元素“artifact:pom”的前缀“artifact”未绑定。

我做错了什么。我对ant相当陌生


在一个实际问题上,关联POM文件的用途是什么?我通常不会在这个项目中使用POM,因为它是一个ant构建

我认为在ant的build.xml中使用这样的命令是没有意义的。如果您想在maven repo中安装jar文件,只需使用
mvn install
命令


除此之外,我猜您在某种程度上混淆了项目中Maven和Ant工具的用途。我建议使用Maven作为主要的构建工具。如果确实需要,可以在POM文件中配置Ant目标的调用。我个人认为,让Maven调用Ant是最好的解决方案。Maven目标(如clean、test、package、install等)非常简单易用且功能强大(我想您可以在每个Maven教程中阅读它)。

也许
Maven ant任务
jar未安装,即未安装在ant
类路径中。您可以这样做。

该消息意味着您在
build.xml
中缺少一个xmlns:artifact属性。请查看文档中的示例


至于POM文件的用途,它主要是元数据,以便maven能够正确地找出依赖关系。在真正的maven构建中,它还描述了如何构建、测试和打包。但是在您的例子中,所有这些都是由ant来完成的。

如前所述,您需要确保任务在ant脚本中定义,并且工件名称空间被理解

POM文件(在本例中)用于告诉Maven存储库您放入存储库的JAR的依赖项。POM还应该指定JAR的标识信息(groupId、artifactId、版本号、许可证等)

严格来说,您不需要外部POM,您可以在build.xml文件中定义以下信息:

<!-- Assuming tasks defined, and 'artifact' namespace exists -->
<artifact:pom id="maven_install" groupId="com.whatever" artifactId="some-jar"
              version="1.0" packaging="jar">
    <dependency groupId="..." artifactId="..." version="..."/>
    <dependency groupId="..." artifactId="..." version="..."/>
    <license name="apache" url="http://www.apache.org"/> <!-- can be omitted -->
</artifact:pom>

<target name ="minstall" depends="jar">
    <artifact:install file="${out.dir}/my_project.jar" pomRefId="maven_install"/>
</target>


当您在“minstall”任务中安装JAR时,POM应该在本地存储库中生成相应的依赖项。

Baran。也许他的项目使用的是ant,而另一个项目使用的是maven。这是正确的Raghuram我有一些新项目使用maven,还有一些旧项目使用ant。这些遗留项目必须在每次构建后将其JAR添加到本地maven repo中。我尝试使用maven调用的ant build.xml,但效果并不可靠。虽然它成功地调用了ant build.xml,但在ant构建期间它很快抛出了异常(ant构建仅通过ant就可以很好地工作)。似乎maven调用ant和ant自己调用是不同的。maven实例传递了一些属性,这是我没有要求的。虽然我仍然想解决这个问题,但我已经通过使用exec命令从ant构建文件调用批处理脚本来解决了这个问题。这个脚本调用mvn install命令来将jar文件安装到本地repo中。我已经将maven ant task jar添加到ant lib dir中,将dir添加到windows类路径中,并按照说明将代码()添加到本地pom文件中。仍然没有问题,您可以重新检查build.xml是否具有xml名称空间Raghuram是否正确这与maven ant任务有关。如果您使用内存中的POM文件,请参阅上面的安装任务中当前存在错误。工件将作为“超级pom”安装,而不是您指定的工件ID。Maven开发人员正在对此进行研究。(问题中提到)