summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--documentation/getting-started/getting-started-scala.asciidoc128
-rw-r--r--documentation/getting-started/img/hello-world-scala-page.pngbin0 -> 88314 bytes
2 files changed, 80 insertions, 48 deletions
diff --git a/documentation/getting-started/getting-started-scala.asciidoc b/documentation/getting-started/getting-started-scala.asciidoc
index 85d4bec191..b3705b6a38 100644
--- a/documentation/getting-started/getting-started-scala.asciidoc
+++ b/documentation/getting-started/getting-started-scala.asciidoc
@@ -8,44 +8,70 @@ layout: page
= Using Vaadin with Scala
You can use Vaadin with any JVM compatible language, such as Scala or Groovy.
-There are, however, some caveats related to libraries and project set-up. In the
-following, we give instructions for creating a Scala UI in Eclipse, with the
-Scala IDE for Eclipse and the Vaadin Plugin for Eclipse.
-
-. Install the link:http://scala-ide.org/[Scala IDE for Eclipse], either from an
-Eclipse update site or as a bundled Eclipse distribution.
-
-. Open an existing Vaadin Java project or create a new one as outlined in
-<<dummy/../../../framework/getting-started/getting-started-first-project#getting-started.first-project,"Creating
-and Running a Project with Eclipse">>. You can delete the UI class created by
-the wizard.
-
-. Switch to the Scala perspective by clicking the perspective in the upper-right
-corner of the Eclipse window.
-
-. Right-click on the project folder in [guilabel]#Project Explorer# and select
-"Configure > Add Scala Nature".
-
-. The web application needs [filename]#scala-library.jar# in its class path. If
-using Scala IDE, you can copy it from somewhere under your Eclipse installation
-to the class path of the web application, that is, either to the
-[filename]#WebContent/WEB-INF/lib# folder in the project or to the library path
-of the application server. If copying outside Eclipse to a project, refresh the
-project by selecting it and pressing kbd:[F5].
-
-+
-You could also get it with a Maven dependency, just make sure that the
-version is same as what the Scala IDE uses.
-
-
-You should now be able to create a Scala UI class, such as the following:
+This document will help you to set up a **Hello World** project in Vaadin with Scala using Maven.
+
+*It is assumed you already have Java and Maven pre-installed.*
+
+## Getting Started
+* Run the Maven archetype below to get a simple app created:
+```bash
+mvn archetype:generate -DarchetypeGroupId=com.vaadin -DarchetypeArtifactId=vaadin-archetype-application -DarchetypeVersion=8.0.5 -DgroupId=com.pany -DartifactId=ui -Dversion=1.0-SNAPSHOT -Dpackaging=war
+```
+_Note that at this point you could import the project to and IDE like IntelliJ._
+
+* You now should have the Vaadin Java project under the directory `ui`. Since we are doing Scala, delete the `java` directory in `${project_home}/src/main/` and create an empty `scala` directory in the same place.
+
+* Add the following Scala dependency and...
+```xml
+ <dependency>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-library</artifactId>
+ <version>2.12.1</version>
+ </dependency>
+```
+...plugin to your 'pom.xml'
+```xml
+ <plugin>
+ <groupId>net.alchim31.maven</groupId>
+ <artifactId>scala-maven-plugin</artifactId>
+ <version>3.2.2</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>compile</goal>
+ <goal>testCompile</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <scalaCompatVersion>2.12</scalaCompatVersion>
+ <scalaVersion>2.12</scalaVersion>
+ </configuration>
+ </plugin>
+```
+
+* Create the following class in the new-created `scala` directory.
+```scala
+package com.mycompany.myproject
+
+import java.util.Date
+import javax.servlet.annotation.WebServlet
+
+import com.vaadin.annotations.{Theme, VaadinServletConfiguration}
+import com.vaadin.server.{VaadinRequest, VaadinServlet}
+import com.vaadin.ui.Button.{ClickEvent, ClickListener}
+import com.vaadin.ui._
+
+@WebServlet(urlPatterns = Array("/*"), name = "MyScalaUIServlet", asyncSupported = true)
+@VaadinServletConfiguration(ui = classOf[MyScalaUI], productionMode = false)
+class MyScalaUIServlet extends VaadinServlet {
+}
-[source, scala]
-----
@Theme("mytheme")
class MyScalaUI extends UI {
- override def init(request: VaadinRequest) = {
+
+ override def init(request: VaadinRequest): Unit = {
val content: VerticalLayout = new VerticalLayout
setContent(content)
@@ -53,28 +79,34 @@ class MyScalaUI extends UI {
content addComponent label
// Handle user interaction
- content addComponent new Button("Click Me!",
+ content addComponent new Button("Click Me from Scala!",
new ClickListener {
- override def buttonClick(event: ClickEvent) =
+ override def buttonClick(event: ClickEvent): Unit =
Notification.show("The time is " + new Date)
})
}
}
-----
+```
-Eclipse and Scala IDE should be able to import the Vaadin classes automatically
-when you press kbd:[Ctrl+Shift+O].
+* Now just execute:
+```bash
+mvn clean package jetty:run -Dvaadin.productionMode=true
+```
-You need to define the Scala UI class either in a servlet class (in Servlet 3.0
-project) or in a [filename]#web.xml# deployment descriptor, just like described
-in
-<<dummy/../../../framework/getting-started/getting-started-first-project#getting-started.first-project.exploring,"Exploring
-the Project">> for Java UIs.
+* You should get logs containing something similar to:
+```bash
+[INFO] Started ServerConnector@15e41fff{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
+[INFO] Started @9194ms
+[INFO] Started Jetty Server
+[INFO] Using Non-Native Java sun.nio.fs.PollingWatchService
+```
+_The important information here is that Jetty is now running on port 8080_
-ifdef::web[]
-The link:https://github.com/henrikerola/scaladin[Scaladin add-on] offers a more
-Scala-like API for Vaadin. A Vaadin 7 compatible version is under development.
-endif::web[]
+* Go to `localhost:8080` from the web browser and the page should be working:
+
+image::img/hello-world-scala-page.png[]
+
+* If you can see the page above, congratulations you have created your first Vaadin with Scala app.
ifdef::web[]
[[getting-started.scala.lambdas]]
diff --git a/documentation/getting-started/img/hello-world-scala-page.png b/documentation/getting-started/img/hello-world-scala-page.png
new file mode 100644
index 0000000000..10b03b710e
--- /dev/null
+++ b/documentation/getting-started/img/hello-world-scala-page.png
Binary files differ