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

时间:2015-12-23 13:35:33

标签: ant maven-3 maven-module

我有一个如下目录结构:

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>

但是,当我从mvn install运行/root/ui时,出现以下错误:

  

[错误]无法执行目标org.apache.maven.plugins:maven-antrun-plugin:1.6:在项目ssui-parent上运行(create-intellij-project-files):发生了Ant BuildException:以下执行此行时发生错误:   [错误] java.io.FileNotFoundException:/root/ui/ssui/build.xml(没有这样的文件或目录)   [错误] - &gt; [帮助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.rootdirui/pom.xml)和${basedir} ui/ssui/pom.xml中创建${basedir}/..属性,在Maven2 property that indicates the parent directory尝试了解决方案(Usage of maven ${basedir} in multi-module setup 1}})并从${ui.rootdir}/build.xml引用ui/pom.xml。同样的错误。

欢迎任何建议,但我无法重构我的目录,除了要复制的文件夹所在的位置。我确实看过created a zip file,但没有弄清楚它将如何解决我的问题。

我{{3}}说明了这个问题。如果您运行mvn install,您会注意到子模块中发生错误,但它在顶级模块中运行正常(并将文件复制到我的文件夹中)

1 个答案:

答案 0 :(得分:0)

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

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>