Skip to content

Instantly share code, notes, and snippets.

@samie
Last active February 15, 2018 15:41
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save samie/e2bc8f690ddd6f2fa653 to your computer and use it in GitHub Desktop.
Save samie/e2bc8f690ddd6f2fa653 to your computer and use it in GitHub Desktop.
Minimal Standalone Vaadin Application Jar with Maven (~ 7.7MB)
package org.vaadin.lightvaadin;
import com.vaadin.server.VaadinServlet;
import java.util.EventListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
/** Minimal Servlet bootstrap for Vaadin application.
*
* @author Sami Ekblad
*/
public class App {
public static void main(String[] args) {
Server server = new Server(8080);
ServletContextHandler contextHandler
= new ServletContextHandler(ServletContextHandler.SESSIONS);
contextHandler.setContextPath("/");
ServletHolder sh = new ServletHolder(new VaadinServlet());
contextHandler.addServlet(sh, "/*");
contextHandler.setInitParameter("ui", HelloWorldUI.class.getCanonicalName());
// Register cdn.virit.in if present
try {
Class cls = Class.forName("in.virit.WidgetSet");
if (cls != null) {
contextHandler.getSessionHandler().addEventListener((EventListener) cls.newInstance());
}
} catch (Exception ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
server.setHandler(contextHandler);
try {
server.start();
server.join();
} catch (Exception ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
package org.vaadin.lightvaadin;
import com.vaadin.annotations.Theme;
import com.vaadin.annotations.Title;
import com.vaadin.server.VaadinRequest;
import com.vaadin.ui.*;
import com.vaadin.ui.Button.ClickEvent;
import java.util.Date;
@Title("Light Vaadin")
@Theme("valo")
public class HelloWorldUI extends UI {
private static final long serialVersionUID = 1L;
private CssLayout layout;
protected void init(VaadinRequest request) {
layout = new CssLayout();
setContent(layout);
layout.addComponent(new Label("Hello world"));
layout.addComponent(new Button("Click me", new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
Notification.show("Hello at " + new Date());
}
}));
}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.vaadin.directory</groupId>
<artifactId>light-vaadin</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<vaadin.version>7.4.2</vaadin.version>
<jetty.version>9.2.3.v20140905</jetty.version>
</properties>
<dependencies>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-server</artifactId>
<version>${vaadin.version}</version>
<type>jar</type>
<exclusions>
<exclusion>
<groupId>com.vaadin.external.flute</groupId>
<artifactId>flute</artifactId>
</exclusion>
<exclusion>
<groupId>com.vaadin.external.google</groupId>
<artifactId>guava</artifactId>
</exclusion>
<exclusion>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-sass-compiler</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Instead of Valo, we use dawn -->
<dependency>
<groupId>org.peimari</groupId>
<artifactId>dawn</artifactId>
<version>4</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>${jetty.version}</version>
<type>jar</type>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>in.virit.vwscdn</groupId>
<artifactId>vwscdn-maven-plugin</artifactId>
<version>1.3.3</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>org.vaadin.lightvaadin.App</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>vaadin-addons</id>
<url>http://maven.vaadin.com/vaadin-addons</url>
</repository>
</repositories>
</project>
@erorci
Copy link

erorci commented Jan 26, 2016

Thanks for sharing this code. I have some questions.

  • Does it run using a simple java -jar XXXXX?
  • How can I add it as developed vaadin app?

@glengarski
Copy link

This code works, but widgetset is not compiled and and there are no stiles.

@sunke-github
Copy link

Hello, I got this error:
Nov 08, 2016 8:33:34 PM dwbdip.web.jetty.App main
SEVERE: null
java.lang.ClassNotFoundException: in.virit.WidgetSet
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at dwbdip.web.jetty.App.main(App.java:29)

who can tell me which jar file i need to add?

@sirolf2009
Copy link

sirolf2009 commented Sep 14, 2017

@sunke-github, you can ignore the error, it's essentially looking for a plugin and if it finds it, it will initialize it. The error is simply there to tell you that it didn't find the plugin

@amahdy
Copy link

amahdy commented Jan 6, 2018

Here is an upgraded version and a bit smaller size: https://github.com/amahdy/vaadin-light
I've also included some instructions on how to get it to work, and removed broken dependencies.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment