打包jar的Class-Path属性不可以指定目录? 经常用到的是指定第三方的JAR文件,但是可不可以指定某个目录呢?目录里面是一些class文件。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不可以随便更改,但可以将jar文件复制到必要的目录下。 楼上误会了。如果程序要使用第三方包,并且程序要打包成JAR文件,以便使用java -jar XX.jar来运行的话,当然会在打包成JAR时的MANIFEST.MF文件中使用Class-Path属性来添加所需的第三方包。但是如果要引用的类并没有打包成JAR,而只是全部放在一个目录上,然后,我尝试把Class-Path设置为一个目录,但还是没法找到CLASS。 不能只写目录,要把所有用到的 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 脚本,让它来自动构建比较方便。 非常感谢 bao110908(火龙果) ( )。我现在的应用就是像你说的这样做的。但是我现在面临一个问题,我的程序要动态加载一些类,这些类并不是在部署程序时一起打包的,有很多是新增的。我现在每添加这样一个类,都要关闭程序,重新打包JAR文件并替换旧的,我希望可以不用关闭程序。如果程序不打包成JAR文件,清一色class文件的话,是可以做到的,因为用java -cp ... XXX的话,可以指定classpath中包含某个目录,例如,在bat文件中:set CLASSPATH=%CLASSPATH%;../libDirjava -classpath %CLASSPATH% test.Test但是JAR的Class-Path属性似乎并不支持?真的没办法做到? 没有办法,只能重新打包,因为类加载器在有 -jar 参数时,只认 MANIFEST.MF 中 Class-Path 下的,-classpath 就不认了。还有一个办法就是你也可以把这些 jar 拷到 %JRE_HOME%/lib/ext 下也可以,那样就用不着在 Class-Path 下写东西了。 类加载器在有 -jar 参数时,确实只认 MANIFEST.MF 中 Class-Path 下的,-classpath 就不认,所以我才把问题提出为“可不可以指定为包含目录”。我奇怪的是,在bat文件中:set CLASSPATH=%CLASSPATH%;../libDirjava -classpath %CLASSPATH% test.Test是有交的,说明classpath是可以识别一个目录下在的class的,哪怕不会自动加载JAR。但是为什么在jar包中的CLASS-PATH不可以指定为包含目录呢? 在 JAR 的 lib 不可以写成 %% 的形式,在命令行状态下之所以可以这样写是操作系统作了转换,而在 MANIFEST 中,没有操作系统的干预,JAVA 只把它认为是字符串。要实现你的要求,只能把这些 jar 拷到 %JRE_HOME%/lib/ext 下,除此之外没有别的办法。 把jar拷到%JRE_HOME%/lib/ext下,是为了能够LOAD入这些JAR的类,事实上我并不是需要这样。可能我表达得不清楚。我仅仅是希望JAR文件可以访问某个目录下的class,注意这些class是直接放在某个目录下,而没有打包成jar,因为我希望可以在不关闭程序时加入一些新增的类,打包成JAR显然不能被替换。 那三个方法为什么有问题呢?求解.... 疑难杂症 poi excel 格式问题 阴阳历换算的问题 初学java <<java2核心技术(core java2)>>这本书合适吗? 关于final static 和 final 的区别 关于变量访问的一个问题 JAVA JODBC中怎样连续操作两个(或以上)的SQL语句 如何设定“确定”和“取消”按钮的退出属性?(昨日未解决,今日重问)在线等待 java基本概念的问题 JAVA 如何缓冲更新到数据库? 大家一起为奥运出力,看我的奥运倒计时问题出在哪里? (applet,线程的关闭)
set CLASSPATH=%CLASSPATH%;../libDir
java -classpath %CLASSPATH% test.Test但是JAR的Class-Path属性似乎并不支持?真的没办法做到?
set CLASSPATH=%CLASSPATH%;../libDir
java -classpath %CLASSPATH% test.Test
是有交的,说明classpath是可以识别一个目录下在的class的,哪怕不会自动加载JAR。但是为什么在jar包中的CLASS-PATH不可以指定为包含目录呢?