经常用到的是指定第三方的JAR文件,但是可不可以指定某个目录呢?目录里面是一些class文件。

解决方案 »

  1.   

    不可以随便更改,但可以将jar文件复制到必要的目录下。
      

  2.   

    楼上误会了。如果程序要使用第三方包,并且程序要打包成JAR文件,以便使用java -jar XX.jar来运行的话,当然会在打包成JAR时的MANIFEST.MF文件中使用Class-Path属性来添加所需的第三方包。但是如果要引用的类并没有打包成JAR,而只是全部放在一个目录上,然后,我尝试把Class-Path设置为一个目录,但还是没法找到CLASS。
      

  3.   

    不能只写目录,要把所有用到的 jar 都写进去,用空格分开,像这样:Class-Path: lib/commons-digester-1.8.jar lib/commons-logging-1.0.4.jar不能只写一个目录“lib”或写成“lib/*.jar”,这样都没有用的。在与 XX.jar 的同级新建 lib 目录,把那些 jar 拷进去,如果在 MANIFEST 中有 Main-Class 的话,就可以使用 java -jar XX.jar 来运行了,一般来说,写个 Ant 脚本,让它来自动构建比较方便。
      

  4.   

    非常感谢 bao110908(火龙果) ( )。我现在的应用就是像你说的这样做的。但是我现在面临一个问题,我的程序要动态加载一些类,这些类并不是在部署程序时一起打包的,有很多是新增的。我现在每添加这样一个类,都要关闭程序,重新打包JAR文件并替换旧的,我希望可以不用关闭程序。如果程序不打包成JAR文件,清一色class文件的话,是可以做到的,因为用java -cp ... XXX的话,可以指定classpath中包含某个目录,例如,在bat文件中:
    set CLASSPATH=%CLASSPATH%;../libDir
    java -classpath %CLASSPATH% test.Test但是JAR的Class-Path属性似乎并不支持?真的没办法做到?
      

  5.   

    没有办法,只能重新打包,因为类加载器在有 -jar 参数时,只认 MANIFEST.MF 中 Class-Path 下的,-classpath 就不认了。还有一个办法就是你也可以把这些 jar 拷到 %JRE_HOME%/lib/ext 下也可以,那样就用不着在 Class-Path 下写东西了。
      

  6.   

    类加载器在有 -jar 参数时,确实只认 MANIFEST.MF 中 Class-Path 下的,-classpath 就不认,所以我才把问题提出为“可不可以指定为包含目录”。我奇怪的是,在bat文件中:
    set CLASSPATH=%CLASSPATH%;../libDir
    java -classpath %CLASSPATH% test.Test
    是有交的,说明classpath是可以识别一个目录下在的class的,哪怕不会自动加载JAR。但是为什么在jar包中的CLASS-PATH不可以指定为包含目录呢?
      

  7.   

    在 JAR 的 lib 不可以写成 %% 的形式,在命令行状态下之所以可以这样写是操作系统作了转换,而在 MANIFEST 中,没有操作系统的干预,JAVA 只把它认为是字符串。要实现你的要求,只能把这些 jar 拷到 %JRE_HOME%/lib/ext 下,除此之外没有别的办法。
      

  8.   

    把jar拷到%JRE_HOME%/lib/ext下,是为了能够LOAD入这些JAR的类,事实上我并不是需要这样。可能我表达得不清楚。我仅仅是希望JAR文件可以访问某个目录下的class,注意这些class是直接放在某个目录下,而没有打包成jar,因为我希望可以在不关闭程序时加入一些新增的类,打包成JAR显然不能被替换。