我有一个客户端和一个服务器,我正在使用Ant构建.客户端在构建之前依赖于首先构建的服务器.我有所有必需的库,除了客户端中捆绑的服务器ear文件.
我在3个蚂蚁文件build.xml
,build-client.xml
和build-server.xml
.(单击任何文件名以查看它们)文件build-client.xml
并build-server.xml
包含在内,build.xml
以便它可以从中运行目标.
我遇到的问题是basedir
变量从构建文件更改为构建文件.因此,如果我build-client.xml
从build.xml
basedir变量中运行目标是相对于build.xml
.
如何在Ant脚本中多次更改basedir变量?
另外,看看这些构建文件,您是否看到了更好的方法来做我正在尝试做的事情?现在,我想我必须在同一个位置同时拥有客户端战争和服务器耳朵,然后才能制作最终的捆绑耳朵.我对此的想法可能有缺陷,因为这些脚本似乎不必要地复杂.
任务的ant文档为<import>
您提供有关如何完成此任务的信息.
根据导入的文件解析文件
假设名为imports.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>
Run Code Online (Sandbox Code Playgroud)
但是,此片段将针对imported.xml解析imported.properties basedir
,因为basedir
Ant会忽略imported.xml.使用imported.properties的正确方法是:
<!-- imported.xml -->
<project name="imported" basedir="." default="...">
<dirname property="imported.basedir" file="${ant.file.imported}"/>
<property file="${imported.basedir}/imported.properties"/>
</project>
Run Code Online (Sandbox Code Playgroud)
如上所述,${ant.file.imported}
存储构建脚本的路径,该脚本定义了名为imported的项目(简而言之,它存储了imported.xml的路径)并<dirname>
获取了其目录.此技术还允许将imported.xml用作独立文件(不在其他项目中导入).
基本上,您不能真正使用${basedir}
变量,也不能使用basedir="./../GrahamsProjClient"
项目标记中的属性,而是可以构造它:
<!-- 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>
Run Code Online (Sandbox Code Playgroud)
您可以对build-server.xml执行相同的操作,唯一需要注意的是项目名称在${ant.file.[project name]}
文件属性中有特色<dirname />
.