java classpath 加载jar包问题

本人JAVA菜鸟,弱弱的问个问题(Centos6.4环境JDK7):我写了个JAVA脚本,路径为:/tmp/Test.java,其中用到了第三方Java类包路径为/jav... 本人JAVA菜鸟,弱弱的问个问题 (Centos 6.4环境 JDK7):
我写了个JAVA脚本,路径为:/tmp/Test.java,其中用到了第三方Java类包路径为/java/mylib/xxx.jar
-- 我通过 javac -classpath /java/mylib/xxx.jar /tmp/Test.java 编译通过了顺利出现Test.class
问题来了:
1.当我运行 java /tmp/Test 报错 【java.lang.NoClassDefFoundError】 没找到xxx.jar包
2.我再运行 java -classpath /java/mylib/xxx.jar /tmp/Test 再次报错【错误: 找不到或无法加载主类 Test】
3.好吧,我设置 CLASSPATH=$CLASSPATH:/java/mylib,再次运行java /tmp/Test 又是【java.lang.NoClassDefFoundError】
4.不服输, 设置 CLASSPATH=$CLASSPATH:/java/mylib/xxx.jar,接着运行java /tmp/Test成功了!
5.出于好奇试了下: 解压xxx.jar包 jar -xf /java/mylib/xxx.jar 再运行 CLASSPATH=$CLASSPATH:/java/mylib/ 再运行 java /tmp/Test 再次成功运行

说明:如果指定classpath目录,java程序只能搜索非jar包的*.class文件,而不会搜索*.jar文件,只有把classpath指定jar文件路径即CLASSPATH=$CLASSPATH:/java/mylib/xxx.jar才能被搜索到(不知道我说的对不对哦,反正我测了下是这个样子滴)

如果按第4种方法的话,我的项目如果需要用到100个JAR包,我岂不是需要在CLASSPATH中加100个JAR?
我的问题是:
有什么方法可以让CLASSPATH读取指定目录下的所有JAR包?
或者除了CLASSPATH还有其他什么办法可以让JAVA程序找到第三方需要用到的包
我试过Eclipse里有个Java Build Path->Libraries 可以自己添加第三方JAR包,点运行,它竟然可以神奇般的编译+运行出来,Eclipse是怎么做到的呀?

请大侠赐教
展开
 我来答
百度网友3063114a7
推荐于2018-04-12 · TA获得超过693个赞
知道小有建树答主
回答量:666
采纳率:85%
帮助的人:229万
展开全部
首先你说的 ”只能搜索非jar的*.class文件“的结论是不对的。 实际上是可以load的

读取目录下所有jar的方法是使用 -Djava.ext.dirs=mydir/
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友12ee0fd
2014-03-14 · TA获得超过4.7万个赞
知道大有可为答主
回答量:1.1万
采纳率:66%
帮助的人:1958万
展开全部

Test.java中有没有package语句。在 tmp目录下运行:

java -cp /java/mylib/xxx.jar:. Test
追问
哦,运行成功了

我刚直接运行 java -cp /java/mylib/xxx.jar Test就出现:找不到或无法加载主类 Test

请问java -cp /java/mylib/xxx.jar:. Test 为什么要在加[:.]?
追答


你的CLASSPATH原来的内容是什么?

$cd /tmp
$javac -cp /java/mylib/xxx.jar -d . Test.java
$java -cp .:/java/mylib/xxx.jar Test

如果你的java源文件里没有 package语句,上面的运行应该没有问题

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式