ant - 在 ant 中,如何创建和使用目标“库”?
问题描述
为了消除我的 antbuild.xml
文件中的冗余,我决定将重复的目标分解为mytargets.xml
文件,将其发布到工件存储库,然后按以下方式导入:
<import>
<url url="http://mycompany.com/artifacts/mycompany.com/mytargets/1.2.3/mytargets-1.2.3.xml"/>
</import>
这种方法有两点我不喜欢:
mytargets-1.2.3.xml
永远不会出现在我可以轻松查看的磁盘上的任何位置。我绝对需要访问http://mycompany.com/artifacts才能在项目中做任何事情——它完全破坏了离线工作。
因此,我尝试创建一个setup
目标来获取本地副本mytargets.xml
并调整我<import>
以使用此本地副本。
<import file="${basedir}/antlib/mytargets/mytargets.xml"/>
但是,正如您可能已经猜到的那样,在以这种方式调整 my 后,我什至无法执行我setup
的目标,<import>
因为该文件尚不存在:
Buildfile: /home/me/myproject/build.xml
BUILD FAILED
/home/me/myproject/build.xml:265: Cannot find /home/me/myproject/antlib/mytargets/mytargets.xml imported from /home/me/myproject/build.xml
添加optional="true"
到<import>
唯一将问题推迟到依赖的第一个目标mytargets.xml
。
我查看了https://ant.apache.org/manual/Types/antlib.html,但这种方法似乎不允许您定义<target>
.
那么,有人如何在多个项目之间共享一些 ant XML?我是否已经以“一种真正的方式”去做了?或者,还有更好的方法?
解决方案
所以,在我看来,它<target>
本质上是本地的,不打算重用。另一方面,<macrodef>
似乎是为了重用。
这是“图书馆”,mymacros.xml
:
<?xml version="1.0"?>
<antlib>
<macrodef name="mymacro">
...
</macrodef>
</antlib>
这是客户,myproject/build.xml
:
<?xml version="1.0"?>
<project name="myproject">
<target name="mytarget">
<mymacro/>
</target>
<taskdef file="mymacros.xml"/>
</project>
与<import>
and不同,如果缺少<include>
,<taskdef>
不会导致构建立即失败mymacros.xml
,这使您有机会下载它。
推荐阅读
- python-3.x - 如何在 Mac OS 上下载 psycopg2
- azure - Azure AKS 监控
- latex - 文本不环绕图形,而是在 LaTeX 中将图像推出页面
- python - 可选参数在 Python 中的函数调用中保持不变
- python - ctypes结构字段中的ndpointer
- python - SPARQLWrapper - 没有响应的简单查询
- java - 尝试实现自定义命令时发生“NullPointerException”错误(Spigot 插件开发)
- logging - logback TimeBasedRollingPolicy maxHistory
- git - git status:使用绝对路径而不是相对路径
- django - 在 CreateView 中添加自定义逻辑以在满足条件时不显示添加表单