写了一段检查jar是不是1.6编译的groovy脚本,没有优化,效率很差,记在这里备忘。
import java.io.*;
import java.util.*;
import java.util.zip.*;
class JarVersionChecker{
def checkJdk6(String folder){
println "begin checking ${folder}...\n\n";
File f = new File(folder);
int i = 1;
String[] files = f.list();
for(String s : files){
println "\tnow is ${i}/${files.length},${s}"
if(s.endsWith(".jar")){
if(isJdk6(folder+"/"+s)){
println "${s} is a jdk6 compiled jar."
}
}
i++;
}
println "\n\nend checking ${folder}...\n\n";
}
def isJdk6(String jarFile){
String s = getFirstClassByte(jarFile);
if(s==null||s.length()<16) return false;
String v = s.substring(14,16);
return "32".equals(v);
}
def getFirstClassByte(String jarFile){
InputStream is = getFirstClassInputStream(jarFile);
if(is == null) return "";
byte[] b = new byte[is.available()];
is.read(b);
is.close();
return byte2hex(b);
}
def getFirstClassInputStream(String jarFile){
ZipFile zf = new ZipFile(jarFile);
for(ZipEntry z : zf.entries()){
if(z.toString().endsWith("class")){
InputStream zin = zf.getInputStream(z);
return zin;
}
}
return null;
}
def byte2hex(byte[] b) {
String hs = "";
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1) {
hs = hs + "0" + stmp;
} else {
hs = hs + stmp;
}
}
return hs.toUpperCase();
}
}
//=====================================================================
def jvc = new JarVersionChecker();
println jvc.checkJdk6("d:/temp/ggg");
分享到:
相关推荐
首先,我们来看动态编译Groovy脚本。Groovy提供了GroovyShell和GroovyClassLoader两个工具,它们能够帮助我们即时编译和执行Groovy代码。GroovyShell允许在运行时执行Groovy脚本,而GroovyClassLoader则可以动态加载...
总之,Groovy脚本语言bin提供的1.6.5版本是一个全面的开发包,旨在支持开发人员在JVM上快速开发、测试和部署Groovy应用程序。无论是对于新手还是有经验的Java开发者,Groovy都提供了一种强大而灵活的工具,以提升...
Groovy是一种动态、开源的编程语言,它是Java平台上的一个重要的补充。Groovy结合了Python、Ruby和...在Java项目中引入这个库,你可以轻松地集成Groovy脚本,提升开发效率,同时得益于其动态特性和强大的库支持。
- 加载.jar或.class文件:可以通过菜单栏选择“File” -> “Open File”来打开需要反编译的jar包或单个.class文件。 - 查看源码:一旦加载成功,jd-gui会在编辑器中显示反编译后的源代码,可以逐行查看,甚至进行...
- `bin`:包含可执行脚本,如`groovy`和`groovyc`,分别用于运行Groovy脚本和编译Groovy源代码。 - `docs`:文档,包括API参考和用户指南,帮助开发者了解Groovy的特性和用法。 - `lib`:库文件,包含Groovy运行时...
安装Groovy后,开发者可以使用Groovy Shell(groovysh)进行交互式编程,或者编写Groovy脚本执行任务。Groovy的语法简洁明了,支持闭包和动态类型,使得开发效率大大提高。此外,Groovy还可以用于构建脚本、Web开发...
2. **bin**目录:包含了一系列可执行脚本,如`groovy`, `groovyc`, 和 `groovysh`,分别用于运行Groovy脚本、编译Groovy源代码和启动交互式Groovy shell。 3. **lib**目录:包含了Groovy运行时依赖的JAR文件,包括...
这个版本包括`groovy-all-1.8.6.jar`文件,这是一个集成了所有Groovy库的单一JAR文件,方便开发者在项目中引入Groovy功能,而无需管理多个依赖。 Groovy的特点之一是它的语法简洁且富有表现力,它允许开发者使用更...
1. **bin** 目录:包含了Groovy解释器和相关命令行工具,如`groovysh`(交互式Shell)和`groovyc`(编译器),用于运行和编译Groovy脚本。 2. **docs** 目录:存放Groovy的API文档和用户指南,提供了详细的语言参考...
8. **GroovyShell和CompileStatic**:GroovyShell提供了动态编译和执行Groovy脚本的能力,而`@CompileStatic`注解则可以在Groovy代码中启用静态类型检查,提高性能和代码可维护性。 9. **SpringBoot集成**:Groovy...
- `groovyc`: 编译Groovy源文件。 - **命令行选项**:`groovy`命令带有`--help`选项来展示所有选项和必需参数。 - 示例:执行脚本`groovy MyScript` - 示例:评估表达式`groovy-e "print 12.5 * Math.PI"` - ...
4. **GroovyShell**和**GroovyConsole**:这两个工具分别用于交互式地运行Groovy脚本和提供一个图形化的环境来编写、测试和运行Groovy代码。 5. **文档**:SDK中包含Groovy语言的API文档,帮助开发者理解和使用...
1. **groovy.jar**: 这是Groovy运行时库,包含了Groovy语言的类和接口,用于执行Groovy脚本和程序。 2. **groovy-all.jar**: 包含了Groovy运行时库的所有依赖,使得开发者可以轻松地在项目中添加Groovy支持。 3. **...
例如,可以通过Groovy脚本来处理动态数据,实现条件判断、循环等复杂逻辑,使报表不仅在视觉上吸引人,而且在功能上更具灵活性和可扩展性。 总结来说,`ireport`配合`jasperreports`和Groovy,为Java开发者提供了...
- **JAR文件**:包含了Groovy解释器和其他核心库,用于运行Groovy脚本。 - **文档**:可能包括API文档、用户指南和开发者参考,帮助开发者了解和使用该版本的Groovy。 - **示例代码**:可能包含一些示例脚本来展示...
当你在Android Studio中执行Gradle任务时,这个JAR文件会被加载并执行,处理构建脚本中的指令,完成编译、打包等任务。 2. `gradle-3.2.1.pom`:这是Project Object Model(POM)文件,它是Maven仓库中的标准元数据...
因为每次调用都需要解释执行,所以在性能敏感的场景下,可能需要预编译脚本或者寻找其他优化策略。 ### 结论 Java调用Jython、JRuby和Groovy提供了强大的动态编程能力,使得开发者可以在Java应用中充分利用这些脚本...
1. **bin** 目录:包含可执行脚本,如`groovy`, `groovyc`, `groovysh`等,这些是Groovy的命令行工具,用于运行Groovy脚本、编译Groovy源码和启动交互式Groovy shell。 2. **lib** 目录:包含了Groovy库和其他依赖...
在这个特定的版本中,content.jar很可能包含了Groovy编译器和运行时环境,使得Eclipse能够处理Groovy源代码。 2. **artifacts.jar**:这个文件通常包含了插件依赖的外部库和组件,这些是Eclipse插件运行所必需的。...
4. **源代码生成**:除了反编译,Procyon还可以用于生成Java源代码,这对于构建代码生成工具或者自动化脚本非常有用。 5. **API接口**:提供了易于使用的API,允许开发者将其集成到自己的工具链中,实现自定义的反...