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
如何将嵌套参数从一个ant目标传递到另一个ant目标_Ant_Build - Fatal编程技术网

如何将嵌套参数从一个ant目标传递到另一个ant目标

如何将嵌套参数从一个ant目标传递到另一个ant目标,ant,build,Ant,Build,如何将嵌套参数从一个ant目标传递到另一个ant目标 我需要将数量可变的嵌套元素从一个目标传递到另一个目标 我有一个通用文件,其中包含了我所有项目中包含的所有标准构建任务。 我正在添加一个新的自定义任务,该任务接受数量可变的嵌套参数 作为标准,所有ant调用都是通过公共文件进行的,以确保构建样式和日志记录的一致性。 因此,新的自定义任务及其嵌套子任务将在公共脚本中定义 项目构建脚本如下所示 <target name="projectBuild"> ... <ant ta

如何将嵌套参数从一个ant目标传递到另一个ant目标

我需要将数量可变的嵌套元素从一个目标传递到另一个目标

我有一个通用文件,其中包含了我所有项目中包含的所有标准构建任务。 我正在添加一个新的自定义任务,该任务接受数量可变的嵌套参数 作为标准,所有ant调用都是通过公共文件进行的,以确保构建样式和日志记录的一致性。 因此,新的自定义任务及其嵌套子任务将在公共脚本中定义

项目构建脚本如下所示

<target name="projectBuild">
  ...
  <ant target="_newFooTaskWrapper" antfile="commonFile">
    <property name="_arg1" value="hello"/>
    <property name="_arg2" value="world"/>
    <nestedArg value="qux"/>
    <nestedArg value="baaz"/>
     ...
    <nestedArg value="AAAAA"/>
  </ant>
  ...
</target>

...
...
...
通用脚本如下所示:

<target name ="_newFooTaskWrapper">
   <echo message="Target _newFooTaskWrapper in project ${ant.project.name} from base directory ${basedir}"/>
   <echo message="arg1 = ${_arg1}"/>
   <echo message="arg2 = ${_arg2}"/>

  <taskdef name="newFooTask" classname="org.foo.NewFooTask"/>
  <typedef name="nestedArg" classname="org.foo.NewFooTask$NestedArg"/>

  <newFooTask arg1="${_arg1}" arg2="${_arg2}">
    <nestedArg value="qux"/>
    <nestedArg value="baaz"/>
     ...
    <nestedArg value="AAAAA"/>
 </newFooTask>

...

显然,这是不对的。我的问题是,正确的方法是什么

我需要将数量可变的嵌套元素从一个目标传递到另一个目标

对于“varible”,我假设您的意思是您不知道要传递给任务的嵌套元素的确切数量,所以您想要的是类似java中的
method(Object param…
,是吗

尝试这样的方法不是个好主意。Ant不是一种脚本语言,而是一种构建工具。它提供了有限的“脚本”可能性

但是,您可以通过以下两种方式进行尝试:

1,如果嵌套元素的形式是
,则不需要任何复杂的内容。只需传递另一个包含逗号分隔的值列表的属性,并在自定义ant任务中处理该列表。Java很容易将属性拆分为一个列表并对其进行处理

2,如果嵌套元素可能更复杂。。。也许你可以试试
参考

制作一个可通过id引用的类型
fooTaskParams

<fooTaskParams id="_foo_task_params">
    <nestedArg value="qux"/>
    <nestedArg value="baaz"/>
     ...
    <nestedArg value="AAAAA"/>
</fooTaskParams>

...
并将引用传递给另一个生成文件:

<ant target="_newFooTaskWrapper" antfile="commonFile">
    <property name="_arg1" value="hello"/>
    <property name="_arg2" value="world"/>
    <reference refid="_foo_task_params"/>
</ant>

和有关此方法的更多信息,并在遇到任何问题时参考SO Q&As like。

是的,作为参考传递是有效的。需要注意的是,为了让它正常工作,我必须使用类加载器引用。也就是说,我必须在项目的构建脚本typedef行中声明classloaderref属性,然后在调用中传递引用和属性,然后在公共脚本的taskdef和typedef调用中使用该classloaderref。@Michaehtessler感谢您提供的附加信息。事实上,我以前从未尝试过这一点,因此您的信息将对其他人搜索类似问题的解决方案非常有用。
<newFooTask arg1="${_arg1}" arg2="${_arg2}" paramRefId="_foo_task_params" />