Suresh Koya很接近,但有几个问题:
- Suresh 的方法仅在
commons-lang.jar
实际位于当前目录中时才有效。
- 如果 jar 被称为类似
commons-lang-2.6.jar
.
第一个可以通过添加<filepath>
子实体来修复<available>
。这为<available>
条件提供了搜索 jar 的目录路径。commons-lang
但是,如果用户下载时带有版本号(就像您从 Maven 存储库中下载的那样),它将不起作用。
为了解决这个问题,您需要使用类似的东西创建一个路径资源<fileset>
,然后检查您是否选择了任何版本的 commons-lang jarfile。您可以在下面看到我正在寻找任何以开头commons-lang
并具有.jar
后缀的文件。
设置资源后,我可以使用<resoucecount>
条件查看是否选择了以下版本commons-lang
:
<path id="commons-lang.path">
<fileset dir="${lib.dir}">
<incude name="commons-lang*.jar"/>
</fileset>
</path>
<fail message="Missing commons-lang Jar">
<condition>
<resourcecount refid="commons-lang.path"
when="equals" count="0"/>
</condition>
现在,如果我对 commons-lang jar 有所了解,我可以使用该<available>
条件在我的类路径中搜索特定类:
<fail message="Can't find commons-lang Jar">
<condition>
<not>
<available classname="org.apache.commons.lang.Entities">
<classpath refid="compile.classpath"/>
</available>
</not>
</condition>
</fail>
无论它叫什么,这都会找到commons-lang jar。
如果你对 Ivy 感兴趣,我在GitHub 上有一个项目,可以很容易地将 Ivy 添加到整个开发站点。第三方依赖管理是要走的路。使用 Ivy 非常棒,因为它与 Ant 集成。Maven 和 Gradle 各有优势,但您必须重做整个构建基础架构才能使用它们。