[vert.x] Maven Users
2016. 3. 22. 11:26ㆍJava/Vert.x
Maven users
Maven을 사용하는 간단한 Vert.x 프로젝트를 어떻게 세팅하는지를 보여주는 최고로 간단한 Maven 예제를 시작하겠습니다.
여러분은 Java 8 이 설치 되어 있어야 하구요, JAVA_HOME 환경 변수에 Java 8 설치된 곳을 지정해주시면 됩니다.
Vert.x를 포함한 Maven Project를 셋업한 템플릿을 사용하요.
Maven 프로젝트에서 verticle로써 여러분의 코드가 어떻게 배포되는 지를 보여주는 간단 Maven verticle 예제를 진행하세요
the simple Maven verticle Example : https://github.com/vert-x3/vertx-examples/tree/master/maven-verticles/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>
<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 : maven-verticle-groovy (https://github.com/vert-x3/vertx-examples/tree/master/maven-verticles/maven-verticle-groovy)
- Groovy compiled : maven-verticle-groovy-compiled (The Groovy files are compiled)
(https://github.com/vert-x3/vertx-examples/tree/master/maven-verticles/maven-verticle-groovy-compiled)
이 이상의 구현은 필요할 때 찾아보는 것이 좋을 것 같음.
여러분은 옆의 명령어를 사용하여 모든 프로젝트들을 빌드 할 수 있습니다 : mvn clean package
오늘은 여기 까지
'Java > Vert.x' 카테고리의 다른 글
[vert.x] Vert.x core examples - 5. Execute blocking & high Availability examples (0) | 2016.03.25 |
---|---|
[vert.x] Vert.x core examples - 4. Verticle examples (0) | 2016.03.25 |
[vert.x] Vert.x core examples - 3. Event bus examples (0) | 2016.03.25 |
[vert.x] Vert.x core examples - 2. Net Example (0) | 2016.03.25 |
[vert.x] Vert.x core examples - 1.시작 (0) | 2016.03.25 |
비동기 네트워크 서버 프레임워크 Vert.x - 개요, 실습 (0) | 2016.03.18 |