java classpath如何指定一个目录及java资源文件的路径查找问题

来源:互联网 发布:银川古装摄影推荐知乎 编辑:程序博客网 时间:2024/06/05 13:35

一、资源文件的路径查找

当我们自己的程序需要处理配置文件时(比如xml文件或properties文件),通常会遇到两个问题:

  (1)我的配置文件应该放在哪里?

  (2)怎么我的配置文件找不到了?

  在了解了Java加载资源文件的机制后,以上这两个问题便迎刃而解了。

对于第一个问题,答案是:请将你的资源文件放在classpath里,如果资源文件在jar中,请将该jar文件也加到classpath里面。

二、依赖类的路径设置

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

jar包需要在-classpath中指定,或者可以通过通配符来使用,class文件或者其他文件可以指定路径

在执行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

三、maven中打包依赖的路径配置

<plugin>    <groupId>org.apache.maven.plugins</groupId>    <artifactId>maven-jar-plugin</artifactId>    <version>2.6</version>    <configuration>        <excludes>            <exclude>*.properties</exclude>            <exclude>*.xml</exclude>            <exclude>*.sh</exclude>        </excludes>        <archive>            <manifest>                <addClasspath>true</addClasspath>                <classpathPrefix>lib</classpathPrefix>                <mainClass>com.hhht.riskcontrol.thirdparty.tongdun.LoginServer</mainClass>            </manifest>            <manifestEntries>                <Class-Path>conf/</Class-Path>            </manifestEntries>        </archive>    </configuration></plugin>
<classpathPrefix>系统会将这个路径下所有的jar包加入到classpath路径中,

<Class-Path>系统会将这个路径加入到classpath中,主要是用于加载配置文件。


阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 骑山地车手腕和脖子疼怎么办? 布艺沙发坐软了怎么办 篮球护臂太大了怎么办 豪爵摩托车没电怎么办 西装裤裤脚太宽怎么办 全棉衣服有异味怎么办 羊剪绒毛领褪色怎么办 篮球鞋买大2码怎么办 新鞋穿着脚累怎么办 买了国产乔丹怎么办 跑完1000米吐了怎么办 翻毛鞋脚染色了怎么办 翻毛皮被染色了怎么办 防鹿皮绒鞋染色怎么办 亚瑟士跑鞋挤脚怎么办 亚瑟士跑鞋很紧怎么办 飞线鞋面破了怎么办 新袜子穿了很滑怎么办 鞋底硬脚底板疼怎么办 新鞋前面太硬怎么办 新鞋子鞋底太硬怎么办 不到一米八的身高想扣篮怎么办 鞋胶粘在鞋面上怎么办 鞋子上沾了胶怎么办 休闲鞋号码大了半码怎么办 高跟鞋大了一码怎么办 浅口单鞋买大了怎么办 新鞋子磨大脚趾怎么办 鞋前面磨大脚趾怎么办 白鞋子蹭黑了怎么办 夏天穿皮鞋捂脚怎么办 耐克赤足掉漆怎么办 鞋子买回来小了怎么办 布鞋大了一码怎么办 鞋子买小了一码怎么办 运动鞋小了一码怎么办 帆布鞋小了一码怎么办 脚踝骨韧带断了怎么办 咖啡喝多了失眠怎么办 奥迪q7电瓶没电怎么办 一岁宝宝坐不稳怎么办