Подтвердить что ты не робот

Использование SBT для создания чистого Java-проекта

Исторически я использовал Ant + Ivy или Maven для создания моих проектов Java. Теперь я рассматриваю решения, не основанные на xml.

Gradle может компилировать, создавать jar и публиковать мой проект с несколькими проблемами.

Могу ли я сделать то же самое с SBT? Если да, можете ли вы предоставить простой пример использования sbt для создания только проекта java.

4b9b3361

Ответ 1

Да, это вполне возможно. Ничего, чтобы установить действительно, небольшой файл build.sbt должен сделать трюк, что-то вроде:

organization := "your.group.id"

name := "Your project"

version := "1.0-SNAPSHOT"

libraryDependencies ++= Seq( <any normal jar deps> )

И запустите sbt package из командной строки.

Ответ 2

Для меня это также помогло немного удалить информацию о версии scala из созданных путей артефактов, как описано в этом ответе. Вы также захотите удалить библиотеку scala в качестве зависимости от любого опубликованного файла pom или ivy.

Здесь вам понадобится:

crossPaths := false
autoScalaLibrary := false

Ответ 3

Что вы можете. Вот пример конфигурации:

name := "myName"
version := "0.1"
organization := "org.myorganization"

javacOptions in (Compile, compile) ++= Seq("-source", "1.8", "-target", "1.8", "-g:lines")

crossPaths := false // drop off Scala suffix from artifact names.
autoScalaLibrary := false // exclude scala-library from dependencies

Подводя итоги. Я люблю SBT, но я чувствовал необходимость написать полную сборку со всеми хитрыми частями использования ее для Java. Обратите внимание, что эта настройка может быть лучше, чем maven, потому что у вас будут хорошие функции, такие как инкрементное тестирование или даже инкрементные прогоны. Также рассмотрите возможность добавления плагина sbt-assembly, если у вас есть зависимости и вы хотите создать толстые фляги (исполняемые файлы).

Ответ 4

Вот хороший пример build.sbt для чистых источников Java в Xerial blog, в том числе о том, как публиковать артефакты в стиле Maven без Scala тег версии.