让我们写的java程序像exe(..bat)一样运行

来源:互联网 发布:云海螺英语怎么样知乎 编辑:程序博客网 时间:2024/05/21 06:37

原文链接:http://huangzhir.iteye.com/blog/1883209


java 运行一个程序,用 java 包名.类名 

如下 

java com.java.Test


这是建立在java 环境变量(PATH,CLASSPATH)已经配置好了,而且没有依赖包的情况下。 

要了解环境变量,就要来说JDK,JRE,JVM的关系。 
引用 http://www.myexception.cn/program/1050343.html 
引用
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
JDK,JRE与JVM浅析(整理) 
使用Java -version是如何找到版本的:它是从C:\Program Files\Java\{jre文件夹名}\lib\i386中的jvm.cfg中读取的。 

JDK(java develop kit ,java开发套件),JRE(java runtime environment,java运行时环境),JVM(java virtual machine,java虚拟机) 
     JDK 
     ++ 
        |-----jre 
                ++ 
                  |-------jvm 
                  |------- 
      jre只是jdk的一个部分,我们只要拥有了一份jdk就可以进行java程序开发了,而顾名思义,jre是java运行的时候所依赖的平台,jvm则更只是jre的一个部分,jre除了虚拟机外还提供了众多链接库,这些库会被jvm在运行时调用。 
      我们会发现java_home/下有一个bin文件夹和一个jre文件夹,而jre文件夹下也有一个bin文件夹,它们一样吗?显然不一样。 
java_home/bin中的工具是sun公司提供给我们一些工具,如java.exe,javac.exe,而jre/bin下的工具是运行时所需的,于是我们可以发现java_home/bin下有一个javac.exe,而jre/bin下肯定没有javac.exe,这是很容易解释的。 
      奇怪的是,sun公司给我们提供了两套jre,稍留意一下我们就会发现在装完jdk,还可以选择装一个jre,这个jre是被默认装到 C:\Program Files\Java下的。sun提供两套jre是有道理的,如果我们只是想运行java程序,那么去官网下一个jre就行了,而无需拿来一个jdk,如果是要开发java程序那就需要一个jdk了."jdk里面的工具几乎都是用java写的,所以jdk本身就是java应用程序,因此要使用jdk附的工具来开发java程序也必须要自行附一套jre才行,这就是java_home\jre存在的原因,而位于Program File\jre的那套jre就是拿来执行我们自己写的java应用程序的。不过,两套中任何一套jre都可以拿来执行我们所写的java应用程序,可是 jdk内附的开发工具在预设开发工具使用包装器(.exe)来启动的情况下,都拿自己支选用java_home\jre".(《Java深度历险》) 
      因此,现在可以明白设path和classpath的作用了: 

path是为jdk提供的那些工具设的,如java.exe,javac.exe 。 
classpath是为java程序所用到的库文件所设的 。



如果 java 环境变量已经配置好了,但有依赖包,这样就要设置CLASSPATH 

set CLASSPATH=d:\aa.jar;D:\lib\*;  java com.java.Test 
 


如果要用相对路径可以用(CLASSPATH有多个用;隔开) 

set MY_HOME=%~dp0  set CLASSPATH=%MY_HOME%xxx.jar;%MY_HOME%..\lib\*;  java com.java.Test  



如果  java 环境变量的path,也没设置,就是说你执行java时,也就找不到命令。 
这时执行时可以用 jre 里面的java的直接路径来运行。(jre 的绝对路径有空格,路径用“”包) 

如下, 

set MY_HOME=%~dp0  set CLASSPATH=%MY_HOME%xxx.jar;%MY_HOME%..\lib\*;  set JAVACMD=“D:\Program Files\MyEclipse 6.5\jre\bin\java”   %JAVACMD% com.java.Test
 


也可以设置path 

set MY_HOME=%~dp0  set CLASSPATH=%MY_HOME%xxx.jar;%MY_HOME%..\lib\*;  set PATH="D:\Program Files\MyEclipse 6.5\jre\bin"  java com.java.Test  


如果想给jvm多分配点内存可用 

set MY_HOME=%~dp0  set CLASSPATH=%MY_HOME%xxx.jar;%MY_HOME%..\lib\*;  set PATH="D:\Program Files\MyEclipse 6.5\jre\bin"  set JAVA_OPTS=-Xms128m -Xmx256m   java %JAVA_OPTS% com.java.Test  



可用相对路径,程序写完后,让别人下载,但别人机器可以没jre.或者没配置,这时可以把jre跟程序放一起让用户下载,直接就可以运行。 
把jre放在程序上一级中。 
如: 

set MY_HOME=%~dp0  set CLASSPATH=%MY_HOME%xxx.jar;%MY_HOME%..\lib\*;  set PATH=%~dp0..\jre\bin  set JAVA_OPTS=-Xms128m -Xmx256m   java %JAVA_OPTS% com.java.Test  



把上面的命名成一个 XXX.bat 名字, 
然后建立一个快捷方式,把快捷方式设置成指向XXX.bat ,把快捷方式图标设置成你的图标。 
这样就可以exe一样执行了,还是绿色版本的,免安装。就是jre比较大点,有60M左右 

程序目录 
        图标文件 
        快捷方式文件,指向 XXX.bat,加你的图标 
        bin\ 
             你的写的程序.jar 
             XXX.bat 
        jre 
           jre文件 
        lib\ 

            依赖包 


%~dp0 为批处理符号 

个人理解为 当前执行的批处理所在的目录

原创粉丝点击