Как вы уже заметили, что проект управляется по sbt.
Чтобы упаковать проект, то есть создать банку со всеми артефактами проекта, которые должны быть распределены, вы выполняете package
.
> package
[info] Updating {file:/Users/jacek/sandbox/TRank/}trank...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Compiling 13 Scala sources to /Users/jacek/sandbox/TRank/target/scala-2.10/classes...
[warn] there were 1 deprecation warning(s); re-run with -deprecation for details
[warn] one warning found
[info] Packaging /Users/jacek/sandbox/TRank/target/scala-2.10/trank_2.10-1.0.jar ...
[info] Done packaging.
По умолчанию SBT управляет источниками под src/main/scala
каталога. Здесь вы можете найти объект App
для запуска.
В sbt run
ищет все источники под src/main/scala
для приложений.
> help run
Runs a main class, passing along arguments provided on the command line.
Если проект не имеет основных классов, ошибка печатается:
> run
java.lang.RuntimeException: No main class detected.
at scala.sys.package$.error(package.scala:27)
[trace] Stack trace suppressed: run last compile:run for the full output.
[error] (compile:run) No main class detected.
[error] Total time: 0 s, completed Sep 24, 2014 9:40:52 PM
Это означает, что проект не имеет основных классов, но есть и другие способы, чтобы «доказать», что API работает правильно - с помощью тестов.
Выполнить test
огонь испытания:
> test
[info] Compiling 5 Scala sources to /Users/jacek/sandbox/TRank/target/scala-2.10/test-classes...
[warn] there were 2 feature warning(s); re-run with -feature for details
[warn] one warning found
[info] ANC_DEPTHSpec:
[info] An ANC_DEPTH ranker
[info] - should rank types properly
[info] - should not fail when no types are provided
[info] ANCESTORSSpec:
[info] An ANCESTORS ranker
[info] - should rank types properly
[info] - should not fail when no types are provided
[info] DEPTHSpec:
[info] A DEPTH ranker
[info] - should rank types by maximum depth
[info] - should not fail when no types are provided
Loading classifier from edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz ... [info] PreProcessorSpec:
[info] A PreProcessor
[info] - should remove boilerplate from HTML content
[info] - should leave intact textual content
[info] - should not fail with empty content
done [2.8 sec].
[info] NERSpec:
[info] A NER
[info] - should extract entity labels
[info] - should not fail with content without Named Entities
[info] - should not fail with empty content
[info] Passed: Total 12, Failed 0, Errors 0, Passed 12
[success] Total time: 4 s, completed Sep 24, 2014 9:42:09 PM
Таким образом, чтобы узнать проект, который вы должны проанализировать источники тестов (под src/test/scala
) и scaladoc, что вы можете создать с помощью doc
задачи:
> doc
[info] Main Scala API documentation to /Users/jacek/sandbox/TRank/target/scala-2.10/api...
model contains 20 documentable templates
[info] Main Scala API documentation successful.
[success] Total time: 1 s, completed Sep 24, 2014 9:43:22 PM
Вы также можете использовать задачу console
, чтобы войти в Scala REPL и играть с типами самостоятельно.
> console
[info] Starting scala interpreter...
[info]
Welcome to Scala version 2.10.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_20).
Type in expressions to have them evaluated.
Type :help for more information.
scala>
С тестами, в scaladoc и Scala РЕПЛ, вы должны быть все готово, чтобы узнать API проекта.
глядя на Readme в основном репо, говорят: «достаточно создать объект TRanker с любым текстовым контентом» 'class TRanker (content: String) 'это означает, что я могу сделать это непосредственно в REPL? – AhmadAssaf
Да, вы можете, но он не будет «сохраняться» в ваших исходных файлах. Scala REPL отлично подходит для прототипирования, но как только вы закрываете сеанс REPL, изменения исчезли - вы также можете найти ': save'. –
Спасибо за ваши ответы @Jacek. Я отказался от интеграции этого API ранее, так как я потратил столько усилий, чтобы понять его. Но мне это нужно очень скоро, мне было интересно, есть ли у вас некоторое время в следующие дни, чтобы поговорить о запуске этой части кода локально и как API, вызванный из внешнего приложения (например, Node.js) – AhmadAssaf