Почему этап sbt завершается с ошибкой с недействительной командой?

Я получаю сообщения об ошибках, когда пытаюсь подготовить свое приложение с помощью sbt clean compile stage:

[error] Not a valid command: stage
[error] Not a valid project ID: stage
[error] Expected ':' (if selecting a configuration)
[error] Not a valid key: stage
[error] stage
[error]      ^

Я делал это сотни раз на других машинах без проблем. У меня SBT 0.13.5 - кто-нибудь видел это раньше? Я прочитал этот другой пост, но я не на Heroku. Спасибо.


person ovo    schedule 23.10.2014    source источник


Ответы (2)


После комментариев выше Я понял, что вы просто хотели иметь команду stage без использования всего Play foo.

Команда stage является частью sbt-native-packager, которая:

Цель [плагина] состоит в том, чтобы иметь возможность объединять программное обеспечение Scala, созданное с помощью SBT, для собственных систем упаковки, таких как deb, rpm, homebrew, msi.

Одной из особенностей плагина sbt-native-packager является команда stage, которая

> help stage
Create a local directory with all the files laid out as they would be in the final distribution.

Просто добавьте следующее в project/plugins.sbt, чтобы плагин был доступен в проекте (после комментарий Muki в примере используется последняя версия 1.0.0-M1 с функцией автоплагина):

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.0-M1")

Вам также нужно будет добавить следующее к build.sbt:

enablePlugins(JavaAppPackaging)

И это все! Теперь все готово.

Выполнить stage.

> stage
[info] Packaging /Users/jacek/dev/sandbox/command-build-scala/target/scala-2.10/command-build-scala_2.10-0.1-SNAPSHOT-sources.jar ...
[info] Done packaging.
[info] Updating {file:/Users/jacek/dev/sandbox/command-build-scala/}command-build-scala...
[info] Wrote /Users/jacek/dev/sandbox/command-build-scala/target/scala-2.10/command-build-scala_2.10-0.1-SNAPSHOT.pom
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Packaging /Users/jacek/dev/sandbox/command-build-scala/target/scala-2.10/command-build-scala_2.10-0.1-SNAPSHOT-javadoc.jar ...
[info] Done packaging.
[info] Packaging /Users/jacek/dev/sandbox/command-build-scala/target/scala-2.10/command-build-scala_2.10-0.1-SNAPSHOT.jar ...
[info] Done packaging.
[success] Total time: 0 s, completed Nov 5, 2014 2:55:55 PM
person Jacek Laskowski    schedule 24.10.2014
comment
Или прогуляйтесь по дикой стороне, используя sbt 0.13.5 и sbt-native-packager 1.0.0-M1 и просто: enablePlugins(JavaServerAppPackaging) - person Muki; 27.10.2014
comment
Ууууу! Я бы сказал, наконец! Разве enablePlugins не является частью 0.13.6? - person Jacek Laskowski; 27.10.2014
comment
Насколько я знаю, это уже часть 0.13.5. Однако это не должно иметь значения, потому что версии 0.13.5 и 0.13.6 должны быть совместимы. - person Muki; 02.11.2014
comment
Обновлено! Спасибо @Muki - person Jacek Laskowski; 05.11.2014
comment
Это выглядит многообещающе, но я не верю, что это эквивалентно плагину sbt stage, который поставляется с фреймворком Play, который создает не пакет ОС, а uberjar со всеми включенными зависимостями, что мне действительно нужно. - person ovo; 05.11.2014
comment
На самом деле я только что добавил приведенный ниже код в plugins.sbt, и «sbt stage» работает как шарм, создавая uberjar в целевом каталоге: resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/" The issue now is I have Play's listener trying to grab port 9000, and I already have a service there -- I can configure it for a different port, but I just don't need a listener in this app. // The Play plugin addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.5") - person ovo; 05.11.2014
comment
Вы можете сделать то же самое с sbt-native-packager и sbt-assembly. scala-sbt.org/sbt-native- упаковщик/DetailedTopics/ - person Muki; 06.11.2014
comment
Ах, uberjar штуковина — это то, что sbt-assembly дает вам из коробки. Установите его, и sbt assembly даст вам uberjar. Однако это не то, о чем вы просили в исходном вопросе. - person Jacek Laskowski; 06.11.2014

После долгих поисков я обнаружил, что «стадия» реализована с помощью плагина из платформы Play, которую я использую в своих другие проекты и объясняет, почему sbt принял команду сцены.

person ovo    schedule 23.10.2014
comment
Значит ли это, что вы неправильно настроили проект, т.е. project/plugins.sbt без addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.5")? - person Jacek Laskowski; 24.10.2014
comment
Верный. Я просто не хочу переносить всю платформу Play в это другое приложение, которое является серверной службой без HTTP-интерфейса. - person ovo; 24.10.2014
comment
Не бойся. Плагин изменяет сам sbt дополнительными задачами и настройками, и если вы не используете его явно в своем приложении, они нигде не отображаются. - person Jacek Laskowski; 24.10.2014