`
yanhua
  • 浏览: 88673 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

检查jar文件编译版本的groovy脚本

阅读更多

写了一段检查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实现 java脚本动态编译、部署、发布;可以通过脚本直接调用dubbo接口.zip

    首先,我们来看动态编译Groovy脚本。Groovy提供了GroovyShell和GroovyClassLoader两个工具,它们能够帮助我们即时编译和执行Groovy代码。GroovyShell允许在运行时执行Groovy脚本,而GroovyClassLoader则可以动态加载...

    groovy脚本语言bin

    总之,Groovy脚本语言bin提供的1.6.5版本是一个全面的开发包,旨在支持开发人员在JVM上快速开发、测试和部署Groovy应用程序。无论是对于新手还是有经验的Java开发者,Groovy都提供了一种强大而灵活的工具,以提升...

    groovy-all

    Groovy是一种动态、开源的编程语言,它是Java平台上的一个重要的补充。Groovy结合了Python、Ruby和...在Java项目中引入这个库,你可以轻松地集成Groovy脚本,提升开发效率,同时得益于其动态特性和强大的库支持。

    jar包反编译工具,jar包反编译工具

    - 加载.jar或.class文件:可以通过菜单栏选择“File” -&gt; “Open File”来打开需要反编译的jar包或单个.class文件。 - 查看源码:一旦加载成功,jd-gui会在编辑器中显示反编译后的源代码,可以逐行查看,甚至进行...

    apache-groovy 2.4.13

    - `bin`:包含可执行脚本,如`groovy`和`groovyc`,分别用于运行Groovy脚本和编译Groovy源代码。 - `docs`:文档,包括API参考和用户指南,帮助开发者了解Groovy的特性和用法。 - `lib`:库文件,包含Groovy运行时...

    groovy-2.3.6-installer

    安装Groovy后,开发者可以使用Groovy Shell(groovysh)进行交互式编程,或者编写Groovy脚本执行任务。Groovy的语法简洁明了,支持闭包和动态类型,使得开发效率大大提高。此外,Groovy还可以用于构建脚本、Web开发...

    apache-groovy-sdk-4.0.1下载

    2. **bin**目录:包含了一系列可执行脚本,如`groovy`, `groovyc`, 和 `groovysh`,分别用于运行Groovy脚本、编译Groovy源代码和启动交互式Groovy shell。 3. **lib**目录:包含了Groovy运行时依赖的JAR文件,包括...

    groovy 1.8.6

    这个版本包括`groovy-all-1.8.6.jar`文件,这是一个集成了所有Groovy库的单一JAR文件,方便开发者在项目中引入Groovy功能,而无需管理多个依赖。 Groovy的特点之一是它的语法简洁且富有表现力,它允许开发者使用更...

    apache-groovy-sdk-2.5.8.zip

    1. **bin** 目录:包含了Groovy解释器和相关命令行工具,如`groovysh`(交互式Shell)和`groovyc`(编译器),用于运行和编译Groovy脚本。 2. **docs** 目录:存放Groovy的API文档和用户指南,提供了详细的语言参考...

    apache-groovy-sdk-3.0.8.zip

    8. **GroovyShell和CompileStatic**:GroovyShell提供了动态编译和执行Groovy脚本的能力,而`@CompileStatic`注解则可以在Groovy代码中启用静态类型检查,提高性能和代码可维护性。 9. **SpringBoot集成**:Groovy...

    groovy速查手册

    - `groovyc`: 编译Groovy源文件。 - **命令行选项**:`groovy`命令带有`--help`选项来展示所有选项和必需参数。 - 示例:执行脚本`groovy MyScript` - 示例:评估表达式`groovy-e "print 12.5 * Math.PI"` - ...

    groovy-sdk-4.0.3

    4. **GroovyShell**和**GroovyConsole**:这两个工具分别用于交互式地运行Groovy脚本和提供一个图形化的环境来编写、测试和运行Groovy代码。 5. **文档**:SDK中包含Groovy语言的API文档,帮助开发者理解和使用...

    apache-groovy-sdk-2.4.15

    1. **groovy.jar**: 这是Groovy运行时库,包含了Groovy语言的类和接口,用于执行Groovy脚本和程序。 2. **groovy-all.jar**: 包含了Groovy运行时库的所有依赖,使得开发者可以轻松地在项目中添加Groovy支持。 3. **...

    ireport(jasperreports-5.6+groovy-2.1.3)

    例如,可以通过Groovy脚本来处理动态数据,实现条件判断、循环等复杂逻辑,使报表不仅在视觉上吸引人,而且在功能上更具灵活性和可扩展性。 总结来说,`ireport`配合`jasperreports`和Groovy,为Java开发者提供了...

    groovy-binary-1.8.6

    - **JAR文件**:包含了Groovy解释器和其他核心库,用于运行Groovy脚本。 - **文档**:可能包括API文档、用户指南和开发者参考,帮助开发者了解和使用该版本的Groovy。 - **示例代码**:可能包含一些示例脚本来展示...

    Android studio 配置gradle 2.3.1 插件所需pom、jar文件

    当你在Android Studio中执行Gradle任务时,这个JAR文件会被加载并执行,处理构建脚本中的指令,完成编译、打包等任务。 2. `gradle-3.2.1.pom`:这是Project Object Model(POM)文件,它是Maven仓库中的标准元数据...

    java调用脚本语言笔记(jython,jruby,groovy)

    因为每次调用都需要解释执行,所以在性能敏感的场景下,可能需要预编译脚本或者寻找其他优化策略。 ### 结论 Java调用Jython、JRuby和Groovy提供了强大的动态编程能力,使得开发者可以在Java应用中充分利用这些脚本...

    apache-groovy-sdk-2.5.0-beta-2.zip

    1. **bin** 目录:包含可执行脚本,如`groovy`, `groovyc`, `groovysh`等,这些是Groovy的命令行工具,用于运行Groovy脚本、编译Groovy源码和启动交互式Groovy shell。 2. **lib** 目录:包含了Groovy库和其他依赖...

    eclipse groovy-2.9.1的离线安装包

    在这个特定的版本中,content.jar很可能包含了Groovy编译器和运行时环境,使得Eclipse能够处理Groovy源代码。 2. **artifacts.jar**:这个文件通常包含了插件依赖的外部库和组件,这些是Eclipse插件运行所必需的。...

    procyon-decompiler反编译

    4. **源代码生成**:除了反编译,Procyon还可以用于生成Java源代码,这对于构建代码生成工具或者自动化脚本非常有用。 5. **API接口**:提供了易于使用的API,允许开发者将其集成到自己的工具链中,实现自定义的反...

Global site tag (gtag.js) - Google Analytics