【问题标题】:Using Maven ant task to install jar to local repository使用 Maven ant 任务将 jar 安装到本地存储库
【发布时间】:2011-01-11 10:43:37
【问题描述】:

在我的ant build id的末尾喜欢它来调用相当于命令行调用

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-task 并将 maven-ant-task 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 build

【问题讨论】:

    标签: maven-2 ant jar maven maven-ant-tasks


    【解决方案1】:

    也许maven-ant-task jar 没有安装,即不在你的蚂蚁CLASSPATH 中。为此,您可以关注this instruction

    【讨论】:

    【解决方案2】:

    如前所述,您需要确保在您的 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。

    【讨论】:

    • 如果您使用内存中的 POM 文件,上述安装任务中目前存在一个错误。工件将安装为“super-pom”,而不是您指定的 artifactId。 Maven 开发人员正在为此努力。 (问题提到stackoverflow.com/questions/4887018/…
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      除此之外,我猜您在某种程度上混淆了项目中 Maven 和 Ant 工具的用途。我的建议是使用 Maven 作为您的主要构建工具。如果你真的需要,你可以在你的 POM 文件中配置 Ant 目标的调用。就个人而言,我认为让 Maven 调用 Ant 是最好的解决方案。 Maven 目标(如清理、测试、打包、安装等)非常简单易用且功能强大(我想您可以在每个 Maven 教程中阅读)。

      【讨论】:

      • 巴兰。也许他的项目使用的是 ant,而另一个项目使用的是 maven。
      • 那是正确的 Raghuram 我有一些使用 maven 的新项目和一些使用 ant 的旧项目。这些遗留项目必须在每次构建后将其 jars 添加到本地 maven 存储库中。我尝试了一个由 maven 调用的 ant build build.xml,但这并不能可靠地工作。虽然它成功调用了 ant build.xml,但它在 ant 构建期间很快抛出了异常(ant build 仅通过 ant 就可以正常工作)。似乎让 maven 调用 ant 与让 ant 自己调用不同。 maven 实例正在传递一些我没有要求的属性。
      • 虽然 id 仍然想解决这个问题,但我现在已经通过使用 exec 命令从 ant 构建文件调用批处理脚本来解决它。此脚本调用 mvn install 命令将 jar 文件安装到本地 repo。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-19
      相关资源
      最近更新 更多