java -Djava.ext.dirs= -jar 启动项目,产生的问题
问题一:
我在shell脚本中用:
nohup java -Djava.ext.dirs=${DIR}/ -jar ${DIR}/${JAR_NAME} > ${DIR}/nohup.out &
启项目,请求https
报了以下错误:
Caused by: javax.net.ssl.SSLKeyException: RSA premaster secret error
问题二:
为解决问题一,将:
jre目录下的/lib/ext/sunjce_provider.jar
加到自己的jar
包同级目录后
启动报以下错误:
Caused by: java.lang.NoSuchMethodError: sun.security.internal.spec.TlsMasterSecretParameterSpec.getExtendedMasterSecretSessionHash()
并且程序直接退出。
最后:
改启动脚本如下:
nohup java -Djava.ext.dirs=${DIR}/:${JRE_DIR}/lib/:${JRE_DIR}/lib/ext/ -jar ${DIR}/${JAR_NAME} > ${DIR}/nohup.out &
问题全部解决了
总结原因:
1.由于我打包方式的问题,导致配置文件没有加载到classpath
目录下,为了解决配置文件加载问题我用了java -Djava.ext.dirs=${DIR}/ -jar ${DIR}/${JAR_NAME}
,但是这样一来java
自带的一些加密解密的jar包
,就不会自动加进来了,详情可以百度。
2.-Djava.ext.dirs=${DIR}/:${JRE_DIR}/lib/:${JRE_DIR}/lib/ext/
中:
${DIR}/
是jar所在目录,
${JRE_DIR}/lib/:${JRE_DIR}/lib/ext/
引得就是eclipse
中JRE System Library
的jar
如图:
如上图,这些jar全部来自jre目录下的 /lib/和/lib/ext/目录
,只要将这两个目录的路径配到-Djava.ext.dirs
参数中就能解决问题
最后的最后:
其实你不用-Djava.ext.dirs
参数,就不会有上面的问题(不用-Djava.ext.dirs参数,java -jar启动的时候,会自动加载 eclipse
中JRE System Library
显示的这些jar
),但还会有配置文件加载的问题,可以用 java -cp代替,最好的解决方式如下,在pom中加入以下plugin的配置:
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><manifestEntries><!-- 把jar包所在目录和jar包所在目录下的config目录加到manifest的classpath中 --><Class-Path>. ./config/</Class-Path></manifestEntries></archive><excludes><exclude>lib/**</exclude><exclude>templates/**</exclude><exclude>config/**</exclude><exclude>*.properties</exclude><exclude>*.config</exclude><exclude>*.json</exclude><exclude>*.xml</exclude><exclude>*.proto</exclude><exclude>*.yml</exclude><exclude>mapper/**</exclude><exclude>doc/**</exclude></excludes></configuration>
</plugin>
pom加入以上配置,就是把jar包所在目录和jar包所在目录下的config目录加到manifest的classpath中。
这样配置后打包生成的MANIFEST.MF文件如下:
这样你读额外的配置就可以用ClassLoader(类加载器)读取到了
java -Djava.ext.dirs= -jar 启动项目,产生的问题相关推荐
- java -cp 与 java -Djava.ext.dirs的区别与坑
大家在linux环境下使用命令行执行java程序时,经常要使用到大量外部的jar包或class文件,一般我们有哪些方式可以用呢? -classpath,命令格式:# java -classpath & ...
- java djava_Java -Djava.ext.dirs启动的坑
java以jar包形式启动启动 -Djava.ext.dirs=lib的作用 以bat形式启动项目,linux环境需要改变语法 ------------------------------ java ...
- java ext.dirs_关于-Djava.ext.dirs使用及JAVA 命令参数详解System.setProperty
大家在linux环境下使用命令行执行java程序时,经常要使用到大量外部的jar包或class文件,一般我们有哪些方式可以用呢? -classpath,命令格式:# java -classpath , ...
- java ext.dirs_关于-Djava.ext.dirs使用问题
大家在linux环境下使用命令行执行java程序时,经常要使用到大量外部的jar包或class文件,一般我们有哪些方式可以用呢? -classpath,命令格式:# java -classpath , ...
- Java指令-Djava.ext.dirs的陷阱
Java指令-Djava.ext.dirs的陷阱 https://blog.csdn.net/cyony/article/details/74375251 这两天由于现场需求,需要把ES索引写入插件改 ...
- java -Djava.library.path -Djava.ext.dirs 的区别
2019独角兽企业重金招聘Python工程师标准>>> -Djava.library.path 是vm参数,指名dll库... -Djava.ext.dirs 是jar路径.. 附加 ...
- java jar 启动项目,SpringBoot项目运行jar包启动的步骤流程解析
SpringBoot项目在开发中,方便快捷,有一点原因就是SpringBoot项目可以打jar包运行:把jar包直接扔服务器上,然后运行jar包就能访问项目接口了.下面介绍SpringBoot项目打j ...
- java -jar 启动程序/设置classpath
目录 前言 java 类加载器与路径 java 设置路径的方法 设置 bootclasspath 设置 Extensions JAR files 设置 classpath 测试程序 java -jar ...
- d+java.ext.dirs_Java-JDK9-Djava.ext.dirs is not supported
1.JDK9出现的问题 去年JDK9发布了, 最近我把JDK8更新为JDK9后, 当我使用 Android apksigner dx 命令工具出现如下问题 D:\Dev\AndroidSDK\buil ...
最新文章
- windows下忘记mysql超级管理员密码的解决办法
- java 真数组 伪数组_伪数组(ArrayLike)
- buu [GKCTF2020]汉字的秘密
- linux进程通讯-纯文本文件
- Linux ARM交叉编译工具链制作过程
- linux编写随机数脚本,Shell使用RANDOM编写1-10以内随机数
- 都是成年人了,别再相信OA价格越低越好这种话了
- Nexus3搭建本地仓库
- 《通关!游戏设计之路》笔记(未整理完)
- webstorm识别 ftl文件
- pytorch 语⾔模型数据集(周杰伦专辑歌词)数据集 免费
- [转载]唐僧的亲爹究竟是谁 (2016-02-17 16:37:21)
- 用python写作文_Python3实现写作
- PHP分片上传文件到又拍云对象存储
- pubwin扫描安装
- 如何正确使用数据可视化图表?
- 面阵相机靶面详解and镜头选择andFA镜头视野计算
- suse linux zypper iso,SUSE Linux的zypper命令详解
- VMware设置共享文件夹之后Linux中看不到怎么办?
- 光纤的损耗机理 散射损耗 吸收损耗 弯曲损耗