Исключение в потоке "main" java.lang.NoClassDefFoundError: org / rogach / scallop / ScallopConf - PullRequest
2 голосов
/ 24 марта 2019

Поскольку я хочу выполнить jar, сгенерированный моим проектом scala в интерфейсе командной строки, я получаю следующую проблему: Exception in thread "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
    )
  )

Если у вас есть идея, которая может решить мою проблему, ПОМОГИТЕ!

Большое спасибо заранее

1 Ответ

1 голос
/ 25 марта 2019

Чтобы выполнить jar, сгенерированный вашим проектом scala в интерфейсе командной строки, вы можете использовать плагин sbt для сборки fat-jar, включая ваши библиотеки / зависимости. Имея такую ​​банку, вы сможете запустить свое приложение через java -jar ...

Существует несколько плагинов SBT для создания толстой фляги. Возможно, самым простым будет сборка sbt.

  1. Добавьте этот плагин в файл project/plugins.sbt (создайте этот файл при необходимости): addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.9")
  2. Теперь используйте sbt для создания баночки:
sbt assembly
  1. Затем запустите через java -jar YouMainClass

Другой вариант - использовать чистый sbt для запуска класса Main с помощью команды sbt run, тогда вам действительно нужно создать толстую флягу.

...