Почему sbt не создает файлы проекта?
Я попытался установить SBT на мой MacBook. Когда я запускаю его, он не спрашивает у меня никаких определений проекта (например, название) и просто говорит
[info] Set current project to default (in build file:/Users/qui/Documents/Programming/test2/)
Затем он переходит к тому, что выглядит как интерпретатор sbt.
Когда я заглядываю внутрь "test2", есть проект и целевой каталог, но я не вижу каталог src для работы с
Я явно ошибся где-то в моей установке, но я не уверен, где. Есть идеи?
Обновить
Так что я только что установил 0.10 на свежую установку Fedora. И я получаю точно такую же проблему, то же сообщение "информация", и он только создал проект и целевой каталог
Я должен делать что-то идиотское право? Что я делаю неправильно?:п
5 ответов
Нет, вы не ошибаетесь, предыдущие версии sbt (0.7.x) спрашивали вас, хотите ли вы создать свой проект.
SBT версии 0.10.x является полностью переписанным и не действует аналогичным образом (т.е. просит вас создать проект при запуске).
Старый проект был на googlecode, но с тех пор перешел на github, документацию для 0.10.x можно найти по адресу https://github.com/harrah/xsbt/wiki, в частности https://github.com/harrah/xsbt/wiki/Settings, если вы пришли из фона 0.7.x.
Поначалу сложно обдумать новую систему настроек, но поверьте мне, когда я скажу, что вам понравится:)
Я работаю с SBT 0.13, поэтому... ваш пробег может отличаться.
поведение по умолчанию sbt
То, что вы испытываете, является поведением sbt по умолчанию. Инструмент ожидает, что файлы проекта уже находятся на месте или когда нет файлов проекта, он не потрудится создать их - значения по умолчанию просто применяются к текущему каталогу, который фактически становится каталогом проекта для проекта, называемого именем каталога, в котором он находится. SBT открывает оболочку sbt.
jacek:~/sandbox/stackru/testaaa
$ tree
.
0 directories, 0 files
jacek:~/sandbox/stackru/testaaa
$ sbt
[info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins
[info] Updating {file:/Users/jacek/.sbt/0.13/plugins/}global-plugins...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Set current project to testaaa (in build file:/Users/jacek/sandbox/stackru/testaaa/)
[testaaa]>
Цитата Бег из официальной документации SBT.
Запуск sbt без аргументов командной строки запускает его в интерактивном режиме. Интерактивный режим имеет командную строку (с завершением вкладки и истории!).
пример
В вашем случае, когда вы начали sbt в /Users/qui/Documents/Programming/test2/
он молча предположил, что это каталог проекта и применил настройки по умолчанию.
Следующая сессия SBT находится в test2
каталог тоже. я использую help
чтобы отобразить подсказку клавиши настройки, а затем используйте клавишу, чтобы отобразить ее значение.
jacek:~/sandbox/stackru/test2
$ tree
.
0 directories, 0 files
jacek:~/sandbox/stackru/test2
$ sbt
[info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins
[info] Set current project to test2 (in build file:/Users/jacek/sandbox/stackru/test2/)
[test2]> help name
Project name.
[test2]> name
[info] test2
[test2]> help organization
Organization/group ID.
[test2]> organization
[info] default
[test2]> help version
The version/revision of the current module.
[test2]> version
[info] 0.1-SNAPSHOT
[test2]> help scalaVersion
The version of Scala used for building.
[test2]> scalaVersion
[info] 2.10.2
(Я изменил подсказку, чтобы перед началом отображения отображалось имя проекта, т. Е. Имя каталога, в котором был запущен sbt). >
).
Вы можете изменить значение ключа с помощью set
Команда, которая оценивает параметр и применяет его к текущему проекту.
[test2]> help set
set [every] <setting-expression>
Applies the given setting to the current project:
1) Constructs the expression provided as an argument by compiling and loading it.
2) Appends the new setting to the current project's settings.
3) Re-evaluates the build's settings.
This command does not rebuild the build definitions, plugins, or configurations.
It does not automatically persist the setting(s) either.
To persist the setting(s), run 'session save' or 'session save-all'.
If 'every' is specified, the setting is evaluated in the current context
and the resulting value is used in every scope. This overrides the value
bound to the key everywhere.
[test2]> set scalaVersion := "2.10.3"
[info] Defining *:scalaVersion
[info] The new value will be used by *:allDependencies, *:dependencyUpdatesData and 11 others.
[info] Run `last` for details.
[info] Reapplying settings...
[info] Set current project to test2 (in build file:/Users/jacek/sandbox/stackru/test2/)
[test2]> scalaVersion
[info] 2.10.3
В другом вопросе о Stackru Régis Jean-Gilles показано, как установить другие параметры с помощью set
команда.
[test2]> set name := "My test2 sbt project"
[info] Defining *:name
[info] The new value will be used by *:description, *:normalizedName and 8 others.
[info] Run `last` for details.
[info] Reapplying settings...
[info] Set current project to My test2 sbt project (in build file:/Users/jacek/sandbox/stackru/test2/)
[test2]> set version := "1.0"
[info] Defining *:version
[info] The new value will be used by *:isSnapshot, *:projectId and 5 others.
[info] Run `last` for details.
[info] Reapplying settings...
[info] Set current project to My test2 sbt project (in build file:/Users/jacek/sandbox/stackru/test2/)
[test2]> set scalaVersion := "2.10.3"
[info] Defining *:scalaVersion
[info] The new value will be used by *:allDependencies, *:dependencyUpdatesData and 11 others.
[info] Run `last` for details.
[info] Reapplying settings...
[info] Set current project to My test2 sbt project (in build file:/Users/jacek/sandbox/stackru/test2/)
[test2]> session save
[info] Reapplying settings...
[info] Set current project to My test2 sbt project (in build file:/Users/jacek/sandbox/stackru/test2/)
[test2]> exit
build.sbt
Затем файл будет содержать все настройки, как если бы они были установлены в первую очередь.
$ cat build.sbt
name := "My test2 sbt project"
version := "1.0"
scalaVersion := "2.10.3"
По умолчанию sbt создает различные файлы в target
каталог. Когда вы смотрите внутрь target
каталог, файлов нет - просто пустой каталог. То же самое относится и к project
что также может или не может держать target
каталог. Предполагается, что они доступны, а если нет, они создаются по умолчанию.
Когда вы меняете настройку в интерактивной оболочке sbt (с set
), вы можете сохранить сеанс с session save
,
[test2]> help session
session <command>
Manipulates session settings, which are temporary settings that do not persist past the current sbt execution (that is, the current session).
Valid commands are:
clear, clear-all
Removes temporary settings added using 'set' and re-evaluates all settings.
For 'clear', only the settings defined for the current project are cleared.
For 'clear-all', all settings in all projects are cleared.
list, list-all
Prints a numbered list of session settings defined.
The numbers may be used to remove individual settings or ranges of settings using 'remove'.
For 'list', only the settings for the current project are printed.
For 'list-all', all settings in all projets are printed.
remove <range-spec>
<range-spec> is a comma-separated list of individual numbers or ranges of numbers.
For example, 'remove 1,3,5-7'.
The temporary settings at the given indices for the current project are removed and all settings are re-evaluated.
Use the 'list' command to see a numbered list of settings for the current project.
save, save-all
Makes the session settings permanent by writing them to a '.sbt' configuration file.
For 'save', only the current project's settings are saved (the settings for other projects are left alone).
For 'save-all', the session settings are saved for all projects.
The session settings defined for a project are appended to the first '.sbt' configuration file in that project.
If no '.sbt' configuration file exists, the settings are written to 'build.sbt' in the project's base directory.
[test2]> session save
[info] Reapplying settings...
[info] Set current project to test2 (in build file:/Users/jacek/sandbox/stackru/test2/)
Как только вы это сделаете, build.sbt
с вашими настройками сохранены. Это может быть хорошей отправной точкой для дальнейшей настройки проекта.
jacek:~/sandbox/stackru/test2
$ cat build.sbt
scalaVersion := "2.10.3"
Typesafe Activator
Согласно домашней странице активатора Typesafe:
Typesafe Activator - это инструмент на основе браузера или командной строки, который помогает разработчикам начать работу с Typesafe Reactive Platform.
Под прикрытием Activator представляет собой пользовательский интерфейс, построенный поверх sbt, как было продемонстрировано Джошом Суэретом в скриншоте " Представляем sbt 0.13.2".
Похоже, что это единственное благословенное решение для настройки проектов sbt из множества шаблонов, доступных в Activator.
giter8 - шаблон проекта (верстка) sbt
Однако, если вам нужна помощь, чтобы выстроить структуру каталогов и иметь готовую к использованию настройку проекта, вы можете использовать giter8 - инструмент командной строки для применения шаблонов, определенных на github.
Скажем, вы хотите создать проект со скалярной зависимостью. Вы можете использовать https://github.com/adinapoli/scalaz-revolver.g8.git (см. Список доступных шаблонов).
jacek:~/sandbox/stackru
$ g8 adinapoli/scalaz-revolver
Simple scala project with sbt-revolver
organization [org.example]: pl.japila
name [Scala sbt-revolver project]:
scala_version [2.9.2]: 2.10.3
version [0.1-SNAPSHOT]:
Template applied in ./scala-sbt-revolver-project
jacek:~/sandbox/stackru
$ cd scala-sbt-revolver-project/
jacek:~/sandbox/stackru/scala-sbt-revolver-project
$ tree
.
├── README
├── build.sbt
├── project
│ ├── Build.scala
│ ├── build.properties
│ └── plugins.sbt
└── src
└── main
└── scala
└── pl
└── japila
└── ScalaSbtrevolverProject.scala
6 directories, 6 files
См. Создание каталога проекта с исходным кодом, чтобы узнать больше.
np - создание нового проекта sbt стало простым (r)
Как указано в комментариях к @0__ ниже, есть еще один проект, направленный на упрощение создания новых проектов в sbt - np. Это кажется именно то, что вам нужно.
В https://github.com/softprops/np есть полное описание того, что необходимо для его настройки и создания новых проектов sbt с помощью утилиты, которая сводится к:
Регистрация плагина sbt. Добавьте следующее к
~/.sbt/0.13/plugins/np.sbt
,addSbtPlugin("me.lessis" % "np" % "0.2.0")
Определить пользовательские глобальные переопределения в
~/.sbt/0.13/np.sbt
, Добавьте следующее в файл.seq(npSettings:_*) (NpKeys.defaults in (Compile, NpKeys.np)) ~= { _.copy(org="me.lessis", version="0.1.0-SNAPSHOT") }
Используйте команду плагина np -
np
, Создайте пустой каталог для проекта sbt и запуститеsbt np
,jacek:~/sandbox/stackru $ mkdir np-sandbox/ jacek:~/sandbox/stackru $ cd np-sandbox/ jacek:~/sandbox/stackru/np-sandbox $ sbt np [info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins [info] Set current project to np-sandbox (in build file:/Users/jacek/sandbox/stackru/np-sandbox/) [info] Generated build file [info] Generated source directories [success] Total time: 0 s, completed Dec 7, 2013 12:51:42 PM jacek:~/sandbox/stackru/np-sandbox $ tree . ├── build.sbt ├── src │ ├── main │ │ ├── resources │ │ └── scala │ └── test │ ├── resources │ └── scala └── target └── streams └── compile └── np └── $global └── out 12 directories, 2 files jacek:~/sandbox/stackru/np-sandbox $ cat build.sbt organization := "me.lessis" name := "default" version := "0.1.0-SNAPSHOT"
Как описано в readme для плагина np, необходимо выполнить следующие шаги:
mkdir -p src/{main,test}/scala
touch build.sbt && vi build.sbt # fill in the basics (name, organization, version)
touch README.md && vi README.md
sbt
... начать кодирование
Одна строка для создания структуры каталогов и файлов (все пусто):
mkdir -p ./src/{main,test}/{scala,java,resources}; mkdir project; touch build.sbt; touch project/build.properties
Я нашел и обновил сценарий Элвина Александра (автора удивительной книги Scala Cookbook), который делает именно то, что вы хотите.
Еще раз, я предоставляю сценарий bash, потому что задача создания каталогов и файлов педантична, но проста. Создание полноценного плагина для SBT для этого является излишним.
This script creates an SBT project directory beneath the current directory.
Directory/Project Name (MyFirstProject): ProjectX
Create .gitignore File? (Y/n):
Create README.md File? (Y/n):
-----------------------------------------------
Directory/Project Name: ProjectX
Create .gitignore File?: y
Create README.md File?: y
-----------------------------------------------
Create Project? (Y/n):
Project created. See the following URL for build.sbt examples:
http://alvinalexander.com/scala/sbt-syntax-examples
$ cat build.sbt
name := "ProjectX"
version := "1.0"
scalaVersion := "2.11.7"
$
И наконец, я считаю, что SBT, запущенный без каких-либо аргументов, должен вести себя точно так же, как этот скрипт.