最近写了些java小程序,引用了一些第三方的包,在最后编译出来用exe4j打包成exe时,发现明明很小一个程序,最后打包出来有40M之多,因为引用的第三方包里面我实际使用到的class可能并没有那么多。我就在设想如何在java程序打包的时候分析整个工程中我所写的代码的class之间的迭代引用关系,将我这个工程最终必须要使用的class从各lib包里面抽离出来,做成一个精简的jar包,里面的class能够满足我当前程序的运行就行。跪求解决方案~~~

解决方案 »

  1.   

    肯定是把JRE也打到里面了,测试方法-->找一个没有安装JDK并且没有安装JRE的电脑,点击你的.exe文件,看能否运行,如果运行成功,证明把JRE打到里面了
      

  2.   

    不是的,没打包JRE,比如,我自己写的代码打出来的jar包50k,引用的lib30M,那我打包的时候必须要将这30M的jar打包进去,其实可能这30M的jar或多或少都有引用,但是肯定每个类都引用到了,我是想如何在打包的时候,将我写的程序中引用到的lib里的class(包括这些class迭代一用的其他class)和我写的class打一个最精简的包。
      

  3.   

    GreenJVM可以精简rt.jar,至于第三方jar包,没试过,LZ可以试下
      

  4.   

    5楼的同学,可能你理解错了,其实我要的不是想要将jvm打包精简到我的exe中,我的意思是将我整个工程里面引用的lib精简,比如我在工程中引用了
    a.jar
       aa.class
       ab.class   其中ab.class引用了aa.class 
       ac.class
       ad.class    -以下的class没有我工程中的任何类引用(包括类间的迭代引用)
       ....
    b.jar
        ba.class
        bb.class   bb.class引用了bc.class
        bc.class
        ....  
    c.jar
        ca.class
        cb.class
        cd.class    cd.class引用了ca.class
        .......
    如果我在这个工程中自己写的代码直接引用了ab.class,bb.class,cd.class.那么我想在打包时,只打包我自己写的代码的class,以及aa.class,ab.class,bb.class,bc.class,ca.class,cd.class.因为在这个工程中,只需要这些class就可以正常运行我的程序,以达到祛除不必要的class进行程序精简的目的,可能我这几个lib看起来精简不了多少,但是如果工程引用的lib太多,但是实际上我自己写的代码没有引用(包括迭代引用)到所有的类,那么这个精简是不是很有必要呢不知道我这个描述同学们能看明白么
      

  5.   

    话说java真不是这样用的。要想用exe,还不如学习如何写innosetup之类。
    真的小功能还是用C++或者C#吧