Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么';我的Ant主构建文件不能正常工作吗?_Java_Ant_Build - Fatal编程技术网

Java 为什么';我的Ant主构建文件不能正常工作吗?

Java 为什么';我的Ant主构建文件不能正常工作吗?,java,ant,build,Java,Ant,Build,我们有一堆Ant脚本,每个子项目一个。最后,我们希望从主构建脚本运行所有这些,并进行一些其他的内部清理来打包整个项目。每个Ant脚本都被命名为Ant.xml,并位于其项目的子目录中。每种方法都使用一个Antimport来导入一个Ant commons.xml,然后覆盖其中的一些特定目标 例如,其中一个项目覆盖编译目标,以适当地设置类路径,并将源和目标设置为1.5(ant commons使用1.4) 从理论上讲,这一切听起来都很简单。以下是主构建脚本: <project name="Reta

我们有一堆Ant脚本,每个子项目一个。最后,我们希望从主构建脚本运行所有这些,并进行一些其他的内部清理来打包整个项目。每个Ant脚本都被命名为
Ant.xml
,并位于其项目的子目录中。每种方法都使用一个Ant
import
来导入一个
Ant commons.xml
,然后覆盖其中的一些特定目标

例如,其中一个项目覆盖
编译
目标,以适当地设置
类路径
,并将
目标
设置为1.5(ant commons使用1.4)

从理论上讲,这一切听起来都很简单。以下是主构建脚本:

<project name="Retain" basedir="." default="main">
  <target name="main">
    <ant dir="SharedJava" antfile="ant.xml" target="clean"/>
    <ant dir="SharedJava" antfile="ant.xml" target="copy_current"/>
    <ant dir="GWEasySoap" antfile="ant.xml" target="clean"/>
    <ant dir="GWEasySoap" antfile="ant.xml" target="copy_current"/>
    <ant dir="RetainLib" antfile="ant.xml" target="clean"/>
    <ant dir="RetainLib" antfile="ant.xml" inheritAll="false"  target="copy_current"/>
    <ant dir="RetainIndex" antfile="ant.xml" target="clean"/>
    <ant dir="RetainIndex" antfile="ant.xml" target="copy_current"/>
    <ant dir="RetainPersist" antfile="ant.xml" target="clean"/>
    <ant dir="RetainPersist" antfile="ant.xml" target="copy_current"/>
  </target>
</project>

实际发生的情况:

前几个子项目运行良好
RetainLib
,实际上,它需要有一个对
SharedJava
的jar的引用,然后失败了,抱怨它怎么找不到它。当我删除
RetainLib
时,
RetainIndex
失败,抱怨不应该在1.4目标文件中使用泛型

在玩了一番之后,我很简单地决定,他们坚持在
antcommons
中运行编译目标,而不是覆盖的目标


为什么??我怎样才能避开这件事?(我的意思很优雅——显然我可以完全取消ant commons的使用,我打赌一切都会成功。)

我建议在任务上使用inheritAll=“false”属性。您看到的问题与主文件的basedir和其他属性导致子项目的相对路径出现问题有关

我还将取消dir=“…”属性,以确保子项目basedirs获胜

所以这就是我要做的

<project name="Retain" basedir="." default="main">
  <target name="main">
    <ant antfile="SharedJava/ant.xml" target="clean" inheritAll="false"/>
    <ant antfile="SharedJava/ant.xml" target="copy_current" inheritAll="false"/>
    <ant antfile="GWEasySoap/ant.xml" target="clean" inheritAll="false"/>
    <ant antfile="GWEasySoap/ant.xml" target="copy_current" inheritAll="false"/>
    ...
  </target>
</project>

...

每次调用都会打开一个新的ant实例。即使“SharedJava”在ant-commons.xml中做了一些重写,其他脚本也看不到它。您可以尝试在基本脚本中包含ant-commons.xml,并使用子组件中的值,因为有些值是继承的。对于不可继承的值,如路径,可以使用命名参数:

<ant antfile="${check.build.file}" target="validateXml">
   <property name="p.check_dir" location="${project.base.dir}" />
   <property name="p.dtd_dir" location="${build.data.dir}" />
</ant>


我选择在外部脚本的任务中没有依赖项,而是将依赖项表示为调用的参数。

我曾参与过类似的项目,所做的是创建一个build dir,其中放置了所有ant任务的输出,效果很好。如果没有关于构建文件内部发生了什么的附加信息,就很难提供附加的细节。很抱歉至少从结果来看,你的建议完全错误。1.删除dir并继承false后,生成立即失败,因为调用的ant.xml脚本现在对其目录感到困惑。2.当dir恢复到它的光荣和合法位置:)和inheritFalse时,构建失败,正如所描述的那样。