Giter Club home page Giter Club logo

jooby's Introduction

Build Status Coverage Status Maven Central ASF2 Twitter Google Group

∞ do more, more easily

Introducing Jooby a minimalist web framework for Java 8 or higher.

  • Solid. Build on top of mature technologies.

  • Scalable. Stateless application development.

  • Fast, modular and extensible. So extensible that even the web server is plugable.

  • Simple, effective and easy to learn. Ideal for small but also large scale applications.

  • Ready for modern web. That requires a lot of JavaScript/HTML/CSS

hello world!

Java:

import org.jooby.Jooby;

public class App extends Jooby {

  {
    get("/", () -> "Hey Jooby!");
  }

  public static void main(final String[] args) throws Exception {
    new App().start(args);
  }
}

JavaScript:

var app = jooby();

app.get('/', function () 'Hey Jooby!');

killer features

  • Multi-language. Write your application in Java or JavaScript
  • Scripting programming model. Like express.js, Sinatra, etc.. but also
  • MVC programming model. Like Spring controllers or Jersey resources
  • Multi-server. Including Netty, Jetty and Undertow
  • Web-Socket
  • Dependency Injection
  • Hot reload for development

quickstart

Just paste this into a terminal (make sure Java 8 and Maven 3.x are installed):

mvn archetype:generate -B -DgroupId=com.mycompany -DartifactId=my-app -Dversion=1.0-SNAPSHOT -DarchetypeArtifactId=jooby-archetype -DarchetypeGroupId=org.jooby -DarchetypeVersion=0.9.1

You might want to edit/change:

  • -DgroupId: A Java package's name

  • -DartifactId: A project's name in lower case and without spaces

  • -Dversion: A project's version, like 1.0-SNAPSHOT or 1.0.0-SNAPSHOT

Let's try it!:

mvn archetype:generate -B -DgroupId=com.mycompany -DartifactId=my-app -Dversion=1.0-SNAPSHOT -DarchetypeArtifactId=jooby-archetype -DarchetypeGroupId=org.jooby -DarchetypeVersion=0.9.1
cd my-app
mvn jooby:run

You should see something similar to this at the end of the output:

INFO  [2015-03-19 21:34:00,365] Hotswap available on: [my-app/public, my-app/conf, my-app/target/classes]
INFO  [2015-03-19 21:34:00,368]   includes: [**/*.class,**/*.conf,**/*.properties]
INFO  [2015-03-19 21:34:00,369]   excludes: []
INFO  [2015-03-19 21:34:00,937] [dev@netty]: App server started in 502ms

GET /assets/**    [*/*]     [*/*]    (anonymous)
GET /             [*/*]     [*/*]    (anonymous)

listening on:
  http://0.0.0.0:8080/

Jooby! is up and running!!!

getting started

exploring the newly created project

A new directory was created: my-app. Now, let's see how it looks like:

.
├── public
|   ├── assets
|   |   ├── js
|   |   |   └── index.js
|   |   ├── css
|   |   |   └── style.css
|   |   └── images
|   └── welcome.html
├── conf
|   ├── application.conf
|   └── logback.xml
└── src
    ├── main
    |   └── java
    |       └── com
    |           └── mycompany
    |               └── App.java
    └── test
        └── java
            └── com
                └── mycompany
                    └── AppTest.java
                    

The public directory contains *.html, *.js, *.css, ..., *.png files.

The conf directory contains *.conf, *.properties, ..., *.json files.

The src/main/java contains *.java (of course) files.

The src/test/java contains integration or unit test files.

NOTE: Directories: public and conf are part of the classpath.

App.java

import org.jooby.Jooby;

public class App extends Jooby { // 1

  {
    // 2
    assets("/assets/**");

    assets("/", "/welcome.html");
  }

  public static void main(final String[] args) throws Exception {
    new App().start(args); // 3. start the application.
  }

}

Steps involved are:

  1. extends Jooby

  2. define some routes

  3. call the start method

running

Just open a console and type:

mvn jooby:run

The maven plugin will compile the code (if necessary) and startup the application.

Of course, you can generate the IDE metadata from Maven and/or import as a Maven project in your favorite IDE. Then all you have to do is run the: App.java class. After all, this is plain Java application with a main method.

versioning

Jooby uses semantic versioning for releases.

API is considered unstable while release version is: 0.x.x and it might changes and/or broke without previous notification.

This might sounds terrible but isn't. Any change on the API will be reported by the Java Compiler and it wont take you a long time to fix it. Finally, API changes can be filtered and displayed it at any time

want to contribute?

  • Fork the project on Github.
  • Wondering what to work on? See task/bug list and pick up something you would like to work on.
  • Write unit tests.
  • Create an issue or fix one from issues.
  • If you know the answer to a question posted to our group - don't hesitate to write a reply.
  • Share your ideas or ask questions on the jooby group - don't hesitate to write a reply - that helps us improve javadocs/FAQ.
  • If you miss a particular feature - browse or ask on the group - don't hesitate to write a reply, show us some sample code and describe the problem.
  • Write a blog post about how you use or extend jooby.
  • Please suggest changes to javadoc/exception messages when you find something unclear.
  • If you have problems with documentation, find it non intuitive or hard to follow - let us know about it, we'll try to make it better according to your suggestions. Any constructive critique is greatly appreciated. Don't forget that this is an open source project developed and documented in spare time.

help and support

related projects

author

[Edgar Espina] (https://twitter.com/edgarespina)

license

Apache License 2

jooby's People

Contributors

jknack avatar vbauer avatar

Watchers

James Cloos avatar Vu Nguyen avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.