SBT и giter8
Прежде чем начать, вам необходимо установить несколько инструментов (я предполагаю, что у вас установлен JDK 1.6+). Я дам вам краткие инструкции по установке, а расширенную версию этого можно найти на следующей странице скалатры ( http://www.scalatra.org/getting-started/first-steps.html ). Этот подход должен работать для большинства сред, однако для меня он не работал … Он загружал старые версии giter8 и старую версию sbt. Для sbt я использовал macports, чтобы получить последнюю версию:
|
1
|
port install sbt |
И я также скачал giter8 вручную.
|
1
2
|
curl https://raw.github.com/n8han/conscript/master/setup.sh | shcs n8han/giter8 |
Эта последняя команда установит g8 в ваш каталог / bin. Я проверил это с этой версией G8:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
~/bin/g8 giter8 0.5.0Usage: g8 [TEMPLATE] [OPTION]...Apply specified template. OPTIONS -b, --branch Resolves a template within a given branch --paramname=paramvalue Set given parameter value and bypass interaction. Apply template and interactively fulfill parameters. g8 n8han/giter8 Or g8 git://github.com/n8han/giter8.git Apply template from a remote branch g8 n8han/giter8 -b some-branch Apply template from a local repo g8 file://path/to/the/repo Apply given name parameter and use defaults for all others. g8 n8han/giter8 --name=template-test |
Создать начальный проект
Перейдите в корневой каталог, в котором вы храните свои проекты, и выполните следующее:
|
1
2
3
4
5
6
7
|
jos@Joss-MacBook-Pro.local:~/dev/scalatra/firststeps$ g8 scalatra/scalatra-sbtorganization [com.example]: org.smartjavapackage [com.example.app]: org.smartjava.scalatra name [scalatra-sbt-prototype]: hello-scalatraservlet_name [MyScalatraServlet]: HelloScalatraServletscala_version [2.9.1]: version [0.1.0-SNAPSHOT]: |
Это создаст папку hello-scalatra в каталоге, в котором находится проект.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
./build.sbt./project./project/build.properties./project/plugins.sbt./README.md./src./src/main./src/main/resources./src/main/resources/logback.xml./src/main/scala./src/main/scala/org./src/main/scala/org/smartjava./src/main/scala/org/smartjava/scalatra./src/main/scala/org/smartjava/scalatra/HelloScalatraServlet.scala./src/main/scala/Scalatra.scala./src/main/webapp./src/main/webapp/WEB-INF./src/main/webapp/WEB-INF/layouts./src/main/webapp/WEB-INF/layouts/default.scaml./src/main/webapp/WEB-INF/views./src/main/webapp/WEB-INF/views/hello-scalate.scaml./src/main/webapp/WEB-INF/web.xml./src/test./src/test/scala./src/test/scala/org./src/test/scala/org/smartjava./src/test/scala/org/smartjava/scalatra./src/test/scala/org/smartjava/scalatra/HelloScalatraServletSpec.scala |
Чтобы проверить, все ли работает, зайдите в этот каталог и используйте sbt, чтобы запустить приложение из sbt с «container: start». Это загрузит много вещей и, наконец, запустит приложение:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
jos@Joss-MacBook-Pro.local:~/dev/scalatra/firststeps/hello-scalatra$ sbt[info] Loading project definition from /Users/jos/Dev/scalatra/firststeps/hello-scalatra/project[info] Set current project to hello-scalatra (in build file:/Users/jos/Dev/scalatra/firststeps/hello-scalatra/)> container:start[info] jetty-8.1.5.v20120716[info] NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet[info] started o.e.j.w.WebAppContext{/,[file:/Users/jos/Dev/scalatra/firststeps/hello-scalatra/src/main/webapp/]}[info] started o.e.j.w.WebAppContext{/,[file:/Users/jos/Dev/scalatra/firststeps/hello-scalatra/src/main/webapp/]}15:12:44.604 [pool-6-thread-4] INFO o.scalatra.servlet.ScalatraListener - Initializing life cycle class: Scalatra[info] started o.e.j.w.WebAppContext{/,[file:/Users/jos/Dev/scalatra/firststeps/hello-scalatra/src/main/webapp/]}15:12:44.727 [pool-6-thread-4] INFO o.f.s.servlet.ServletTemplateEngine - Scalate template engine using working directory: /var/folders/mc/vvzshptn22lg5zpp7fdccdzr0000gn/T/scalate-5609005579304140836-workdir[info] Started SelectChannelConnector@0.0.0.0:8080[success] Total time: 1 s, completed Sep 7, 2012 3:12:44 PM>[success] Total time: 1 s, completed Sep 7, 2012 3:10:05 PM |
Чтобы проверить, все ли правильно, наведите браузер на localhost: 8080, и вы увидите следующий экран:
Импорт в Eclipse
Я обычно разрабатываю с Eclipse, поэтому в этом случае давайте убедимся, что мы можем редактировать исходный код в Eclipse. Для этого мы можем использовать плагин sbt eclipse. Добавить этот плагин очень легко. Перейдите в папку «project» и добавьте следующее (с пустой строкой перед ним) в файл plugins.sbt.
|
1
|
addSbtPlugin('com.typesafe.sbteclipse' % 'sbteclipse-plugin' % '2.1.0') |
Когда вы в следующий раз запустите sbt, вы увидите много загружаемого материала. Из sbt запустите ‘eclipse’ и файлы конфигурации eclipse (.classpath и .project) будут созданы. Теперь запустите Eclipse IDE, и вы сможете импортировать только что созданный проект (убедитесь, что вы также установили scala-ide для Eclipse ).
Теперь мы можем запустить контейнер и позволить sbt прослушивать изменения в наших ресурсах.
|
1
2
3
|
$ sbt> container:start> ~ ;copy-resources;aux-compile |
Каждый раз, когда мы сохраняем файл в Eclipse, sbt будет копировать и перекомпилировать ресурсы. Таким образом, мы можем напрямую видеть наши измененные файлы в браузере. Откройте файл HelloScalatraServlet и измените текст приветствия. Если вы сохраните это, sbt перезагрузит приложение и вы сразу увидите измененные файлы.
Вот и все для первой части этого урока. На следующей неделе мы рассмотрим, как мы можем использовать скалатру для создания сервиса на основе REST.
Приятного кодирования и не забудьте поделиться!
Ссылка: Учебное пособие: Начало работы со scala и scalatra — часть I от нашего партнера по JCG Йоса Дирксена из блога Smart Java .


