因为我想在命令行界面中执行我的 scala 项目生成的 jar,我遇到了以下问题:
线程“main”中的异常 java.lang.NoClassDefFoundError: org/rogach/scallop/ScallopConf
尽管在依赖文件中我提到了 scallop 依赖如下
import sbt._
object Dependencies {
lazy val betterFiles = "com.github.pathikrit" %% "better-files" % "3.7.0"
lazy val scalaz = "org.scalaz" %% "scalaz-core" % "7.2.27"
lazy val scallop = "org.rogach" %% "scallop" % "3.1.5"
// -- Logging
lazy val scalaLogging = "com.typesafe.scala-logging" %% "scala-logging" % "3.9.2"
lazy val slf4jBackend = "org.slf4j" % "slf4j-simple" % "1.7.26"
// -- Testing
lazy val scalaTest = "org.scalatest" %% "scalatest" % "3.0.5"
}
我的 build.sbt 文件如下:
import Dependencies._
ThisBuild / scalaVersion := "2.12.5"
ThisBuild / sbtVersion := "1.2.6"
ThisBuild / version := "0.1.0-SNAPSHOT"
lazy val root = (project in file("."))
.settings(
name := "phenix-challenge",
libraryDependencies ++= Seq(
betterFiles,
scalaz,
scallop,
scalaLogging,
slf4jBackend % Runtime,
scalaTest % Test
)
)
如果您有可以解决我的问题的想法,请帮助!
提前致谢
最佳答案
要在命令行界面中执行由您的 scala 项目生成的 jar,您可以使用 sbt 插件来组装一个包含您的库/依赖项的 fat-jar。有了这样的 jar,您就可以通过 java -jar ...
有几个 SBT 插件可以构建一个 fat-jar。也许最简单的是 sbt-assembly。
- 将此插件添加到文件
project/plugins.sbt
(如果需要,创建此文件):addSbtPlugin("com.eed3si9n"% "sbt-assembly"% "0.14.9")
- 现在使用 sbt 构建一个 fat-jar:
sbt assembly
- 然后通过
java -jar YouMainClass
运行
另一种选择是使用纯 sbt 使用命令 sbt run
运行 Main 类,然后你确实需要构建一个 fat-jar。
关于scala - 线程 "main"java.lang.NoClassDefFoundError : org/rogach/scallop/ScallopConf 中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55328335/