diff --git a/bootique/config.yml b/bootique/config.yml
new file mode 100644
index 0000000000..269b4ab867
--- /dev/null
+++ b/bootique/config.yml
@@ -0,0 +1,11 @@
+log:
+ level: warn
+ appenders:
+ - type: file
+ logFormat: '%c{20}: %m%n'
+ file: /home/logger.log
+
+jetty:
+ context: /hello
+ connector:
+ port: 10001
diff --git a/bootique/dependency-reduced-pom.xml b/bootique/dependency-reduced-pom.xml
new file mode 100644
index 0000000000..ed18f4e42a
--- /dev/null
+++ b/bootique/dependency-reduced-pom.xml
@@ -0,0 +1,50 @@
+
+
+
+ bootique-parent
+ io.bootique.parent
+ 0.12
+
+ 4.0.0
+ com.baeldung.bootique
+ bootique
+ bootique
+ 1.0-SNAPSHOT
+ http://maven.apache.org
+
+
+
+ maven-shade-plugin
+
+
+
+
+
+ io.bootique
+ bootique-test
+ 0.23
+ test
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+
+
+
+ io.bootique.bom
+ bootique-bom
+ 0.23
+ pom
+ import
+
+
+
+
+ com.baeldung.bootique.App
+
+
+
diff --git a/bootique/pom.xml b/bootique/pom.xml
new file mode 100644
index 0000000000..28b716e104
--- /dev/null
+++ b/bootique/pom.xml
@@ -0,0 +1,66 @@
+
+ 4.0.0
+ com.baeldung.bootique
+ bootique
+ jar
+ 1.0-SNAPSHOT
+ bootique
+ http://maven.apache.org
+
+
+ com.baeldung.bootique.App
+
+
+
+ io.bootique.parent
+ bootique-parent
+ 0.12
+
+
+
+
+
+ io.bootique.bom
+ bootique-bom
+ 0.23
+ pom
+ import
+
+
+
+
+
+
+ io.bootique.jersey
+ bootique-jersey
+ compile
+
+
+ io.bootique.logback
+ bootique-logback
+ compile
+
+
+ io.bootique
+ bootique-test
+ test
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+
+
+
+
+
\ No newline at end of file
diff --git a/bootique/src/main/java/com/baeldung/bootique/App.java b/bootique/src/main/java/com/baeldung/bootique/App.java
new file mode 100644
index 0000000000..2fd03bd6c3
--- /dev/null
+++ b/bootique/src/main/java/com/baeldung/bootique/App.java
@@ -0,0 +1,42 @@
+package com.baeldung.bootique;
+
+import java.util.function.Supplier;
+
+import com.baeldung.bootique.module.ModuleBinder;
+import com.baeldung.bootique.router.IndexController;
+import com.baeldung.bootique.router.SaveController;
+import com.google.inject.Module;
+
+import io.bootique.Bootique;
+import io.bootique.jersey.JerseyModule;
+import io.bootique.log.BootLogger;
+
+public class App {
+
+ public static void main(String[] args) {
+ Module module = binder -> JerseyModule.extend(binder).addResource(IndexController.class)
+ .addResource(SaveController.class);
+ Bootique.app(args).module(module).module(ModuleBinder.class).bootLogger(new BootLogger() {
+ @Override
+ public void trace(Supplier arg0) {
+ // ...
+ }
+
+ @Override
+ public void stdout(String arg0) {
+ // ...
+ }
+
+ @Override
+ public void stderr(String arg0, Throwable arg1) {
+ // ...
+ }
+
+ @Override
+ public void stderr(String arg0) {
+ // ...
+ }
+ }).autoLoadModules().exec();
+ }
+
+}
diff --git a/bootique/src/main/java/com/baeldung/bootique/module/ModuleBinder.java b/bootique/src/main/java/com/baeldung/bootique/module/ModuleBinder.java
new file mode 100644
index 0000000000..8c6fbb9642
--- /dev/null
+++ b/bootique/src/main/java/com/baeldung/bootique/module/ModuleBinder.java
@@ -0,0 +1,15 @@
+package com.baeldung.bootique.module;
+
+import com.baeldung.bootique.service.HelloService;
+import com.baeldung.bootique.service.impl.HelloServiceImpl;
+import com.google.inject.Binder;
+import com.google.inject.Module;
+
+public class ModuleBinder implements Module {
+
+ @Override
+ public void configure(Binder binder) {
+ binder.bind(HelloService.class).to(HelloServiceImpl.class);
+ }
+
+}
diff --git a/bootique/src/main/java/com/baeldung/bootique/module/ModuleProvider.java b/bootique/src/main/java/com/baeldung/bootique/module/ModuleProvider.java
new file mode 100644
index 0000000000..8de866fcfb
--- /dev/null
+++ b/bootique/src/main/java/com/baeldung/bootique/module/ModuleProvider.java
@@ -0,0 +1,14 @@
+package com.baeldung.bootique.module;
+
+import com.google.inject.Module;
+
+import io.bootique.BQModuleProvider;
+
+public class ModuleProvider implements BQModuleProvider {
+
+ @Override
+ public Module module() {
+ return new ModuleBinder();
+ }
+
+}
diff --git a/bootique/src/main/java/com/baeldung/bootique/router/IndexController.java b/bootique/src/main/java/com/baeldung/bootique/router/IndexController.java
new file mode 100644
index 0000000000..4bb80277a1
--- /dev/null
+++ b/bootique/src/main/java/com/baeldung/bootique/router/IndexController.java
@@ -0,0 +1,14 @@
+package com.baeldung.bootique.router;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
+@Path("/")
+public class IndexController {
+
+ @GET
+ public String index() {
+ return "Hello, baeldung!";
+ }
+
+}
diff --git a/bootique/src/main/java/com/baeldung/bootique/router/SaveController.java b/bootique/src/main/java/com/baeldung/bootique/router/SaveController.java
new file mode 100644
index 0000000000..0610b9d913
--- /dev/null
+++ b/bootique/src/main/java/com/baeldung/bootique/router/SaveController.java
@@ -0,0 +1,20 @@
+package com.baeldung.bootique.router;
+
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+
+import com.baeldung.bootique.service.HelloService;
+import com.google.inject.Inject;
+
+@Path("/save")
+public class SaveController {
+
+ @Inject
+ HelloService helloService;
+
+ @POST
+ public String save() {
+ return "Data Saved!";
+ }
+
+}
diff --git a/bootique/src/main/java/com/baeldung/bootique/service/HelloService.java b/bootique/src/main/java/com/baeldung/bootique/service/HelloService.java
new file mode 100644
index 0000000000..74c0401cc3
--- /dev/null
+++ b/bootique/src/main/java/com/baeldung/bootique/service/HelloService.java
@@ -0,0 +1,7 @@
+package com.baeldung.bootique.service;
+
+public interface HelloService {
+
+ boolean save();
+
+}
diff --git a/bootique/src/main/java/com/baeldung/bootique/service/impl/HelloServiceImpl.java b/bootique/src/main/java/com/baeldung/bootique/service/impl/HelloServiceImpl.java
new file mode 100644
index 0000000000..d2c0b5b838
--- /dev/null
+++ b/bootique/src/main/java/com/baeldung/bootique/service/impl/HelloServiceImpl.java
@@ -0,0 +1,12 @@
+package com.baeldung.bootique.service.impl;
+
+import com.baeldung.bootique.service.HelloService;
+
+public class HelloServiceImpl implements HelloService {
+
+ @Override
+ public boolean save() {
+ return true;
+ }
+
+}
diff --git a/bootique/src/main/resources/META-INF/services/io.bootique.BQModuleProvider b/bootique/src/main/resources/META-INF/services/io.bootique.BQModuleProvider
new file mode 100644
index 0000000000..714cf3a2df
--- /dev/null
+++ b/bootique/src/main/resources/META-INF/services/io.bootique.BQModuleProvider
@@ -0,0 +1 @@
+com.baeldung.bootique.module.ModuleProvider
\ No newline at end of file
diff --git a/bootique/src/test/java/com/baeldung/bootique/AppTest.java b/bootique/src/test/java/com/baeldung/bootique/AppTest.java
new file mode 100644
index 0000000000..0793e2f13c
--- /dev/null
+++ b/bootique/src/test/java/com/baeldung/bootique/AppTest.java
@@ -0,0 +1,29 @@
+package com.baeldung.bootique;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Rule;
+import org.junit.Test;
+
+import com.baeldung.bootique.service.HelloService;
+
+import io.bootique.BQRuntime;
+import io.bootique.test.junit.BQDaemonTestFactory;
+import io.bootique.test.junit.BQTestFactory;
+
+public class AppTest {
+
+ @Rule
+ public BQTestFactory bqTestFactory = new BQTestFactory();
+
+ @Rule
+ public BQDaemonTestFactory bqDaemonTestFactory = new BQDaemonTestFactory();
+
+ @Test
+ public void givenService_expectBoolen() {
+ BQRuntime runtime = bqTestFactory.app("--server").autoLoadModules().createRuntime();
+ HelloService service = runtime.getInstance(HelloService.class);
+ assertEquals(true, service.save());
+ }
+
+}