sbt常见问题
SBT常见问题
安装时出现
java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
这个是因为证书错误,可以下载一个新的版本的jdk,找到他的证书,然后复制到当前安装的jdk的证书路径
这里以安装的open jdk8和新下载的open jdk11为例BASH1
2
3
4
5
6
7
8
9
10
11# 下载JDK11,:http://jdk.java.net/11/
mkdir ~/software && cd ~/software
wget https://download.java.net/java/GA/jdk11/13/GPL/openjdk-11.0.1_linux-x64_bin.tar.gz
tar -zxvf openjdk-11.0.1_linux-x64_bin.tar.gz
rm -rf openjdk-11.0.1_linux-x64_bin.tar.gz
# 备份原路径下的jdk8
mv ~/software/java-se-8u41-ri/jre/lib/security/cacerts ~/software/java-se-8u41-ri/jre/lib/security/cacerts.bak
# 将jdk11的证书复制到jdk8中
cp ~/software/jdk-11.0.1/lib/security/cacerts ~/software/java-se-8u41-ri/jre/lib/security/cacerts
# 然后测试是否成功,如果还有同样的问题可能需要再换个别的版本的jdk
sbt --versionnot found: https://maven.aliyun.com/repository/public/com/typesafe/config_2.12/1.2.1/config_2.12-1.2.1.pom
- 很显然,自己的包在这个仓库找不到。要么是自己包的格式不对,要么就是这个仓库没有这个包。改改依赖版本或者新增一个别的仓库即可
- 在阿里云的maven找到该jar包的
pom.sha256和pom文件,然后改成上边找不到的文件名,复制到对应包的pom位置即可 - 因为在groupId后加了
%%,导致sbt下载依赖包的时候老是自动加上scala的版本,修改为%即可参考1
2
3
4// 原本是这个,会自动加上scala的版本
libraryDependencies += "com.typesafe" %% "config" % "1.4.0"
// 修改为一个%就没有问题了
libraryDependencies += "com.typesafe" % "config" % "1.4.0"
解决冲突相同的类冲突
不需要的类丢弃即可,在build.sbt添加如下配置1
2
3
4
5
6
7
8
9
10
11assemblyMergeStrategy in assembly := {
case x if x.endsWith("UnusedStubClass.class") => MergeStrategy.discard
case x if x.contains("org/apache/commons/collections") => MergeStrategy.discard
case x if x.contains("javax/inject") => MergeStrategy.discard
case x if x.contains("org/aopalliance") => MergeStrategy.discard
case x if x.endsWith("package-info.class") => MergeStrategy.discard
case x if x.endsWith("git.properties") => MergeStrategy.discard
case x =>
val oldStrategy = (assemblyMergeStrategy in assembly).value
oldStrategy(x)
}sbt添加
assembly编译fat jarproject/assembly.sbt添加如下代码,即可在项目根目录通过sbt assembly编译fat jar1
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.15.0")
编译的时候,
$SPARK_HOME的jars目录已有且版本相同的jar就不需要编译了(在版本号后边添加% "provided"即可)sbt添加可以查看依赖树的插件
~/.sbt/1.0/plugins/plugins.sbt添加如下代码1
addDependencyTreePlugin
然后进入sbt命令行
使用
dependencyTree可以看项目中所有的依赖树
使用whatDependsOn groupId artifactId version查看某个依赖包的依赖树
使用sbt "project 项目名" dependencyTree >> dependencyTree.txt可以将所有依赖树导出到文件
- 在scala添加测试工具
在build.sbt增加如下工具然后在1
libraryDependencies += "org.scalatest" % "scalatest-app_2.12" % "3.2.7" % "test"
src/test/scala下创建自己的Test.scala测试类,内容如下SCALA1
2
3
4
5
6
7
8
9
10
11import org.scalatest.funsuite.AnyFunSuite
class Test extends AnyFunSuite {
test("mytest") {
doSth()
}
def doSth() = {
println("hello scala")
}
}
- 本文标题:sbt常见问题
- 创建时间:2022-03-07 17:57:26
- 本文链接:https://blog.212490197.xyz/article/tools/sbt/some-questions/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
评论