Статьи

Начало работы со Scala и Scalatra

Scalatra — это легкая основанная на Scala микро-фреймворк, которую можно использовать для создания высокопроизводительных веб-сайтов и API. В этом уроке мы начнем с установки скалатры и импортируем наш тестовый проект в Eclipse.

SBT и giter8

Прежде чем начать, вам необходимо установить несколько инструментов (я предполагаю, что у вас установлен JDK 1.6+). Я дам вам краткие инструкции по установке, а расширенную версию этого можно найти на следующей странице скалатры ( http://www.scalatra.org/getting-started/first-steps.html ). Этот подход должен работать для большинства сред, однако для меня он не работал … Он загружал старые версии giter8 и старую версию sbt. Для sbt я использовал macports, чтобы получить последнюю версию:

port install sbt

И я также скачал giter8 вручную.

curl https://raw.github.com/n8han/conscript/master/setup.sh | sh
cs n8han/giter8

Эта последняя команда установит g8 в ваш каталог / bin. Я проверил это с этой версией G8:

~/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

Создать начальный проект

Перейдите в корневой каталог, в котором вы храните свои проекты, и выполните следующее:

[email protected]:~/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 в каталоге, в котором находится проект.

./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». Это загрузит много вещей и, наконец, запустит приложение:

[email protected]:~/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, и вы увидите следующий экран:

localhost_8080.jpg

Импорт в Eclipse

Я обычно разрабатываю с Eclipse, поэтому в этом случае давайте убедимся, что мы можем редактировать исходный код в Eclipse. Для этого мы можем использовать плагин sbt eclipse. Добавить этот плагин очень легко. Перейдите в папку «project» и добавьте следующее (с пустой строкой перед ним) в файл plugins.sbt.

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.1.0")

Когда вы в следующий раз запустите sbt, вы увидите много загружаемого материала. Из sbt запустите ‘eclipse’ и файлы конфигурации eclipse (.classpath и .project) будут созданы. Теперь запустите Eclipse IDE, и вы сможете импортировать только что созданный проект (убедитесь, что вы также установили scala-ide для Eclipse ).

Scala - hello-scalatra_src_main_scala_org_smartjava_scalatra_HelloScalatraServlet.

Теперь мы можем запустить контейнер и позволить sbt прослушивать изменения в наших ресурсах.

$ sbt
> container:start
> ~ ;copy-resources;aux-compile

Каждый раз, когда мы сохраняем файл в Eclipse, sbt будет копировать и перекомпилировать ресурсы. Таким образом, мы можем напрямую видеть наши измененные файлы в браузере. Откройте файл HelloScalatraServlet и измените текст приветствия. Если вы сохраните это, sbt перезагрузит приложение и вы сразу увидите измененные файлы.

localhost_8080-1.jpg

Вот и все для этого урока!