Java的ClassPath问题

在文章《Spark Submit的ClassPath问题》中,我探讨了针对spark-submit的Jar包,如何指定外部依赖的Jar包。同样的问题在本地部署时仍然存在。此时,运行Jar并不是通过spark-submit,而是通过java命令,例如:

exec java -Xmx2000m -DMORT_HOME=$MORT_HOME -Ddata-set-parquet.path=$MORT_HOME/parquet -Dconfig.file=$MORT_HOME/mort.conf -jar $MORT_HOME/target/mort.jar > $MORT_HOME/mort_console.log 2>&1

这里-jar参数后面指定的就是我们要运行Jar包,而在该Jar包中Java类,回去调用一个第三方的jar包,且jar包并没有被放到mort.jar包中。

通过查看java命令的帮助文档,我最初以为通过设置-classpath参数来指定外部依赖包就可以轻松解决。然而事情的发展并非我所愿,运行时仍然报告找不到第三方Jar包中相关类的错误。查阅文档,发现:

当使用-jar参数运行的时候,java VM会屏蔽所有的外部classpath,而只以本身yourJar.jar的内部class作为类的寻找范围。

一个解决方案是使用-Xbootclasspath参数,注意需要添加/a,从而保证该参数设置的classpath放在核心class搜索路径后。则前面的命令被修改为:

exec java -Xmx2000m -DMORT_HOME=$MORT_HOME -Ddata-set-parquet.path=$MORT_HOME/parquet -Dconfig.file=$MORT_HOME/mort.conf -Xbootclasspath/a:$MORT_HOME/thirdparty_jars/customer_provided.jar: -jar $MORT_HOME/target/mort.jar > $MORT_HOME/mort_console.log 2>&1

注意,若有多个classpath需要设置,在Unix/Linux/Mac下,分隔符为“:”,在windows下则使用“;”作为分隔符。

资料还提到可以将要依赖的第三方jar包放在JVM的扩展class路径下,即{java_home}\jre\lib\ext目录下。一旦设置正确,就无需修改任何配置文件了。

原文发布于微信公众号 - 逸言(YiYan_OneWord)

原文发表时间:2017-07-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

H2 Database入门

H2 Database做为轻量级的内嵌数据库,功能十分强大,而且运行时只需要一个jar包即可,下表是官网的描述: ? 更详细的对比见官网页面: http://w...

1975
来自专栏yukong的小专栏

【SpringBoot系列01】初识SpringBoot

【SpringBoot系列02】SpringBoot之使用Thymeleaf视图模板

1275
来自专栏coding

yii实战之控制器与视图交互默认控制器构建人物列表页面小结

933
来自专栏SpringBoot 核心技术

第六章:如何在SpringBoot项目中使用拦截器

1343
来自专栏web编程技术分享

三分钟学会用SpringMVC搭建最小系统(超详细)

3638
来自专栏osc同步分享

mybatis的接口实现操作数据库(注解)

上一篇介绍mybatis的接口实现操作数据库是基于xml配置文件方式的,这次介绍注解方式实现,只需要基于上次的项目进行修改就行了:         1. 将co...

3447
来自专栏dalaoyang

分布式配置

分布式配置:配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。 在生产环境,由于配置繁多,造成...

3397
来自专栏维C果糖

首次运行 IntelliJ IDEA 示例

首先,双击打开 IntelliJ IDEA 的快捷方式: ? 在此,需要说明: 如果咱们的电脑曾经安装过 IntelliJ IDEA,并且你在卸载 Intell...

1756
来自专栏菩提树下的杨过

Spring Security笔记:HTTP Basic 认证

在第一节 Spring Security笔记:Hello World 的基础上,只要把Spring-Security.xml里改一个位置 1 <http...

1887
来自专栏IT笔记

SpringBoot开发案例之配置静态资源文件路径

SpringBoot本质上是为微服务而生的,以JAR的形式启动运行,但是有时候静态资源的访问是必不可少的,比如:image、js、css 等资源的访问。

41010

扫描关注云+社区