java classpath如何指定一个目录

Ten_MinutesIP属地: 重庆
0.198字数 624阅读 6,340

通过java -classpath参数,我们可以指定java程序去哪里寻找需要执行或依赖的类

在执行java程序的时候,如果程序中引用了其他的class文件或者jar包,通常我们都要通过 classpath参数来指定这些需要依赖的文件,比如

java -classpath "lib/Hutuseng.jar" my.package.TestClass

如果不指定classpath的话,就会报错,说找不到相应的class,比如NoClassDefFoundError and java.lang.ClassNotFoundException

如果需要依赖的jar包很多的话,那么classpath就会写的很长,比如

java -classpath .;.\lib\lucene-core-5.2.1.jar;.\lib\IKAnalyzer2012_V5.jar;.\lib\lucene-analyzers-smartcn-5.2.1.jar;.\lib\lucene-queryparser-5.2.1.jar;.\lib\mysql-connector-java-5.1.26-bin.jar com.hutuseng.IndexBuilder

当然,我们可以设置CLASSPATH环境变量,只不过环境变量是系统级的,没法对不同的应用分别设置,在实际的应用中很少这么用。

也可以一次性写个批处理文件,以后就直接执行这个文件,以前我也是一直这么干的。其实心中也一直有这个疑惑,到底能不能指定一个目录或者使用文件通配符的方式(*.jar),java程序执行的时候,自动到这个目录中搜索呢?

google了一下,发现在java6以及后续的版本中,提供了对通配符的支持。

如果您的jdk还是老版本,那么就没法用通配符了,就只能一个一个写了,或者如果是在unix系统中,可以用shell的功能把路径下的所有jar文件拼接起来,

比如 java -classpath $(echo libs/*.jar | tr ' ' ':') Test

那么java6以后的通配符怎么用呢?

我们看看这个例子

java -classpath "./libs/*" Test

这里的*是指libs目录里的所有jar文件,不能这么写 java -classpath "./libs/*.jar" Test

如果libs目录中既有jar文件又有class文件,我们都想引用,那么就需要这么写

java -classpath "./libs/*;./libs/" Test

注意:windows系统里的分隔符是;  Unix系统的分隔符是:

另外需要注意的就是 libs/* 不包含libs目录下的子目录里的 jar文件,比如 libs/folder1/A.jar

如果想包含子目录,那就需要都明确指出,比如

java -cp "./libs/*;./libs/folder1/*" Test

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
4人点赞
更多精彩内容,就在简书APP
"小礼物走一走,来简书关注我"
还没有人赞赏,支持一下
总资产14共写了40.4W字获得1,068个赞共359个粉丝

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,993评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,155评论 19 139
  • ** 今天看了一下kafka官网,尝试着在自己电脑上安装和配置,然后学一下官方document。** Introd...
    RainChang阅读 5,058评论 1 30
  • 最近喜欢一个词拥抱 很久没有拥抱一个人了,那天我记得当我双手伸进她的两边时,就已经感动。当我把头放在她的肩膀,紧紧...
    梦中有你的样子阅读 189评论 1 1
  • 图片发自简书App 今日做下的事: 完成作业。 看专栏文章,并写读后感,写日记感受。 练双截棍,跑步,练散打。 武...
    文建伟CZYH阅读 347评论 0 0