失败ANT构建缺少依赖关系

时间:2012-11-07 20:02:58

标签: java ant

我遇到了与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>

我希望构建服务器能够解决这些依赖性问题,如果有人错过了构建服务器,则会失败。

3 个答案:

答案 0 :(得分:0)

添加如下任务

<fail  message="Missing the commons lang jar dependency.">
  <condition>
     <not>  
     <available file="common-lang.jar"/>
     </not>
  </condition>
</fail>

Ant失败任务链接:https://ant.apache.org/manual/Tasks/fail.html

答案 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的方式才有效。
  • 如果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>

无论它叫什么,都会发现这些公共罐子。

如果您对Ivy感兴趣,我在GitHub中有一个项目,可以很容易地将Ivy添加到整个开发站点。第三方依赖管理是可行的方法。使用Ivy非常棒,因为它与Ant集成。 Maven和Gradle有其优点,但您必须重做整个构建基础架构才能使用它们。