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中,主要是用于加载配置文件。
- java classpath如何指定一个目录及java资源文件的路径查找问题
- Java中获取classpath路径下的资源文件
- Java - 获取ClassPath的路径和资源
- Java中如何访问资源文件的路径问题
- java程序读取资源文件时路径如何指定
- java 文件创建路径指定的问题
- java中如何把一个目录下的文件移到另一个指定目录中
- java获取classpath目录中的资源文件(配置文件)
- java 查找目录下指定文件名的文件
- java 查找目录下指定文件名的文件源代码
- java获取指定资源文件路径的几种方法
- Java流:将指定目录和子目录下的指定扩展名(.java)的文件所在路径写到一个文件中,形成一个文件清单。
- Java classpath 的工程路径问题
- java获取classpath路径的问题
- Eclipse下的java工程目录问题和Classpath路径问题理解
- 分享下java 读取目录及子目录下指定文件名的路径 并放到一个List数组里面返回遍历和写到文件里
- 分享下java 读取目录及子目录下指定文件名的路径 并放到一个List数组里面返回遍历和写到文件里
- java 读取目录及子目录下指定文件名的路径 并放到一个List数组里面返回遍历和写到文件里
- Ubuntu配置apue.h
- dom4j解析与生成xml文件
- IntelliJ IDEA 本地LicenseServer激活
- 一篇文章让你彻底明白区块链有哪些应用场景
- Javascript中call和apply的区别与详解
- java classpath如何指定一个目录及java资源文件的路径查找问题
- 关于python创建超级管理员时,出现No such Table ‘auth_user’
- ehcache学习
- MySQL存储引擎之Spider内核深度解析
- ffmpeg中AVCodecContext等数据结构中extradata成员的数据格式及其设置
- JS 事件委托
- 生产者/消费者模式
- uboot分析之Loopback接口
- VC++获取当前系统时间日期 GetSystemTime()函数的用法