0

我试图关注这个stackoverflow链接:

最初,我开始寻找一种比 ant 做得更好的方法,但我发现很少有方法都给我带来了问题。

  1. 我找到了一种方法,通过使用 javascript 任务来做到这一点: 如何将两个属性与数值进行比较?

但我收到以下错误消息:无法加载脚本引擎管理器(org.apache.bsf.BSFManager 或 javax.script.ScriptEngineManager)

我试图添加一个 bsf jar 并没有成功。你能给我一个例子吗..?

  1. 我试图使用<bool>以下链接中建议的元素的 ant-contrib 附加属性:http: //ant-contrib.sourceforge.net/tasks/tasks/more_conditions.html

我没有成功。你能给我一个例子吗..?

4

3 回答 3

2

以下 ANT 演示适用于我,无需安装其他库:

<project name="hello" default="demo">
    <target name="demo">
        <script language="javascript">
            var version = parseInt(project.getProperty('version'));
            project.setProperty('isGreater', version > 1);
        </script>

        <echo message="${isGreater}"/>
    </target>
</project>

您使用的是哪个版本的 ANT 和 Java?就我而言:

$ ant -version
Apache Ant(TM) version 1.8.2 compiled on December 3 2011

$ java -version
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.5) (6b24-1.11.5-0ubuntu1~12.04.1)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
于 2012-11-14T21:38:56.557 回答
1

查看您收到的第一条错误消息:

Unable to load a script engine manager (org.apache.bsf.BSFManager or javax.script.ScriptEngineManager)

这告诉您您缺少一个 Jar 文件。看<script>任务:

注意:此任务依赖于未包含在 Apache Ant 发行版中的外部库。有关详细信息,请参阅库依赖项

Library Dependency 链接会将您带到一个表。搜索单词script task。脚本任务最多需要 10 个可选 jar 才能工作。您需要的是bsf.jar

要使用Ant Contrib任务,您需要 Ant Contrib Jarfile,并使用任务链接到<taskdef>任务。这是如何做到的:

  • 下载最新版本的ant-contrib.jar
  • 在您的项目中创建一个名为的目录antlib/ant-contrib并将 ant-contrib.jar 放在该目录中。

在您build.xml想要在顶部附近执行以下操作。这可以在任何任务之外完成:

<taskdef resource="net/sf/antcontrib/antlib.xml">
   <classpath>
       <fileset dir="${basedir}/antlib/ant-contrib"/>
   </classpath>
</taskdef>

现在,您应该可以使用包含条件的ant-contrib 任务<bool>了。

于 2012-11-14T22:08:37.033 回答
0

用这个:

<scriptdef name="val1_mayorque_val2" language="javascript">
    <attribute name="val1" />
    <attribute name="val2" />
    <attribute name="resultado" />
    <![CDATA[
        if(attributes.get("val1") > attributes.get("val2"))
            project.setProperty(attributes.get("resultado"), "si");
        else
            project.setProperty(attributes.get("resultado"), "no");
    ]]>
</scriptdef>

用这个调用它:

<val1_mayorigualque_val2 val1="5" val2="3" resultado="result"/>

val1 = 值 1 val2 = 值 2

使用后,您必须测试 ${result}。如果它具有“si”值,则 val1 大于 val2。

于 2016-07-05T10:35:57.257 回答