Я работаю над проектом Scala для IntelliJ с SBT в качестве инструмента для сборки. Я недавно начал работать над сборкой sbt. Это моя структура проекта:
Это мой файл build.sbt:
name := "AnalyzeTables"
version := "0.1"
scalaVersion := "2.11.8"
// https://mvnrepository.com/artifact/org.postgresql/postgresql
libraryDependencies += "org.postgresql" % "postgresql" % "42.1.4"
// https://mvnrepository.com/artifact/commons-codec/commons-codec
libraryDependencies += "commons-codec" % "commons-codec" % "1.13"
// https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
libraryDependencies += "org.apache.commons" % "commons-lang3" % "3.8.1"
// https://mvnrepository.com/artifact/log4j/log4j
//libraryDependencies += "log4j" % "log4j" % "1.2.17"
У меня есть Class.forName ("org. postgresql .Driver) в моем коде для подключения к базе данных и запроса. Наряду с этим, в код добавлены расшифровка пароля и логгер. Я запускаю jar в следующем формате:
scala <jarname> <argument I use in my code>
Проблема здесь если я просто отправляю, как я упомянул выше, я вижу ClassNotFoundException для драйвера postgres, поэтому я добавляю его в classpath файла jar и отправляю, как показано ниже.
scala -cp /path/postgresql-42.1.4.jar <jarname> <argument I use in my code>
Теперь я получаю исключение для Logger. Поэтому я снова добавляю его в classpath, и он становится:
scala -cp /path/postgresql-42.1.4.jar:/path/log4j-1.2.17.jar <jarname> <argument I use in my code>
Теперь я получаю исключение для общего кода c, поэтому я также добавил это. scala -cp / path / postgresql -42.1.4.jar: /path/log4j-1.2.17.jar: /path/commons-codec-1.13.jar
Теперь этот jar работает нормально, и я вижу результат. Итак, у меня есть зависимости, добавленные в файл build.sbt. Я также выполнил следующую операцию:
project structure -> Modules -> Dependencies -> + -> jars -> Add all the missing jars that are giving problems
Если я удаляю все параметры -cp
и отправьте банку с помощью: scala <jarname> <argument>
, он снова возвращается к ClassNotFoundException в postgres банку. Так какой смысл добавлять зависимости в файл build.sbt, а затем снова добавлять их в путь к классам? Есть ли какие-то настройки, которые я пропускаю или я смотрю неправильно?
Редактировать: После предложений я создал новый проект, скопировал в него весь код и добавил плагин addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.5")
в новый файл. plugins.sbt
файл, который я создал в каталоге / проекте /, как показано на рисунке ниже.
Я вижу плагин в каталоге sbt-plugins. Но когда я строю банку еще раз и экспортирую, она все равно показывает банку объемом 11 КБ вместо толстой банки.