当前位置:首页 » 编程软件 » groovy编译

groovy编译

发布时间: 2022-07-05 11:53:07

㈠ 在java中使用groovy怎么搞

一种基于Java虚拟机的动态语言,可以和java无缝集成,正是这个特性,很多时候把二者同时使用,把groovy作为java的有效补充。对于Java程序员来说,学习成本几乎为零。同时支持DSL和其他简介的语法(例如闭包),使代码便于阅读。可以用groovy的动态特性来做规则引擎,在DB中维护脚本,业务变化的时候让应用系统动态加载。

如果引入groovy在java工程中?

这个很简单,不需要做别的事情,仅仅把groovy的二方包加入到pom文件中即可。例如:

<dependency>

<groupId>org.codehaus.groovy</groupId>

<artifactId>groovy-all</artifactId>

<version> 1.8 . 3 </version>

</dependency>

java和groovy混合使用的方法有几种?

1、 静态编译 ,在java工程中直接写groovy的文件,然后可以在groovy的文件中引用java工程的类,这种方式能够有效的利用groovy自身的语言特性,例如闭包;

2、通过 groovyShell 类直接执行脚本,例如:

package groovy_dsl.shell;

import groovy.lang.Binding;

import groovy.lang.GroovyShell;

public class GroovyShellEx {

public static void main(String[] args) {

Binding bind = new Binding();

bind.setVariable( "name" , "iamzhongyong" );

bind.setVariable( "age" , "25" );

GroovyShell shell = new GroovyShell(bind);

Object obj = shell.evaluate( "str = name+age;return str" );

System.out.println(obj);

}
}

3、通过 groovyScriptEngine 执行文件或者脚本,例如:

package groovy_dsl.script;

import groovy.util.GroovyScriptEngine;

public class ScriptEngine {

public static void main(String[] args) throws Exception {

GroovyScriptEngine engine = new GroovyScriptEngine( "" );

Object obj = engine.run( "src/main/java/groovy_dsl/script/script_test.groovy" , "iamzhongyong" );

System.out.println(obj);

}
}

4、通过 GroovyClassLoader 来执行,例如:

package groovy_dsl.classloader;

import groovy.lang.GroovyClassLoader;

import groovy.lang.GroovyObject;

import java.io.File;

import java.io.IOException;

public class GroovyClassLoaderEx {

public static void main(String[] args) throws Exception, IOException {

GroovyClassLoader loader = new GroovyClassLoader();

for ( int i= 0 ;i< 100 ;i++){

Class<?> clazz = loader.parseClass( new File( "src/main/java/groovy_dsl/classloader/UserDO.groovy" ));

GroovyObject clazzObj = (GroovyObject)clazz.newInstance();

clazzObj.invokeMethod( "setName" , "iamzhongyong" );

clazzObj.invokeMethod( "setSex" , "Boy" );

clazzObj.invokeMethod( "setAge" , "26" );

System.out.println(clazzObj.invokeMethod( "getAllInfo" , null ));

}

}
}

使用groovy尤其需要主要的问题?

通过看groovy的创建类的地方,就能发现,每次执行的时候,都会新生成一个class文件,这样就会导致JVM的perm区持续增长,进而导致FullGCc问题,解决办法很简单,就是脚本文件变化了之后才去创建文件,之前从缓存中获取即可。

groovy中的源码如下:

return parseClass(text, "script" + System.currentTimeMillis() + Math.abs(text.hashCode()) + ".groovy" );

这个是增加缓存的代码:

GroovyClassLoader groovyClassLoader = new GroovyClassLoader(GroovyScriptExecute. class .getClassLoader());

Class<?> groovyClass = null ;

String classKey = String.valueOf(scriptClass.hashCode());

//先从缓存里面去Class文件

if (GroovyScriptClassCache.newInstance().containsKey(classKey)){

groovyClass = GroovyScriptClassCache.newInstance().getClassByKey(classKey);
} else {

groovyClass = groovyClassLoader.parseClass(scriptClass);

GroovyScriptClassCache.newInstance().putClass(classKey, groovyClass);
}

GroovyObject go = (GroovyObject)groovyClass.newInstance();

下面这个是缓存的单例类,贴一下:
public class GroovyScriptClassCache {

private static final Map<String /*class文件的描述*/ ,Class<?>> GROOVY_SCRIPT_CLASS_CACHE = new HashMap<String,Class<?>>();

private GroovyScriptClassCache(){}

private static GroovyScriptClassCache instance = new GroovyScriptClassCache();

public static GroovyScriptClassCache newInstance(){

return instance;

}

public Class<?> getClassByKey(String key){

return GROOVY_SCRIPT_CLASS_CACHE.get(key);

}

public void putClass(String key,Class<?> clazz){

GROOVY_SCRIPT_CLASS_CACHE.put(key, clazz);

}

public boolean containsKey(String key){

return GROOVY_SCRIPT_CLASS_CACHE.containsKey(key);

}
}

为啥要每次new一个GroovyClassLoader,而不是所有的脚本持有一个?

因为如果脚本重新加载了,这时候就会有新老两个class文件,如果通过一个classloader持有的话,这样在GC扫描的时候,会认为老的类还在存活,导致回收不掉,所以每次new一个就能解决这个问题了。

注意CodeCache的设置大小

对于大量使用Groovy的应用,尤其是Groovy脚本还会经常更新的应用,由于这些Groovy脚本在执行了很多次后都会被JVM编译为native进行优化,会占据一些CodeCache空间,而如果这样的脚本很多的话,可能会导致CodeCache被用满,而CodeCache一旦被用满,JVM的Compiler就会被禁用,那性能下降的就不是一点点了。

Code Cache用满一方面是因为空间可能不够用,另一方面是Code Cache是不会回收的,所以会累积的越来越多(其实在不采用groovy这种动态更新/装载class的情况下的话,是不会太多的),所以解法一可以是增大code cache的size,可通过在启动参数上增加-XX:ReservedCodeCacheSize=256m(Oracle JVM Team那边也是推荐把code cache调大的),二是启用code cache的回收机制(关于Code Cache flushing的具体策略请参见此文),可通过在启动参数上增加:-XX:+UseCodeCacheFlushing来启用。

㈡ intellij IDEA为什么运行时不编译grails或groovy了。

楼主问题解决了嘛,我也遇到这情况,怎么解决的,跪求

㈢ groovy语言主要是用来干什么,和JAVA的区别是什么

先说区别吧:java是编译性语言,就是得编译后才能运行。groovy语言是动态语言。

Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同。
Groovy 的一个好处是,它的语法与 Java 语言的语法很相似。虽然 Groovy 的语法源于 Smalltalk 和 Ruby 这类语言的理念,但是可以将它想象成 Java 语言的一种更加简单、表达能力更强的变体。(在这点上,Ruby 与 Groovy 不同,因为它的语法与 Java 语法差异很大。)

㈣ Jaspersoft iReport 编译过程报错:Too many groovy classes were generated。

表达式写错 如把$P{变量名} 错写成 ${P变量}

㈤ 如何使用groovy console

1、静态编译,在java工程中直接写groovy的文件,然后可以在groovy的文件中引用java工程的类,这种方式能够有效的利用groovy自身的语言特性,例如闭包; 2、通过groovyShell类直接执行脚本,例如: package groovy_dsl.shell;import groovy.lang....

㈥ 如何使用gradle构建工具打包groovy脚本成jar文件

准备工作安装 gradle, groovy。
要使用gradle的groovy plugin 来打包groovy 脚本,项目结构。
目录 含义
src/main/java Java 代码
src/main/resources Java需要的资源文件
src/main/groovy Groovy代码,也可以包含Java代码
src/test/java Java 测试代码
src/test/resources 测试需要的资源文件
src/test/groovy Groovy测试需要的资源文件
src/sourceSet/java Java代码源
src/sourceSet/resources 资源文件源
src/sourceSet/groovy Groovy代码源
我们只需要编译打包groovy脚本 所以只需要创建 src/main/groovy目录结构。例子:
gradle_groovy_archive项目 结构是:
gradle_groovy_archive

创建helloWorld.groovy脚本,代码如下:
package hello
println 'Gradle compile groovy'

创建Gradle构建文件:
apply plugin: 'groovy'
apply plugin: 'maven'

group = 'com.hello'
archiveBaseName = 'hello'
version = '0.1-SNAPSHOT'

defaultTasks 'clean', 'jar'

configurations {
deployerJars
}

repositories {
mavenCentral()
}

dependencies {
//使用本地groovy环境
groovy localGroovy()
//groovy group: 'org.codehaus.groovy', name: 'groovy', version: '1.8.6'
compile fileTree( dir: 'lib', include: ['*.jar'])

deployerJars 'org.apache.maven.wagon:wagon-webdav-jackrabbit:1.0-beta-7'
}

sourceSets {
main {
groovy {
srcDir 'src/main/groovy'
}
}
}

uploadArchives {
repositories.mavenDeployer {
uniqueVersion = false
configuration = configurations.deployerJars
repository(id : repositoryId, url : repositoryUrl) {
authentication (userName : 'deployment', password : 'deployment')
proxy()
}
}
}

创建构建文件属性文件:
//根据不同情况修改
repositoryId=ND
repositoryUrl=ND
systemProp.http.proxyHost=ND
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=ND
systemProp.http.proxyPassword=ND

在命令行中 敲 gradle 运行,会自动运行 defaultTasks,clean 和 jar,会把 所有groovy下的脚本打成jar包。

㈦ 关于groovy和java混合编译,大家有没有更好

其实groovy需要挺好用,还有就是 kotlin

㈧ groovy classloader 和java一样吗

不一样,groovy相当于java的扩展,但有些指令作了改变,在groovy中的写法与java中的写法不一致,这样的代码要改写。
所以说,groovy不能百分百load java编译的class。java肯定不能load groovy编译的class.

㈨ 怎么用ant来编译groovy

用生成器进行构建
使 Groovy 中的 Ant 更迷人的核心之处是 生成器。实际上,生成器允许您很方便地在 Groovy 中表示树形数据结构,例如 XML 文档。而且,女士们先生们请看,秘密在这:使用生成器,特别是 AntBuilder,您可以毫不费力地构造 Ant 的 XML 构建文件,不必处理 XML 就可以 执行生成的行为。而这并不是在 Groovy 中使用 Ant 的惟一优点。与 XML 不同,Groovy 是非常有表现力的开发环境,在这个环境中,您可以容易地编写循环结构、条件选择代码,甚至可以利用“重用”的威力,而不必像以前那样,费力地用剪切-粘贴操作来创建新 build.xml 文件。而且您做这些工作时,完全是在 Java 平台中!
生成器的优点,尤其是 Groovy 的 AntBuilder,在于它们的语法表示完全体现了它们所代表的 XML 文件的逻辑进程。被附加在 AntBuilder实例上的方法与对应的 Ant 任务匹配;同样的,这些方法可以接收参数(以 map 的形式),参数对应着任务的属性。而且,嵌套标签(例如include 和 fileset)也定义成闭包。
构建块:示例 1
我要用一个超级简单的示例向您介绍生成器:一个叫做 echo 的 Ant 任务。在清单 4 中,我创建了一个普通的、每天都会用到的 Ant 的 echo 标记的 XML 版本(用在这不要奇怪):
清单 4. Ant 的 Echo 任务
<echo message="This was set via the message attribute"/>
<echo>Hello World!</echo>

事情在清单 5 中变得更有意思了:我用相同的 Ant 标签,并在 Groovy 中用 AntBuilder 类型重新定义了它。注意,我可以使用 echo 的属性message,也可以只传递一个期望的 String。

㈩ 什么是 Groovy

● 是一个基于 Java虚拟机的敏捷 动态语言。 ● 构建在强大的Java语言之上 并 添加了从Python,Ruby和Smalltalk等语言中学到的 诸多特征。 ●为Java开发者提供了 现代最流行的编程语言特性,而且学习成本很低(几乎为零)。 ● 支持DSL(Domain Specific Languages领域定义语言)和其它简洁的语法,让你的代码变得易于阅读和维护。 ● Groovy拥有处理原生类型,面向对象以及一个Ant DSL,使得创建Shell Scripts变的非常简单。 ● 在开发Web,GUI,数据库或控制台程序时 通过 减少框架性代码 大大提高了开发者的效率。 ● 支持单元测试和模拟(对象),可以 简化测试。 ● 无缝集成 所有已经存在的 Java对象和类库。 ● 直接编译成Java字节码,这样可以在任何使用Java的地方 使用Groovy。 Groovy 的一个好处是,它的语法与 Java 语言的语法很相似。虽然 Groovy 的语法源于 Smalltalk 和 Ruby 这类语言的理念,但是可以将它想象成 Java 语言的一种更加简单、表达能力更强的变体。(在这点上,Ruby 与 Groovy 不同,因为它的语法与 Java 语法差异很大。) Groovy 快捷方式 开始使用 Groovy 时,您会发现它使日常的编程活动变得快了许多。完成本教程之后,您会了解更多的 Groovy 语法快捷方式。不过现在只需知道以下这些要点: Groovy 的松散的 Java 语法允许省略分号和修改符。 除非另行指定,Groovy 的所有内容都为 public。 Groovy 允许定义简单脚本,同时无需定义正规的class 对象。 Groovy 在普通的常用 Java 对象上增加了一些独特的方法和快捷方式,使得它们更容易使用。 Groovy 语法还允许省略变量类型。 Groovy 的新增特性 虽然Groovy 允许省略 Java 语法中的一些元素,但也增加了一些新特性,例如本地集合、内置的正则表达式和闭包。在标准的 Java 代码中,如果想要创建一个项列表,首先要导入<code>java.util.ArrayList</code>,然后程序化地初始化 <code>ArrayList</code> 实例,然后 再向实例中添加项。在 Groovy 中,列表和映射都内置在语法中 — 无需导入任何内容。正则表达式也不需要额外的导入或对象;它们可以通过特殊的 Groovy 语法来创建。 关于闭包 对于任何 Java 开发人员来说,闭包都是一个令人兴奋的新技巧。这些神奇的构造将会包含在未来的 Java 发行版(很可能是 Java 7)中,成为正式的 Java 语法,但现在已经可以在 Groovy 中使用了。可以将闭包 想象为一个代码块,可以现在定义,以后再执行。可以使用这些强大的构造做许多漂亮的事,不过最着名的是简化迭代。使用 Groovy 之后,就有可能再也不需要编写Iterator 实例了。 动态的 Groovy 从技术上讲,Groovy 可能是您最近听说过的类型最松散的动态语言之一。从这个角度讲,Groovy 与 Java 语言的区别很大,Java 语言是一种固定类型语言。在 Groovy 中,类型是可选的,所以您不必输入String myStr = "Hello"; 来声明 String 变量,可以使用def myStr = "Hello";(分号可有可无)。 除此之外,Groovy 代码还能在运行时轻松地改变自己。这实际上意味着,能够在运行时轻松地为对象指定新方法和属性。这一编程领域称为元编程,Groovy 能够很好地支持这种编程方式。在学习本教程的过程中,您将了解到关于 Groovy 的动态性质的更多内容。现在惟一要补充的是,您会惊讶地发现,在 Groovy 会使操作 XML 或普通的 java.io.File 实例变得非常轻松。 一体两面 用Groovy 编写的任何内容都可以编译成标准的 Java 类文件并在 Java 代码中重用。类似地,用标准 Java 代码编写的内容也可以在 Groovy 中重用。所以,可以轻易地使用 Groovy 为 Java 代码编写单元测试。而且,如果用 Groovy 编写一个方便的小工具,那么也可以在 Java 程序中使用这个小工具。 Groovy是用Java实现的开源脚本语言并且和它联系紧密.它需要JDK 1.4. Groovy向Java添加了许多Ruby和Python脚本语言的特性. Groovy的特性包括动态类型(dynamic typing), 闭包(closures),简单对象导航( easy object navigation)和更加简洁的Lists和Maps语法. Groovy是由James Strachan和Bob McWhirter创造的. James还参与了许多其他开源项目的开发,其中包括Jelly, dom4j, Jaxen, Betwixt和Maven. Bob是Jaxen和Drools (一个开源的面向对象的JAVA规则引擎) 的创始人. 目前最新稳定版为Groovy1.8。

热点内容
余额宝如何加密 发布:2024-05-09 07:28:54 浏览:51
王洋java 发布:2024-05-09 07:28:11 浏览:2
小雄压缩机 发布:2024-05-09 07:28:04 浏览:359
电脑做存储服务器 发布:2024-05-09 07:23:40 浏览:187
安卓手机怎么不用开机就刷机 发布:2024-05-09 07:23:09 浏览:223
李逵捕鱼脚本 发布:2024-05-09 07:18:55 浏览:7
如何搭建邮局服务器 发布:2024-05-09 07:15:08 浏览:130
jsp文件上传和下载 发布:2024-05-09 07:09:16 浏览:410
我的世界连接不到服务器为什么 发布:2024-05-09 07:09:15 浏览:226
cf手游透视脚本 发布:2024-05-09 06:53:35 浏览:709