【问题标题】:Unable to import class in ant javascript无法在 ant javascript 中导入类
【发布时间】:2012-08-07 07:10:43
【问题描述】:

我正在用 ant 编写内联 javascript。此脚本将扫描目录并输出相对于给定时间戳不是最新的文件的名称。

<script language="javascript"> <![CDATA[

  importPackage(Packages.java.lang);
  importPackage(Packages.org.apache.commons.io.FileUtils);
  importClass(Packages.java.io.File);
  importClass(Packages.java.util.Iterator);


  var path = "D:\DirectoryToScan\";
  var timeToCompare = buildServers.getProperty("buildStartTime");

  var invocationTime = new Date(timeToCompare );
  invocationTime = invocationTime.getTime();

  var directoryToSearch = new File(path );
  //CODE BREAKS HERE. NONE OF THE SUBSEQUENT LINES EXECUTE  
  var fileIterator = FileUtils.iterateFiles(directoryToSearch, new String[]{"pdf","html"} , true);


  //iterate through files and directories in builtDocs folder and return false if any of the files is older than invocation time
  while (fileIterator.hasNext()) {
     var doc = fileIterator.next();
     if ((!FileUtils.isFileNewer(doc, invocationTime))) {
        return false;
     }        
  }
]]> </script>

我注意到对 FileUtils 的第一次调用中断了。我也尝试使用一些简单的类,但它们无法访问,并且看起来 import 语句不适用于自定义类或属于此处显然无法访问的包(例如 apache.tools.ant.util.FileUtils)。

在访问它们之前,我需要在这里做些什么来正确加载这些类吗?

【问题讨论】:

  • 你是用importPackage而不是importClass导入FileUtils,这是故意的吗?
  • 不,我最初尝试使用 importClass 时遇到错误,因此将其更改为 importPackage。我猜这与 ant 没有获取正确的 FileUtils 类有关。一旦 jar 文件 commons-io-1.4.jar 被包含在 ant.cmd 中,ant 给出了 importPackage 正在用于一个类的错误,最终不得不将其更改为 importClass。

标签: java javascript ant rhino


【解决方案1】:

如果您尝试使用的类不在 Ant 自己的 lib 目录中,那么您需要为脚本指定一个类路径:

<path id="script.classpath">
  <fileset dir="lib" includes="**/*.jar"/>
</path>

<script language="javascript" classpathref="script.classpath">
  ...

【讨论】:

  • 我尝试了您的解决方案,但它导致构建失败并显示错误消息:
  • 您使用的是什么版本的 Ant?在 1.7 中添加了为脚本任务指定类路径的功能。
  • 我使用的是 1.6,所以我认为这就是我无法添加 classpathref 的原因。
  • 如果您可以选择升级到至少 1.7.1,我会推荐它,特别是如果您正在编写的构建文件要与其他人共享。使用您当前的方法,任何其他想要使用您的构建文件的人都必须以相同的方式修改他们的 Ant。如果您可以将 JAR 放入您自己的项目中并使用 classpathref 将其拉入,那么您的构建文件将适用于 Ant 的普通安装。
  • 您的担心是绝对正确的,但我正在处理一个非常大的应用程序的一部分,并且在这里升级 ant 不是一个选项。非常感谢您的帮助!
【解决方案2】:

通过将 jar 文件包含在 ant.cmd 文件中解决了该问题。

【讨论】:

    猜你喜欢
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    相关资源
    最近更新 更多