线程“主”中的异常java.lang.NoClassDefFoundError:org / rogach / scallop / ScallopConf

时间:2019-03-24 20:38:28

标签: scala jar sbt

由于我想在命令行界面中执行由scala项目生成的jar,因此出现以下问题: val()

尽管在依赖项文件中,我提到了 scallop 依赖项,

Exception in thread "main" java.lang.NoClassDefFoundError: org/rogach/scallop/ScallopConf

我的 build.sbt 文件如下:

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"
}

如果您的想法可以解决我的问题,请帮助!

非常感谢

1 个答案:

答案 0 :(得分:1)

要在命令行界面中执行scala项目生成的jar,可以使用sbt插件来组装一个胖jar,包括您的库/依赖项。有了这样的jar,您将可以通过java -jar ...

运行您的应用

有几个用于构建胖子的SBT插件。也许最简单的方法是sbt-assembly。

  1. 将此插件添加到文件project/plugins.sbt中(如果需要,请创建此文件): addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.9")
  2. 现在使用sbt构建一个胖子罐:
sbt assembly
  1. 然后通过java -jar YouMainClass
  2. 运行

另一种选择是使用纯sbt通过命令sbt run运行Main class,那么您确实需要构建一个胖子。