Как я могу выполнить управляемый SBT класс JLine
Я занимаюсь разработкой приложения на основе JLine, которое я, очевидно, хотел бы протестировать при разработке.
JLine - удобная библиотека, которая предоставляет функциональные возможности интерактивной консоли приложениям JVM.
JLine не работает в консоли Intellij, возможно, потому, что они присвоили клавишу табуляции для своих собственных гнусных нужд, и я хочу проверить это завершение табуляции, потому что я реализую некоторые команды завершения табуляции.
Я захожу на консоль SBT и пытаюсь run-main Example simple
, но я выбрасываю исключение, потому что теперь в загрузчике классов есть две библиотеки jline - моя и та, которую использует SBT, так что приложение взрывается при загрузке библиотеки JLine (синглтоны - зло)....
Вздох... Повернись немного на консоли SBT и обнаружи, что я могу бежать:
> show runtime:managed-classpath
[info] List(Attributed(/home/bryan/.sbt/boot/scala-2.10.0/lib/scala-library.jar), Attributed(/home/bryan/.ivy2/cache/org.parboiled/parboiled-scala_2.10/bundles/parboiled-scala_2.10-1.1.5.jar), Attributed(/home/bryan/.ivy2/cache/org.parboiled/parboiled-core/bundles/parboiled-core-1.1.5.jar), Attributed(/home/bryan/.ivy2/cache/jline/jline/jars/jline-2.10.jar))
Я знаю, что могу разобрать этот список, очевидно, пробелы или запятые будут вполне жизнеспособным разделителем, но разработчики Scala, похоже, не подключены таким образом...
Но SBT, кажется, анализирует эту команду, только когда я нахожусь в ее консоли, если я выполняю эту команду с фактической консоли UNIX, вот так:
% sbt show runtime:managed-classpath
[info] Loading project definition from /common/moon_excel/project
[info] Set current project to moon_excel (in build file:/common/moon_excel/)
[error] Not a valid command: show (similar: shell)
[error] Expected whitespace character
[error] Expected '/'
[error] Expected ':'
[error] Not a valid key: show (similar: show-timing)
[error] show
Я пытаюсь автоматизировать процесс, когда у меня есть 100 банок на пути к классам (небольшое преувеличение), какие-либо предложения?
1 ответ
sbt 0.13 (в настоящее время на RC3) перемещает классы JLine так, чтобы они не были видны пользовательскому коду. Это должно избежать конфликтов с вашим кодом. Обратите внимание, что JLine в настоящее время пропускает загрузчики классов, поэтому вы можете получить ошибки PermGen после нескольких запусков.
Ты можешь использовать export runtime:fullClasspath
в 0.13 для экспорта стандартной строки classpath. В более ранних версиях вы можете написать пользовательское задание. Смотрите также плагины, такие как sbt-start-script, которые генерируют скрипт запуска для вас.
Наконец, если возможно, подумайте о написании тестов, которые не нуждаются в интерактивной подсказке. Например, сам sbt имеет некоторые свойства ScalaCheck для своей библиотеки завершения.