编译spark job server 时, 遇到sbt 编译 scala的情况 , 在idea sbt 换源时遇到的坑
这里面的环境是windows10 ,非Linux
先说一下失败的几个情况
首先我是本地自己下载了一个sbt, 在idea的shell里面 使用sbt的命令进行操作
但是源一直是repo1.maven.org
而这个源却是用不了的
于是准备换源
一般网上的做法就是在用户根目录下的 .stb目录新建一个文件 repositories
写入新源
[repositories]
local
nexus-aliyun: http://maven.aliyun.com/nexus/content/groups/public
typesafe: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
sonatype-oss-releases
maven-central
sonatype-oss-snapshots
但是这样,哪怕重启也不起作用
也有人说在sbt home目录下的conf中修改sbtconfig.txt
-Dsbt.override.build.repos=true
-Dsbt.repository.config=C:/tools/sbt-1.2.7/sbt/conf/repositories
这也是不起作用,它们这些介绍不知道是歪打正着,还是怎么回事,感觉少了点东西
后面干脆找到一篇介绍 https://blog.youkuaiyun.com/kina2001/article/details/79027184
是直接使用idea的sbt-shell,
原理就是把这些配置信息显式写在vm的参数里,配置还是上面的配置,只是这里面显式的写进去
上面介绍的两个失败的方法,没有生效,估计是没有去读这些配置,缺少生效的条件, 都是想当然
没有实战的东西,抄一下就发上来, 耽误大家时间, 我这个是亲测的, 理解了问题就好解决了.
感谢阿里提供了国内源, 良心企业呀.
期望更多的公司能提供源, 以前开源中国提供的,后来又没有了, 让人心生不爽.
等有些时间去分析sbt.bat启动脚本时,发现了为啥配置sbtconfig.txt这个文件不起作用的原因了
在脚本里面, 只要_JAVA_OPTS被设置了值,就不会从CFG_OPTS取值, 而 CFG_OPTS 这个变量的数据就来自于
sbtconfig.txt
rem We use the value of the JAVA_OPTS environment variable if defined, rather than the config.
set _JAVA_OPTS=%JAVA_OPTS%
if “%_JAVA_OPTS%”=="" set _JAVA_OPTS=%CFG_OPTS%
在spark-jobserver的源码中发现文件 .jvmopts
这个文件存在后, 脚本会优先从这个文件中取配置信息,所有导致 我所使用的sbtconfig.txt不起作用, 这也是网上大量提到的配置文件, 这样的话就是说sprak-jobserver导致sbt的配置不起作用了,应用对编译工具产生了影响, 这算不算是个坑?
rem users can set JAVA_OPTS via .jvmopts (sbt-extras style)
IF EXIST .jvmopts FOR /F %%A IN (.jvmopts) DO (
SET _jvmopts_line=%%A
IF NOT "!_jvmopts_line:~0,1!"=="#" (
SET JAVA_OPTS=%%A !JAVA_OPTS!
)
)
找到这个原因后, 解决办法就简单了, 直接把配置信息写进这个文件 .jvmopts 就好了,或者删除.jvmopts文件
另外写.jvmopts文件有个好处, 在windows10自带的linux下, 可以灵活修改它, 使本地的windows跟linux都可以编译它, 而且打包脚本都是sh文件, 所以使用linux在本地打包会好很多