[vert.x] Maven Users

2016. 3. 22. 11:26Java/Vert.x

Maven users


Maven을 사용하는 간단한 Vert.x 프로젝트를 어떻게 세팅하는지를 보여주는 최고로 간단한 Maven 예제를 시작하겠습니다.
여러분은 Java 8 이 설치 되어 있어야 하구요, JAVA_HOME 환경 변수에 Java 8  설치된 곳을 지정해주시면 됩니다.

Vert.x를 포함한 Maven Project를 셋업한 템플릿을 사용하요.

Maven 프로젝트에서 verticle로써 여러분의 코드가 어떻게 배포되는 지를 보여주는 간단 Maven verticle 예제를 진행하세요 

또한 Groovy,Ruby 그리고 JavaScript verticles과 함께 메이븐을 어떻게 사용할수 있는지를 보여주는 Maven verticle 예제를 체크하세요.

Maven verticle examples : https://github.com/vert-x3/vertx-examples/tree/master/maven-verticles



1. Vert.x Simplest Maven Project 


public class HelloWorldEmbedded {

    public static void main(String[] args) {
        //Create an HTTP Server which simply returns "Hello worlds" to each request.
        Vertx.vertx().createHttpServer().requestHandler(req->req.response().end("Hello World!")).listen(8080);
    }
}

이 프로젝트는 메이븐을 사용한, 모든 request에 "Hello World!"를 단순히 리턴하는 ,
간단한 HTTP Server를 갖는 매우 간단한 hello world vert.x project 입니다.

이 Vert.x는 embedded를 사용했습니다. 
I.e. 우리는 verticles안에 코드를 배포한것 보다는 우리 자신의 클래스에서 직접 Vert.x API들을 사용했습니다. 


<groupId>io.vertx</groupId>
<artifactId>maven-simplest</artifactId>
<version>3.2.1</version>

<properties>
    <!-- the main class -->
    <exec.mainClass>io.vertx.example.HelloWorldEmbedded</exec.mainClass>
    <encoding>UTF-8</encoding>
</properties>


<dependencies>
    <dependency>
        <groupId>io.vertx</groupId>
        <artifactId>vertx-core</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>


<build>
    <pluginManagement>
        <plugins>
            <!-- We specify the Maven compiler plugin as we need to set it to Java 1.8 -->
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>


    <!--
        You only need the part below if you want to build your application into a fat executable jar.
        This is a jar that contains all the dependencies required to run it, so you can just run it with
        java -jar
        -->
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.3</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <manifestEntries>
                                    <Main-Class>${exec.mainClass}</Main-Class>
                                </manifestEntries>
                            </transformer>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>META-INF/services/io.vertx.core.spi.VerticleFactory</resource>
                            </transformer>
                        </transformers>
                        <artifactSet>
                        </artifactSet>
                        <outputFile>${project.build.directory}/${project.artifactId}-${project.version}-fat.jar</outputFile>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.4.0</version>
            <executions>
                <execution>
                    <!-- run the application using the fat jar -->
                    <id>run-app</id>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                    <configuration>
                        <executable>java</executable>
                        <arguments>
                            <argument>-jar</argument>
                            <argument>target/${project.artifactId}-${project.version}-fat.jar</argument>
                        </arguments>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>


여러분은 run 또는 debug 할수 있겠죠.
pom.xml은 어플리케이션과 싱글 "fat" jar 안에 모든 의존관계를 포함하는 모든것을 조립하기 위해 Maven shade 플러그인을 사용했습니다.

maven으로 run하기 : mvn compile exec:java
"fat jar" 로 빌드 하기 : mvn package
"fat jar"로 run 하기 : java -jar target/maven-simplest-3.2.1-fat.jar

여러분은 저 jar 파일을 갖을수 있겠구요, 이러면 Java 8 이상의 환경 어디서든지간에 구동됩니다.
필요로한 모든 dependencies를 포함하기에, 여러분은 타겟 장비에 vert.x를 설치할 필요가 없답니다.

여러분은 또한 메이븐으로 fat jar를 run 할 수 있죠 : mvn package exec:exec@run-app

그리고 난 뒤에 http://localhost:8080 하면 되욤


2. Vert.x Simple Maven Verticle Project

이 프로젝트는 maven-simplest project와 매우 비슷하지만, Embedded Vert.x  대신에 하나의 verticle 으로 작성한 코드의 예제를 보여줍니다.
그렇군요. 여러분은 IDE에서 메인 클래스 io.vertx.core.Launcher를 사용하고 인자로 run io.vertx.example.HelloWorldVerticle 를 인자로 건네는 run 설정을 생성함에 의해 직접 가동시킬수 있습니다. 

package io.vertx.example;

import io.vertx.core.AbstractVerticle;

public class HelloWorldVerticle extends AbstractVerticle {

    @Override
    public void start() throws Exception {
        //Create an Http Server which simply return "hello world" to each request.
        //If a configuration is set it get the specified name
        String name = config().getString("name","World");
        vertx.createHttpServer().requestHandler(req->req.response().end("Hello " + name + "!")).listen(8080);
    }
}



pom 부분은 위의 maven-simplest project 와 동일합니다.

target/classes 클래스 form를 사용해서 가동 : mvn compile exec:java@run
fat jar 를 사용해서 가동 : mvn package exec:exec@run-app

verticles에 코드를 작성하는 것은 여러분에게 그것을 좀더 편하게 확장 해주도록 합니다. 
예를들어 여러분의 서버가 8개의 코어를 가지고 있다면, 여러분은 그것 모두를 사용하길 바랄것이죠.
여러분은 아래와 같이 8개의 인스턴스를 디플로이 할 수 있습니다.

java -jar target/maven-verticle-3.2.1-fat.jar -instance 8

또한 여러분은 클러스터링 과 HA 를 컴앤드 라인에서 가능하답니다.

java -jar target/maven-verticle-3.2.1-fat.jar -cluster
java -jar target/maven-verticle-3.2.1-fat.jar -ha

또한 verticle에 configuration을 전달 할수 있답니다.

java -jar target/maven-verticle-3.2.1-fat.jar -conf src/conf/my-conf.json


3. Vert.x Maven examples

이 프로젝트는 여러분의 Verticles를 패키지하기 위한 Apache Maven 을 어떻게 사용할수 있는지 보여줍니다.
각각의 프로젝트는 앞의 프로젝트와 비슷하지만, 대신 Vert.x를 내장했습니다.
하나의 verticle로써의 코드를 작성하는 예제를 보여줍니다.

- Java : maven-verticle은 위에 있습니다.(2번)
- JavaScript : maven-verticle-js
  이 프로젝트는 maven-verticle 프로젝트와 매우 비슷합니다 대신 java verticle를 사용하는 것에서 Javascript verticle을 사용합니다.
  여러분은 IDE에서 io.vertx.core.Launcher 메인 클래스를 사용하고 인자 값으로 run src/main/js/MyJavaScriptVerticle 이라고 전달하는
  run configuration을 생성하는 것에 의해 직접 그것을 가동시킬 수 있습니다. 
  pom.xml은 싱글 "fat" jar 안에 사용되는 모든 dependencies과 어플리케이션을 모아주는 Maven Shade plugin을 사용합니다.
  "fat jar"를 빌드하기 위해서는 : mvn package
  "fat jar"로 가동시키 위해서는 : java -jar target/maven-verticle-javascript-3.2.1-fat.jar
  (여러분은 jar을 얻을수 있고 Java 8 이상 JKD 가 있는 어느 곳이든지 가동시킬수 있습니다.
    필요로한 모든 dependencies을 포함하고 있기에, 여러분은 해당 장비에 Vert.x을 설치할 필요가 없습니다.)

  여러분의 브라우저에 localhost:8080을 입력해보세요.
  여러분은 maven으로 부터 직접 어플리케이션을 런치 할 수 있습니다.

   target/classes 클래스들의 폼을 사용하여 어플을 가동 :  mvn compile exec:java@run
   "fat jar"를 가동하기 위해서 : mvn package exec:exec@run-app



<properties>
    <main.verticle>MyJavaScriptVerticle.js</main.verticle>
    <encoding>UTF-8</encoding>
</properties>

<dependencies>

    <dependency>
        <groupId>io.vertx</groupId>
        <artifactId>vertx-core</artifactId>
        <version>${project.version}</version>
    </dependency>

    <dependency>
        <groupId>io.vertx</groupId>
        <artifactId>vertx-lang-js</artifactId>
        <version>${project.version}</version>
    </dependency>

    <!-- Add hazelcast deps if you want it clusterable -->
    <dependency>
        <groupId>io.vertx</groupId>
        <artifactId>vertx-hazelcast</artifactId>
        <version>${project.version}</version>
    </dependency>

</dependencies>


그리고 js 파일 하나만 만들어 주면 끝.

vertx.createHttpServer().requestHandler(function(req){
    req.response().putHeader("content-type","text/html").end("<html><body>Hello from <h1>vert.x!</h1></body></html>");
}).listen(8080);

- Ruby : maven-verticle-rb

<properties>
    <main.verticle>MyRubyVerticle.rb</main.verticle>
</properties>


<dependency>
    <groupId>io.vertx</groupId>
    <artifactId>vertx-lang-ruby</artifactId>
    <version>${project.version}</version>
</dependency>

위의 Verticle에 대한 설정 파일은 아래와 같이 작성...

$vertx.create_http_server().request_handler() { |req|
req.response().put_header("content-type""text/html").end("<html><body><h1>Hello from vert.x!</h1></body></html>")
}.listen(8080)

아래에 대한 Groovy 연동도 동일한 형태입니다.


- Groovy compiled : maven-verticle-groovy-compiled (The Groovy files are compiled)

이 이상의 구현은 필요할 때 찾아보는 것이 좋을 것 같음.

여러분은 옆의 명령어를 사용하여 모든 프로젝트들을 빌드 할 수 있습니다 : mvn clean package



오늘은 여기 까지