从包含其他模块的maven模块运行ant



我有一个如下的目录结构:

root/ui/
root/ui/pom.xml
root/ui/build.xml
root/ui/_idea/{files that I want copied are here}
root/ui/ssui/pom.xml (An inner module)

在我的POM文件中,我试图使用调用ant文件

<tasks>
    <ant antfile="build.xml" target="copyIntelliJFiles"/>
</tasks>

我的build.xml包含

<project name="ui-parent" default="copyIntelliJFiles" basedir=".">
    <target name="copyIntelliJFiles">
         <copy todir="." overwrite="true">
            <fileset dir="_idea"/>
        </copy>
    </target>
</project>

然而,当我从/root/ui运行mvn install时,我会得到以下错误:

[错误]无法执行目标org.apache.maven.plugins:maven-antrun-plugin:1.6:在项目ssui父级上运行(创建intellij项目文件):发生了Ant BuildException:执行此行时发生以下错误:[错误]java.io.FileNotFoundException:/root/ui/ssui/build.xml(没有这样的文件或目录)[错误]->[帮助1]

它似乎是从/root/ui/ssui运行它,而不是从pom.xml所在的位置运行它

调试完成

  • 如果我将pom.xml改为指向../build.xml,则错误消息变为:java.io.FileNotFoundException: /root/build.xml (No such file or directory)

  • 如果我删除/root/ui/pom.xml中的子模块定义,则路径被正确识别(但我需要子模块)

  • 如果我将build.xml引用更改为${basedir}/build.xml,我会得到相同的错误:java.io.FileNotFoundException: /root/ui/ssui/build.xml,如果我删除子模块,它也会起作用

  • 通过在ui/pom.xml(作为${basedir})和ui/ssui/pom.xml(作为${basedir}/..)中创建ui.rootdir属性并从ui/pom.xml引用${ui.rootdir}/build.xml,在Maven2属性处尝试了指示父目录的解决方案。同样的错误。

欢迎任何建议,但我不能重组我的目录,除了要复制的文件夹所在的位置。我确实看过maven${basedir}在多模块设置中的用法,但不知道它将如何解决我的问题。

我创建了一个zip文件来说明这个问题。如果运行mvn install,您会注意到子模块中出现错误,尽管它在顶级模块中运行良好(并复制我文件夹中的文件)

以下解决方案确实对我有效。它不太可能应用于其他解决方案,因为它依赖于环境变量(我们的构建已经需要它)。

root/ui/pom.xml中,我添加了

  <properties>
      <ui.basedir>${env.VCLOUD_SRC_ROOT}/ui</ui.basedir>
  </properties>
   ...
   <target>
     <copy todir="${ui.basedir}" overwrite="true">
       <fileset dir="${ui.basedir}/_idea"/>
     </copy>
     <replace file="${ui.basedir}/.idea/libraries/swfaddress_2_3.xml" token="$LOCAL_REPO$" value="${local.repo}" />
   </target>

相关内容

  • 没有找到相关文章

最新更新