0

我遇到了与此正确使用 Apache Commons 配置相同的问题,即 Commons Lang 不包含在依赖项中。

尽管 eclipse 和 IDEA 都选择了它,但 ANT 的 javac 却没有。

<javac debug="true" destdir="${build.classes.dir}" srcdir="${src.dir}" includeantruntime="false">
  <classpath refid="build.classpath"/>
</javac>

我希望构建服务器能够发现这些依赖问题,如果有人错过了它们,构建就会失败。

4

3 回答 3

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

于 2012-11-07T20:19:04.917 回答
0

使用ivy管理您的构建第 3 方依赖项。

<ivy:cachepath pathid="build.classpath">
    <dependency org="commons-lang" name="commons-lang" rev="2.6" conf="default"/>
</ivy:cachepath>

默认情况下, ivy将从 Maven 中央存储库下载(和缓存)并知道传递依赖项(依赖项的依赖项)。

于 2012-11-07T20:20:17.940 回答
0

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 各有优势,但您必须重做整个构建基础架构才能使用它们。

于 2012-11-08T01:16:15.203 回答