栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

linux环境部署java项目resource位置小记

linux环境部署java项目resource位置小记

1. Class.getResource和ClassLoader.getResource的区别
   就是在加载资源文件的时候,加载方式的不同
   class.getResource("/") == class.getClassLoader().getResource("")
   其实,Class.getResource和ClassLoader.getResource本质上是一样的,都是使用  ClassLoader.getResource加载资源的。
   Class.getResource真正调用ClassLoader.getResource方法之前,会先获取文件的路径(path不以'/'开头时,默认是从此类所在的包下取资源;path以'/'开头时,则是从项目的ClassPath根下获取资源)。
   ClassLoader.getResource方法会通过双亲委派机制,先委派双亲去加载类,如果双亲没有加载到,则再由自己加载。

2. class path

The class path is the path that the Java Runtime Environment (JRE) searches for classes and other resource files.

这是Oracle 官方对class path的说明,意思是class path是JRE搜索类和其他资源文件的路径

在URLClassPath内部,维护了一个loaders列表(有序,根据classpath定义顺序),classpath下的每一个jar/目录和jdk下的jar都会在这个loaders中单独维护一个元素

3. java -cp 部署功能时候,指定resource配置文件的路径

 若代码里通过getClassLoader().getResource("某个配置文件名")来读取配置文件,程序部署到linux环境时,假设目录结构: 

project
  |
  |_ _ lib/ --放入依赖的jar包
  |
  |_ _ bin/ --本工程启动类jar包
  |
  |_ _ config/ --用到的配置文件,ClassLoader.getResource()要读取的
         |
         |_ _hadoop/ --其他的配置文件,例如hadoop配置文件

那么,程序可通过如下方式启动:

cd project

java -cp(或classpath)  .:./config:./bin/projectDemo.jar:./lib/*.jar  com.ghs.tool.demo.StartupMain

JVM就会按照指定的顺序进行加载至ClassPath

在JVM中,ClassPath中也有个hadoop目录(因为-classpath指定的./config在工程中目录下有hadoop目录,最后加载JVM中自然也会有)

其实这种结构很好理解,用IDEA模拟下就能看出来:

1)未指定config目录为Resources

编译后的目录结构:只有src源码的编译后的字节码文件

2)设置config目录为Resources(即跟java -cp ./config同样道理)

看下编译后的效果:

 i)还可以将hadoop目录也设置为Resources,看看编译后目录结构

core-site.xml和hdfs-site.xml也放置classpath根目录下了

好了,希望对你有所帮助!

  1. 参考:https://blog.csdn.net/zhangshk_/article/details/82704010
  2. 参考https://blog.csdn.net/weixin_27210125/article/details/114097140
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/327124.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号