1

我有一个如下目录结构:

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,出现以下错误:

[错误] 无法在项目 ssui-parent 上执行目标 org.apache.maven.plugins:maven-antrun-plugin:1.6:run (create-intellij-project-files):发生 Ant BuildException:出现以下错误时执行这一行: [ERROR] java.io.FileNotFoundException: /root/ui/ssui/build.xml (No such file or directory) [ERROR] -> [Help 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如果我删除子模块它也可以工作

  • 通过在(as ) 和(as )中创建一个ui.rootdir属性并从. 同样的错误。ui/pom.xml${basedir}ui/ssui/pom.xml${basedir}/..${ui.rootdir}/build.xmlui/pom.xml

欢迎提出任何建议,但我无法重组我的目录,除非要复制的文件夹所在的位置。我确实在多模块设置中查看了 maven ${basedir} 的用法,但没有弄清楚它将如何解决我的问题。

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

4

1 回答 1

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>
于 2015-12-23T15:51:39.243 回答