2014-09-24 6 views
4

Я хотел бы оценить проект Scala, который я нашел на Github, а именно TRank.Как создать, скомпилировать и запустить проект Scala?

Я нашел файл сборки build.sbt. Мне удалось установить Scala и sbt через homebrew, а затем запустить команду sbt run в корневой папке проекта. В противном случае в конечном итоге с ошибкой:

java.lang.RuntimeException: No main class detected. 
    at scala.sys.package$.error(package.scala:27) 

Теперь файлы проекта находятся в src/main/scala/io/mem0r1es/trank и когда я пытаюсь скомпилировать с помощью scalac или запустить sbt run там я получаю кучу ошибок об объектах, не являющихся членами базы фасованных т.е. object ranking is not a member of package io.mem0r1es.trank

Я бы очень признателен за помощь, зная, как запустить этот проект Scala.

ответ

6

Как вы уже заметили, что проект управляется по 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 проекта.

+0

глядя на Readme в основном репо, говорят: «достаточно создать объект TRanker с любым текстовым контентом» 'class TRanker (content: String) 'это означает, что я могу сделать это непосредственно в REPL? – AhmadAssaf

+0

Да, вы можете, но он не будет «сохраняться» в ваших исходных файлах. Scala REPL отлично подходит для прототипирования, но как только вы закрываете сеанс REPL, изменения исчезли - вы также можете найти ': save'. –

+0

Спасибо за ваши ответы @Jacek. Я отказался от интеграции этого API ранее, так как я потратил столько усилий, чтобы понять его. Но мне это нужно очень скоро, мне было интересно, есть ли у вас некоторое время в следующие дни, чтобы поговорить о запуске этой части кода локально и как API, вызванный из внешнего приложения (например, Node.js) – AhmadAssaf

2

TRANK - это проект SBT. Вам нужно установить SBT с этого сайта http://www.scala-sbt.org/

Тогда вы можете построить его так:

sbt clean compile package 

Это создаст файл банку для вас в цель/папку. После того, как вы получите файл банку, вы можете использовать его так же, как вы используете файлы Jar Java (кроме того, что вы должны использовать Scala включать SCALA библиотечные банки автоматически):

scala -cp /path/to/trank_2.10-1.0.jar com.example.SomeMainClass 
+0

спасибо за ответ, мне удалось увидеть файл .jar, но когда я пытаюсь запустить его, я получаю 'no main manifest attribute, в trank_2.10-1.0.jar' вы знаете, что это может быть? – AhmadAssaf

+0

Это конфигурация проекта. Вы можете просмотреть детали проекта и узнать классы с помощью метода 'main', а затем запустить его так же, как' scala -cp /path/to/trank_2.10-1.0.jar com.example.SomeMainClass' – tuxdna

+0

Я обновил мой ответ. Если вы используете 'java -jar', вам также необходимо включить файлы jar библиотеки Scala. В противном случае просто используйте 'scala' вместо' java'. – tuxdna

Смежные вопросы