我遇到了与Proper usage of Apache Commons Configuration相同的问题,即Commons Lang不作为依赖项。
虽然eclipse和IDEA都接受了它,但ANT的javac却没有。
<javac debug="true" destdir="${build.classes.dir}" srcdir="${src.dir}" includeantruntime="false">
<classpath refid="build.classpath"/>
</javac>
我希望构建服务器能够解决这些依赖性问题,如果有人错过了构建服务器,则会失败。
答案 0 :(得分:0)
添加如下任务
<fail message="Missing the commons lang jar dependency.">
<condition>
<not>
<available file="common-lang.jar"/>
</not>
</condition>
</fail>
答案 1 :(得分:0)
使用ivy管理您的构建第三方依赖项。
<ivy:cachepath pathid="build.classpath">
<dependency org="commons-lang" name="commons-lang" rev="2.6" conf="default"/>
</ivy:cachepath>
默认情况下,ivy将从Maven Central存储库下载(和缓存)并了解传递依赖关系(依赖关系的依赖关系)。
答案 2 :(得分:0)
Suresh Koya已接近,但有几个问题:
commons-lang.jar
实际位于当前目录中时,Suresh的方式才有效。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>
无论它叫什么,都会发现这些公共罐子。
如果您对Ivy感兴趣,我在GitHub中有一个项目,可以很容易地将Ivy添加到整个开发站点。第三方依赖管理是可行的方法。使用Ivy非常棒,因为它与Ant集成。 Maven和Gradle有其优点,但您必须重做整个构建基础架构才能使用它们。