我有一个如下的目录结构:
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>