java-jar参数运行时应用classpath设置方法使用java-jaryourJarExe.jar运行打包应用时,会发现如何设置-classpath参数应用找不到对应的第一个三方类报错ClassNotFound错误。其实这是因为在使用-jar参数运行时,javaVM会屏蔽所有外部类路径,只使用yourJarExe.jar这个内部类作为类的搜索范围。解决方案扩展类加载器扩展类加载器一般存放在{Java_home}\jre\lib\ext目录下。调用Java时,会自动搜索扩展类路径。总会有一个搜索。这样解决就很简单了,将要用到的第三方jar包全部复制到ext目录下即可。它将透明地进入加载类别。注意:不建议使用,否则需要迁移所有JRE,统一同步!BootStrap类加载器扩展方案使用-Xbootclasspath参数来加载扩展的jar包。Java命令行提供了一种扩展bootStrap级类的简单方法。-Xbootclasspath:完全替换基本核心Java类搜索路径,不常用,否则必须重写所有Java核心类(不推荐!)。-Xbootclasspath/a:后缀在核心类搜索路径之后(推荐)-Xbootclasspath/p:前缀在核心类搜索路径之前,不常用,避免不必要的冲突。(不推荐)语法如下:(分隔符类似于classpath参数,unix使用:number,windows使用;number,这里以unix为例)java-Xbootclasspath/a:/usrhome/thirdlib.jar:-jaryourJarExe.jarUserclassExtensionscheme当使用-jar执行可执行的Jar包时,JVM将Jar包所在的目录设置为codebase目录,所有类的搜索都从该目录开始。所以如果使用其他的第三方jar包,一个比较容易接受的可配置方案是使用jar包的Manifest扩展机制。步骤如下:将需要的第三方jar包拷贝到可执行jar所在目录或子目录下。例如:jar包在/usrhome/yourJarExe.jar,那么你可以将所有的jar包复制到/usrhome目录或/usrhome/lib等类似的子目录下。修改Manifest文件,在Manifest.mf文件中添加如下一行:Class-Path:classes12.jarlib/thirdlib.jarClass-Path是可执行jar包依赖的关键字。需要注意的是,Class-Path只是你本地机器的CLASSPATH环境变量的缩写,也就是说,使用这个前缀意味着在你的jar上的所有CLASSPATH目录中搜索对应的第三方类/类库包执行机。不能通过Class-Path加载位于自己jar包(或网络)中的jar文件。因为理论上你的jar发布包不应该包含其他第三方库(而是提醒用户通过使用说明获取相应的支持库)。如果其他第三方类库(jar、zip、class等)由于特殊需要需要直接打包发布在自己的jar包中,则必须自己实现自定义的ClassLoader来加载这些第三方库意图类库。