在没有安装Groovy的环境编译和打包Groovy脚本

在本文中将会涉及到:

使用 CliBuilder 来实现对命令行选项的支持,脚本执行时所需要的参数将通过命令行选项的方式传递。 使用
GroovyClassLoader 加载 Groovy class。 使用 AntBuilder 来构建 Jar 包。

开始之前

关于本文

也许您写了一些有趣或实用的 Groovy 脚本并希望与您的朋友分享,可是您并不想强迫他们安装 Groovy,所以您也许想要做一个小工具让您的朋友们能够用它编译您的 Groovy 脚本并且生成一个可执行的 Jar 包。本文将介绍如何制作一个小工具让您的 Groovy 脚本能够在没有安装 Groovy 的环境下也能被即时编译和打包成为可执行的 Jar,并通过此过程介绍 Groovy 的一些有趣的特性。

在本文中,我们将设计并实现一个命令行工具,并通过它来完成对 Groovy 脚本的即时编译和打包。我们将使用 CliBuilder 来实现程序对命令行的处理;使用 AntBuilder 来处理打包的问题;使用 ">FileSystemCompiler 类来实现对 Groovy 脚本文件的编译。

目标

通过本示例了解 Groovy 中 CliBuilder 的使用方法,以及 AntBuilder 在 Groovy 中的应用。

先决条件

Eclipse IDE Groovy
plugin for Eclipse Apache Ant Java library(您可以在这里找到下载地址 http://ant.apache.org/bindownload.cgi)

系统要求

由于 Eclipse IDE 和 Groovy 语言都是跨平台的,所以您可以在任何平台上编写本示例中的程序,并将它运行在任何平台上。

利用 CliBuilder 设计命令行程序

用 Groovy 来编写脚本是开发跨平台工具的一个不错的途径。随着脚本复杂程度的不断增长,您可能需要在您的脚本中处理命令行选项。而处理这些选项或参数并且根据情况显示相应的帮助信息可能会是件麻烦事。 Groovy 捆绑了 Apache Commons CLI 库作为它的一部分,然而它同时也提供了一个使用起来简单得多的 CliBuilder。那么,接下来我们看看该如何使用它。

为程序设置命令行选项

清单 1. 创建 CliBuilder 实例及定义命令行选项

// 创建 CliBuilder 实例,并定义命令行选项 def cmdline = new CliBuilder(usage: 'GroovyPackman -[chflms] [date] [prefix]') cmdline.h( longOpt: 'help', required: false, 'show usage information' ) cmdline.d( longOpt: 'destfile', argName: 'destfile', required: false, args: 1, 'jar destintation filename' ) cmdline.m( longOpt: 'mainclass', argName: 'mainclass', required: true, args: 1, 'fully qualified main class' ) cmdline.c( longOpt: 'groovyc', required: false, 'Run groovyc' ) cmdline.s( longOpt: 'sourcepath', argName: 'sourcepath', required: true, args: 1, 'fully path to the mainclass. Must be specified with .groovy file path when -c option used.')

在以上代码段中,我们首先创建 CliBuilder 的实例。CliBuilder 拥有一个叫做 Usage 的属性,可以用它来显示程序的使用说明等信息。在这里,它作为参数传递给构造函数将可以告诉程序的使用者有哪些选项可以使用。接着,我们使用名字为一个字母的方法来定义命令行选项,longOpt 属性允许选项被指定为 -h 或 --help 均可。argName 属性用来指定在使用说明中显示的选项的参数名。而 args 属性用来指定选项所需的参数个数。required 属性用来告诉命令行解析器当前选项是否是必须的。函数中最后一个参数用来指定该选项的描述信息。

Groovy 语言中闭包(closure)是一个非常重要的概念,它更象是一个“代码块”或者方法指针,代码在某处被定义然后在其后的调用处执行。

Groovy 为我们提供了 with 方法,它允许闭包被对象的引用本身所调用,这是通过把对象赋值给闭包的 delegate 属性并且作为参数传递给闭包来实现的。使用 with 方法有时可以帮助我们减少代码量,在此我们看看使用 with() 方法定义各项参数与代码清单 1 所使用的方法有何不同。

清单 2. 使用 with 方法后的代码

def cmdline = new CliBuilder(usage: 'GroovyPackman -[chflms] [date] [prefix]') // 使用 Object 上的 with 方法省去 cmdline 对象的限定 cmdline.with { h longOpt: 'help', required: false, 'show usage information'; d longOpt: 'destfile', argName: 'destfile', optionalArg: true, args: 1, 'jar destintation filename'; m longOpt: 'mainclass', argName: 'mainclass', required: true, args: 1, 'fully name of main class'; c longOpt: 'groovyc', required: false, 'Run groovyc'; s longOpt: 'sourcepath', argName: 'sourcepath', required: true, args: 1, 'fully path to the mainclass. Must be specified with .groovy file path when -c option used.'; }

这样,我们为程序设置了命令行入口。其中:

使用“-h “或”--help”来显示使用帮助信息。 使用”-d”或”--destfile”来目标文件名用来作为生成的 .jar 文件名,这是一个可选项。 用”-m”或”--mainclass”来指定主类的全名,未指定”-d”选项时将被作为目标 Jar 包的文件名。 通过使用"-c"选项来控制是否执行编译过程,是一个可选项。 当命令行中指定了"-c"时,"-s"或"--sourcepath"需指向要被编译的脚本(包)所在的目录;未指定"-c"时需指向 .class 文件所在的目录。

在本文的最后一章中您将看到通过这个命令行工具(在本文中被命名为:GroovyPackman)编译打包脚本的实例。

时间: 2024-09-20 19:39:36

在没有安装Groovy的环境编译和打包Groovy脚本的相关文章

关于安装opengl开发环境后编译出现“无法解析的外部符号”的问题

问题描述 关于安装opengl开发环境后编译出现"无法解析的外部符号"的问题 本人使用的是win7 64位家庭普通版系统,以及visual studio 2012,照网上说明安装了glew,freeglut,glut后 输入一段代码之后,函数什么的都可以正常变色 代码什么的都是蓝宝书上边的应该没有什么问题,粘贴一部分上来: glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPT

如何在源码包编译安装的 LEMP 环境下开启 OpenSSL 功能

如何在源码包编译安装的 LEMP 环境下开启 OpenSSL 功能 Hello,大家好!我是--邪恶君子! 今天,给大家分享一下解决源码包编译安装 LEMP 环境下开启 OpenSSL 功能问题的过程.前几天,在访问页面时,突然报错,要求开启 openssl 功能.那怎么办呢,首先想到的是 yum 安装,但是,安装后还是没解决,因为 LEMP 的环境是源码包编译安装的,所以,还需要编译安装 openssl. 经过邪恶不懈的努力,终于找到了解决办法,而且真的成功了,下面就给大家分享一下! 首先,要

CentOS7编译安装新版LNMP环境_Linux

由于公司要求需要最新版的ZABBIX2.4.4需要最新版的系统CENTOS7和新版的LNMP环境,所以本人摸索着使用新版的环境搭建了LNMP系统,环境版本如下: 系统:CentOS 7 x86_64 NGINX:nginx-1.7.12 数据库:mariadb-10.0.13 PHP:php-5.5.23 首先做一些准备工作,先把centos7的防火墙更换成iptables,可以参见如下链接 centos7防火墙设置iptables 修改成iptables之后就可以清空iptables里面的过滤

Groovy脚本的即时编译和打包

在本文中将会涉及到: 使用 CliBuilder 来实现对命令行选项的支持,脚本执行时所需要的参数将通过命令行选项的方式传递. 使用 GroovyClassLoader 加载 Groovy class. 使用 AntBuilder 来构建 Jar 包. 开始之前 关于本文 也许您写了一些有趣或实用的 Groovy 脚本并希望与您的朋友分享,可是您并不想强 迫他们安装 Groovy,所以您也许想要做一个小工具让您的朋友们能够用它编译您的 Groovy 脚本并且生成一个可执行的 Jar 包.本文将介

即时编译和打包您的 Groovy 脚本(转)

  在本文中将会涉及到: 使用 CliBuilder 来实现对命令行选项的支持,脚本执行时所需要的参数将通过命令行选项的方式传递. 使用 GroovyClassLoader 加载 Groovy class. 使用 AntBuilder 来构建 Jar 包. 开始之前 关于本文 也许您写了一些有趣或实用的 Groovy 脚本并希望与您的朋友分享,可是您并不想强迫他们安装 Groovy,所以您也许想要做一个小工具让您的朋友们能够用它编译您的 Groovy 脚本并且生成一个可执行的 Jar 包.本文将

scala + intellij idea 环境搭建及编译、打包

大数据生态圈中风头正旺的Spark项目完全是采用Scala语言开发的,不懂Scala的话,基本上就没法玩下去了.Scala与Java编译后的class均可以运行于JVM之上,就好象.NET中F#与C#的关系.下面进入正题: 1.下载scala sdk http://www.scala-lang.org/download/ 直接到这里下载sdk,目前最新的稳定版为2.11.7,下载后解压就行 (后面在intellij idea中创建.scala后缀源代码时,ide会智能感知并提示你设置scala

如何在Mac OS X上安装 Ruby运行环境

对于新入门的开发者,如何安装 Ruby和Ruby Gems 的运行环境可能会是个问题,本页主要介绍如何用一条靠谱的路子快速安装 Ruby 开发环境. 此安装方法同样适用于产品环境!系统需求首先确定操作系统环境,不建议在 Windows 上面搞,所以你需要用: Mac OS X 任意 Linux 发行版本(Ubuntu,CentOS, Redhat, ArchLinux ...) 强烈新手使用 Ubuntu 省掉不必要的麻烦!以下代码区域,带有 $ 打头的表示需要在控制台(终端)下面执行(不包括

CentOS安装OpenLiteSpeed服务器环境步骤详解

第一.部署OpenLiteSpeed服务器准备工作   根据官方的说法,我们可以在CentOS 5,6,7版本中是官方认可可运行的,也有用户在Debian Wheezy版本中测试通过,这里我们还是先根据官方的指导在CentOS环境中部署,后期老蒋在单独在我比较喜欢的占用资源较小灵活的Debian环境,好歹我们先看看是否可以成功,体验性能如何再深入挖掘.   第二.更新系统环境及系统源    代码如下 复制代码 yum update   这里我们为了确保系统获取的最新源版本,所以我们需要更新Cen

虚拟机安装OSX10.11.4+编译libVLC和VLC源码

一.安装虚拟机 虚拟机使用的是VMware Workstation 12 Pro  12.1.0 build-3272444 参考:http://jingyan.baidu.com/article/3f16e003eac66e2591c103e0.html 虚拟机设置 内存 4G 处理器数量2每个处理器核心数量2,虚拟化引擎中勾上"虚拟化Intel VT-x 或AMD-V/RVI(V)"和"虚拟化CPU性能计数器" 硬盘60G,原先分配40G,在升级系统和XCode