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 | sh cs 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.0 Usage: 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-sbt organization [com.example]: org.smartjava package [com.example.app]: org.smartjava.scalatra name [scalatra-sbt-prototype]: hello-scalatra servlet_name [MyScalatraServlet]: HelloScalatraServlet scala_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 [email protected]: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 .