可执行jar 的执行命令为 java -jar myjar.jar,
如果使用了 -jar
选项,那么环境变量 CLASSPATH 和在命令行中指定的所有类路径都被 JVM 所忽略。 如果myjar.jar 调用了其他的jar文件,有下面几种解决方案
解决方案
Java定义了三种级别的class,分别为BootStrap class,Extend Class,User class.
BootStrap class扩展方案
Java 命令行提供了如何扩展bootStrap 级别class的简单方法.
-Xbootclasspath:基本核心的Java class 搜索路径.不常用,否则要重新写所有Java 核心class
-Xbootclasspath/a: 后缀在核心class搜索路径后面.常用.
-Xbootclasspath/p:前缀在核心class搜索路径前面.不常用,避免引起不必要的冲突.
语法如下:
java –Xbootclasspath/a:/path/myclass/account.jar: -jar yourself.jar(Unix用:号隔开)
java –Xbootclasspath:/d:/myclass/account.jar; -jar yourself.jar(Window用;号隔开)
1128 .不知如何,没有测试通过
1128 下午:测试通过 java –Xbootclasspath/a:/d:/myclass/account.jar; -jar yourself.jar(Window用;号隔开)
extend class 扩展方案
Java exten class 存放在{Java_home}\jre\lib\ext 目录下.当调用Java时,对扩展class路径的搜索是自动的.总会搜索的.这样,解决的方案就很简单了,将所有要使用的第三方的jar包都复制到ext 目录下.
该方案测试通过,但是其扩展性较差,也不方便
User class扩展方案
当使用-jar执行可执行Jar包时,JVM将Jar包所在目录设置为codebase目录,所有的class搜索都在这个目录下开始.所以如果使用了其他第三方的jar包,一个比较可以接受的可配置方案,就是利用jar包的Manifest扩展机制.步骤如下
1.将需要的第三方的jar包,复制在同可执行jar所在的目录或某个子目录下.
比如:jar 包在 d:\crm\luncher.jar 那么你可以把所有jar包复制到d:\crm目录下或d:\crm\lib 子目录下.
2.修改Manifest 文件
在Manifest.mf文件里加入如下行
Class-Path:classes12.jar lib/class12.jar
测试通过,但是使用该方法时应注意, Manifest.mf文件必须以空行或回车结尾,否则最后一行可能回解析错误。
参见:http://java.sun.com/docs/books/tutorial/deployment/jar/downman.html