Почему sbt не создает файлы проекта?

Я попытался установить SBT на свой macbook. Когда я запускаю его, он не спрашивает меня о каких-либо определениях проекта (например, название) и просто говорит

[info] Set current project to default (in build file:/Users/qui/Documents/Programming/test2/)

Затем он переходит к тому, что выглядит как интерпретатор sbt.

Когда я заглядываю в "test2", есть проект и целевой каталог, но я не вижу директорию src для работы с

Очевидно, что я ошибался где-то в моей установке, но я не уверен, где. Любые идеи?

Обновление

Итак, я только что установил 0.10 на новую установку fedora. И я получаю точно такую ​​же проблему, такое же сообщение "info", и он создал только проект и целевой каталог

Я должен делать что-то идиотское право? Что я делаю не так?: Р

Ответы

Ответ 1

Нет, вы не делаете что-то не так, предыдущие версии sbt (0.7.x) спросили вас, хотите ли вы создать свой проект.

sbt version 0.10.x - полная переписывание и не действует одинаково (т.е. попросите создать проект при запуске).

Старый проект был на googlecode, но с тех пор перешел в github, вы можете найти документацию для 0.10.x на https://github.com/harrah/xsbt/wiki, в особенно https://github.com/harrah/xsbt/wiki/Settings, если вы пришли из фона 0.7.x.

Немного трудно обернуть голову вокруг новой системы настроек сначала, но поверьте мне, когда я скажу, что вам понравится:)

Ответ 2

Я работаю с SBT 0.13, поэтому... ваш пробег может отличаться.

поведение по умолчанию sbt

То, что вы испытываете, - это поведение по умолчанию sbt по умолчанию. Инструмент ожидает, что файлы проекта уже находятся на месте или когда нет файлов проекта, которые он не хочет их создавать - значения по умолчанию применяются только к текущему каталогу, который фактически становится каталогом проекта для проекта, называемого именем каталога, в котором он находится. SBT затем открывает оболочку sbt.

jacek:~/sandbox/stackoverflow/testaaa
$ tree
.

0 directories, 0 files

jacek:~/sandbox/stackoverflow/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/stackoverflow/testaaa/)
[testaaa]>

Цитата Running из официальной документации SBT.

Запуск sbt без аргументов командной строки запускает его в интерактивном режиме Режим. Интерактивный режим имеет командную строку (с завершением табуляции и история!).

Пример

В вашем случае, когда вы запустили sbt в /Users/qui/Documents/Programming/test2/, он молча предположил это каталог проекта и применил настройки по умолчанию.

Следующий сеанс sbt также находится в каталоге test2. Я использую help для отображения справки ключа настройки, а затем используйте клавишу для отображения ее значения.

jacek:~/sandbox/stackoverflow/test2
$ tree
.

0 directories, 0 files
jacek:~/sandbox/stackoverflow/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/stackoverflow/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 settings.
      3) Re-evaluates the build 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/stackoverflow/test2/)
[test2]> scalaVersion
[info] 2.10.3

В fooobar.com/questions/8601/... @regis-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/stackoverflow/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/stackoverflow/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/stackoverflow/test2/)
[test2]> session save
[info] Reapplying settings...
[info] Set current project to My test2 sbt project (in build file:/Users/jacek/sandbox/stackoverflow/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 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 base directory.
[test2]> session save
[info] Reapplying settings...
[info] Set current project to test2 (in build file:/Users/jacek/sandbox/stackoverflow/test2/)

Как только вы это сделаете, будет сохранен build.sbt с вашими собственными настройками. Это может быть хорошей отправной точкой для дальнейшей настройки проекта.

jacek:~/sandbox/stackoverflow/test2
$ cat build.sbt
scalaVersion := "2.10.3"

Activator Activator

Согласно домашняя страница Activator Activator:

Активатор классов - это инструмент на основе браузера или командной строки, который помогает разработчики начинают работу с Receptable Platform.

Под обложками Активатор - это пользовательский интерфейс, построенный поверх sbt, как показано Джошем Суэретом в screencast Представляем sbt 0.13.2.

Похоже, это единственное благословенное решение для настройки проектов sbt из многих шаблонов, доступных в Activator.

giter8 - шаблоны проектов (макет) sbt

Если вам нужна какая-то помощь в создании структуры каталогов и готовность к использованию, вы можете использовать giter8, что инструмент командной строки для применения шаблонов, определенных в github

Скажем, вы хотите создать проект с зависимостью scalaz. Вы можете использовать adinapoli/scalaz-revolver (см. список доступных шаблоны).

jacek:~/sandbox/stackoverflow
$ 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/stackoverflow
$ cd scala-sbt-revolver-project/

jacek:~/sandbox/stackoverflow/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#for-sbt-013 есть полное описание того, что нужно для его настройки и создания новых проектов 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/stackoverflow
    $ mkdir np-sandbox/
    jacek:~/sandbox/stackoverflow
    $ cd np-sandbox/
    jacek:~/sandbox/stackoverflow/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/stackoverflow/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/stackoverflow/np-sandbox
    $ tree
    .
    ├── build.sbt
    ├── src
    │   ├── main
    │   │   ├── resources
    │   │   └── scala
    │   └── test
    │       ├── resources
    │       └── scala
    └── target
        └── streams
            └── compile
                └── np
                    └── $global
                        └── out
    
    12 directories, 2 files
    jacek:~/sandbox/stackoverflow/np-sandbox
    $ cat build.sbt
    organization := "me.lessis"
    
    name := "default"
    
    version := "0.1.0-SNAPSHOT"
    

Ответ 3

Как описано в np plugin readme, требуемые шаги:

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

... начать кодирование

Ответ 4

One-liner для создания структуры каталогов и файлов (все пустые):

mkdir -p ./src/{main,test}/{scala,java,resources}; mkdir project; touch build.sbt; touch project/build.properties

Ответ 5

Я нашел и обновил script от Элвина Александра (автор потрясающей книги Scala Cookbook), которая делает именно то, что вы хотите.

Еще раз, я предоставляю bash script, потому что задача создания каталогов и файлов является педантичной, но простой. Создание полноценного плагина для 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, запущенный без каких-либо аргументов, должен вести себя точно, как этот script.