Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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
Xml 链接Ant构建文件_Xml_Ant - Fatal编程技术网

Xml 链接Ant构建文件

Xml 链接Ant构建文件,xml,ant,Xml,Ant,我有一个客户端和一个服务器,我正在用Ant构建。客户端依赖于先构建的服务器,然后才能构建。除了捆绑在客户机中的服务器ear文件之外,我拥有所有必需的库 我创建了3个ant文件,然后。(单击任意文件名查看它们)文件和包含在中,以便它可以从中运行目标 我遇到的问题是,basedir变量在构建文件之间变化。因此,如果我从basedir中运行targets,则变量是相对的 如何在Ant脚本中多次更改basedir变量 另外,看看这些构建文件,您是否看到更好的方法来完成我正在尝试的工作?现在我在想,我必须

我有一个客户端和一个服务器,我正在用Ant构建。客户端依赖于先构建的服务器,然后才能构建。除了捆绑在客户机中的服务器ear文件之外,我拥有所有必需的库

我创建了3个ant文件,然后。(单击任意文件名查看它们)文件和包含在中,以便它可以从中运行目标

我遇到的问题是,
basedir
变量在构建文件之间变化。因此,如果我从basedir中运行targets,则变量是相对的

如何在Ant脚本中多次更改basedir变量


另外,看看这些构建文件,您是否看到更好的方法来完成我正在尝试的工作?现在我在想,我必须让客户端war和服务器ear位于同一位置,然后才能制作最终的捆绑ear。不过,我的想法可能有缺陷,因为这些脚本似乎不必要地复杂。

我注意到ant的一个问题是,我无法让变量按照我想要的方式进行更改

解决方案是让ant从命令行为您想要执行的每个目标运行,这样就不用执行命令行语句,例如

ant target1 target2


我不得不从命令行按顺序执行目标调用
anttarget1
ant target2

所以我选择将这些ant调用放在python脚本中,这只会使
os.system(“”)调用,其中我的命令行语句将位于引号内。bash也可以这样做

这是ant为每个目标使用适当变量的唯一方法,如果这些变量具有相同的名称,

for
任务将为您提供有关如何完成此任务的信息

根据导入的文件解析文件

假设名为import.xml的主生成文件导入文件系统中任意位置的一个生成文件imported.xml,imported.xml从imported.properties读取一组属性:

<!-- importing.xml -->
<project name="importing" basedir="." default="...">
  <import file="${path_to_imported}/imported.xml"/>
</project>

<!-- imported.xml -->
<project name="imported" basedir="." default="...">
  <property file="imported.properties"/>
</project>
如上所述,
${ant.file.imported}
存储构建脚本的路径,该脚本定义了名为imported的项目(简而言之,它存储到imported.xml的路径),并且
获取其目录。此技术还允许将imported.xml用作独立文件(而不必在其他项目中导入)

基本上,您不能在项目标记中真正使用
${basedir}
变量,也不能使用
basedir=“../../grahamsprrojclient”
属性,但您可以构造它:

<!-- build-client.xml -->
<project name="GPClient" default="dist" >

  <dirname property="client.root.dir" file="${ant.file.GPClient}"/>
  <property name="real.basedir" value="${client.root.dir}/../GrahamsProjClient"/>

  <!-- Then from then on, replace ${basedir} with ${real.basedir} -->
  ...
</project>

...

您也可以对build-server.xml执行同样的操作,唯一需要注意的是项目名称出现在
${ant.file.[project name]}

文件属性中,因为它破坏了依赖项检查,所以我的常规规则是不使用或不在正常的构建过程中使用。我们让一位开发人员将build.xml分解成七个独立的构建文件,这是由于不断调用
,或。(实际上,这些都是Maven存储库管理器,但Ivy与它们配合得非常好。)

然后,需要将
ivy.jar
导入到项目中,并获取
ivysettings.xml
文件以指向Maven ivy存储库服务器

如果使用Subversion作为版本控制系统,则可以执行以下操作:

  • 创建一个包含Ivy.jar的Ivy项目,以及一个为您设置一切的XML文件。我有一个你可以看的。XML文件名为
    ivy.tasks.XML
  • 然后在项目中,使用
    svn:externals
    导入此项目
  • build.xml
    中,您需要做两件事:
    • 实体中添加常春藤名称空间
    • 使用
      任务导入包含所有设置的常春藤XML文件
优点是,更改您的常春藤项目将自动更改与常春藤交互的所有项目。例如,如果更改常春藤服务器的URL,或者需要重新定义常春藤缓存目录

这样做之后,您只需创建一个定义依赖项的
ivy.xml
文件,并使用
检索所需的第三方JAR。这将包括客户端需要的服务器jar

<!-- imported.xml -->
<project name="imported" basedir="." default="...">
  <dirname property="imported.basedir" file="${ant.file.imported}"/>
  <property file="${imported.basedir}/imported.properties"/>
</project>
<!-- build-client.xml -->
<project name="GPClient" default="dist" >

  <dirname property="client.root.dir" file="${ant.file.GPClient}"/>
  <property name="real.basedir" value="${client.root.dir}/../GrahamsProjClient"/>

  <!-- Then from then on, replace ${basedir} with ${real.basedir} -->
  ...
</project>