ant脚本中用beanshell实现简单的自定义task

ant的功能非常强大,并且具有非常好的可扩展性,可以直接嵌入脚本(script)来自定义task,并且可以支持多种脚本语言(Javascript ,Apache BSF,Groovy ,Python,beanshell,Ruby,Judoscript等等)

注意要在ant脚本使用这些script语言,必须有相应的jar包支持,参见ant说明手册中 Library Dependencies部分

下面是我用比较熟悉的beanshell脚本实现的一个自定义task。beanshell脚本基本就是java代码,对于熟悉java的人来说非常方便。

注意:
必须将beanshell的相关jar包(如:bsh-core-2.0b4.jar),放到classpath中,我的做法是将jar包复制到$ANT_HOME/lib下

它的功能很简单,task的名字为”propertylist”,有”input”,”reverse”(默认为false),”delimiter”(默认为’,’)三个属性,实现的功能是对于给定的一个以delimiter为分隔符的String,根据reverse(是否反转)的要求,生成一个新的以delimiter的反序String,如: a,b,c 反序为c,b,a

    <script language="beanshell">
        import org.apache.tools.ant.BuildException;
        import org.apache.tools.ant.Task;

        public class PropertyList extends Task {
            private java.lang.String property;
            private java.lang.String input;
            //分隔符默认为','
            private java.lang.String delimiter = ",";
            //默认不反序,返回原始input值
            private boolean reverse = false;
            public void execute() throws BuildException {
                if(this.reverse){
                    java.lang.String[] sa = this.input.split(delimiter);
                    java.lang.StringBuilder sb=new StringBuilder();
                    int i=sa.length-1;
                    do{
                        sb.append(sa[i--]);
                        if(i>=0)sb.append(this.delimiter);
                    }while(i>=0);
                    this.input=sb.toString();
                }
                System.out.print(this.input);
                getProject().setNewProperty(this.property,this.input);

            }

            public void setDelimiter(java.lang.String d) {
                if (d != null) {
                    delimiter = d;
                }
            }

            public void setInput(java.lang.String input) {
                this.input = input;
            }
            public void setProperty(java.lang.String name) {
                this.property = name;
            }

            public void setReverse(boolean reverse) {
                this.reverse = reverse;
            }
        }
        //加入名为propertylist的task定义
        project.addTaskDefinition("propertylist", PropertyList.class);
    </script>

下面的代码演示了这个自定义脚本的实际用法

    <target name="run" depends="clean.tmp" if="database.list" description="根据action参数执行所有数据库操作,action:create,drop">
        <echo>开始${action.${action}.description}数据库</echo>
        <!--清除必须的共享对象,默认不清除-->
        <property name="removeall" value="false"/>
        <local name="worklist" />
<!--使用自定义的task,根据${action.reserse}的要求,将${database.list}反序或原值输出--> 
        <propertylist property="worklist" input="${database.list}" reverse="${action.reserse}" />
        <echo>worklist=${worklist}</echo>
        <for list="${worklist}" param="server" trim="true">
            <sequential>
                <echo>数据库: @{server}</echo>
                <fail message="没有在${project.config.file}中找到前缀为@{server}的property" unless="@{server}.roles" />
                <echo>@{server}的角色${@{server}.roles}</echo>
                <antcall target="run.roles">
                    <param name="roles" value="${@{server}.roles}" />
                    <param name="server" value="@{server}" />
                </antcall>

                <antcall target="drop.lastremove">
                    <param name="server" value="@{server}" />
                </antcall>
                <antcall target="run.dblinks">
                    <param name="server" value="@{server}" />
                </antcall>
            </sequential>
        </for>
    </target>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Beanshell脚本是一种基于Java语言的脚本语言,它可以在Java虚拟机中运行。Beanshell脚本具有Java语言的所有特性,包括面向对象、异常处理、反射等。与Java相比,Beanshell脚本更加灵活和简洁,可以快速编写和调试脚本Beanshell脚本可以用于编写自动化测试脚本、批处理脚本、系统管理脚本等。 ### 回答2: BeanShell是一种脚本语言,旨在提供一种简单的方式来编写和执行Java代码。它可以在Java虚拟机中运行,并且与Java代码可以无缝集成。 Beanshell脚本具有以下特点: 1、易于学习和使用:Beanshell基于Java语法,因此对于熟悉Java的开发人员来说,学习和使用Beanshell非常简单。 2、动态类型:Beanshell支持动态类型,这意味着在脚本中可以直接使用变量而不需要事先声明其类型。 3、直接访问Java类库:Beanshell可以直接访问Java类库中的类和方法,在脚本中可以方便地使用Java类和对象。 4、交互式解释器:Beanshell还提供了一个交互式解释器,可以在其中逐行执行脚本代码,并查看结果。 5、与Java的无缝集成:Beanshell脚本可以与Java代码无缝集成,可以将Beanshell脚本嵌入到Java应用程序中,并在运行时动态执行。 6、易于扩展:Beanshell脚本可以通过自定义Java类和方法进行扩展,以满足特定应用的需求。 通过Beanshell脚本,开发人员可以更加灵活地编写和执行Java代码,因为它提供了一种简单且易于使用的脚本语言,同时还能直接访问Java类库和与Java代码无缝集成。这使得Beanshell成为在Java应用程序中进行快速原型开发、测试和调试的强大工具。无论是构建大型企业应用程序还是编写简单脚本Beanshell都是一个非常有用的脚本语言。 ### 回答3: BeanShell是一种用于Java虚拟机的小型编程脚本语言。它具有简洁、灵活的语法结构,并且可以直接在Java环境中运行。Beanshell脚本通常以.bsh为后缀名。 Beanshell脚本可以被用于多种不同的应用场景。首先,它可以作为脚本语言嵌入到Java应用程序中使用。开发人员可以通过编写Beanshell脚本来动态执行一系列Java语句,从而实现应用程序的自定义逻辑。这对于需要灵活性和自定义性的应用程序非常有价值。 其次,Beanshell脚本也可以用于Java环境的交互式编程。开发人员可以使用Beanshell脚本解释器来实时执行和测试Java代码片段,并查看实际的执行结果。这对于调试和学习Java代码非常有帮助。 另外,Beanshell还支持面向对象编程和Java的标准库。它可以轻松地调用Java类和方法,并使用Java的内建函数。这使得Beanshell脚本能够处理复杂的逻辑和数据操作。 最后,在某些情况下,Beanshell脚本可以作为一种脚本语言来代替Java编写一些简单的任务。Beanshell脚本在语法和函数方面比Java更加简洁,使得一些简单的任务可以更快速地完成。 总之,Beanshell脚本是一种灵活、易用的脚本编程语言,它可以嵌入到Java应用程序中,用于自定义逻辑、交互式编程以及简化一些简单的任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10km

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值