本文将会建立一个基本的HTTP服务器,并监听8080端口,对于任何发往该服务器以及端口的请求,服务器会返回一个Hello World字符串。
首先新建一个Maven项目,一个基本的Maven项目目录结构如下所示:
├── pom.xml ├── src │ ├── main │ │ ├── java │ │ └── resources │ └── test │ └── java
随后在pom.xml
中加入相关的依赖和插件,如下所示:
<?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>io.example</groupId> <artifactId>vertx-example</artifactId> <version>1.0-SNAPSHOT</version> <properties> <vertx.version>3.4.2</vertx.version> <main.class>io.example.Main</main.class> </properties> <dependencies> <dependency> <groupId>io.vertx</groupId> <artifactId>vertx-core</artifactId> <version>${vertx.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.4.2</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>${main.class}</Main-Class> </manifestEntries> </transformer> </transformers> <artifactSet /> <outputFile>${project.build.directory}/${project.artifactId}-${project.version}-prod.jar</outputFile> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
跟其它Maven项目一样,我们首先定义了项目的GroupId,ArtifactId以及版本号,随后我们定义了两个属性,分别是:vertx.version
,也就是Vert.x的版本号,此处我们使用最新的Vert.x版本,也就是3.4.2;以及main.class
,也就是我们要使用的包含有main函数的主类。之后我们引入了两个Maven插件,分别是maven-compiler-plugin
和maven-shade-plugin
,前者用来将.java的源文件编译成.class的字节码文件,后者可将编译后的.class字节码文件打包成可执行的jar文件,俗称fat-jar
。
然后我们在src/main/java/io/example
目录下新建两个java文件,分别是Main.java
和MyFirstVerticle.java
,代码如下:
Main.java
package io.example; import io.vertx.core.Vertx; /** * Created by chengen on 26/04/2017. */ public class Main { public static void main(String[] args){ Vertx vertx = Vertx.vertx(); vertx.deployVerticle(MyFirstVerticle.class.getName()); } }
MyFirstVerticle.java
package io.example; import io.vertx.core.AbstractVerticle; /** * Created by chengen on 26/04/2017. */ public class MyFirstVerticle extends AbstractVerticle { public void start() { vertx.createHttpServer().requestHandler(req -> { req.response() .putHeader("content-type", "text/plain") .end("Hello World!"); }).listen(8080); } }
然后用Maven的mvn package
命令打包,随后在src的同级目录下会出现target目录,进入之后,会出现vert-example-1.0-SNAPSHOT.jar
和vert-example-1.0-SNAPSHOT-prod.jar
两个jar文件,后者是可执行文件,在有图形界面的操作系统中,您可双击执行,或者用以下命令:java -jar vert-example-1.0-SNAPSHOT-prod.jar
执行。
随后打开浏览器,在浏览器的地址栏中输入:http://localhost:8080/ 便可看到熟悉的Hello World!啦。
启动器
我们也可以使用Launcher
来替代Main
类,这也是官方推荐的方式,在pom.xml
中加入main.verticle
属性,并将该属性值设置为maven-shade-plugin
插件的manifestEntries
的Main-Verticle
对应的值,最后修改main.class
为io.vertx.core.Launcher
,修改后的pom.xml
如下:
<?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>io.example</groupId> <artifactId>vertx-example</artifactId> <version>1.0-SNAPSHOT</version> <properties> <vertx.version>3.4.2</vertx.version> <main.class>io.vertx.core.Launcher</main.class> <main.verticle>io.example.MainVerticle</main.verticle> </properties> <dependencies> <dependency> <groupId>io.vertx</groupId> <artifactId>vertx-core</artifactId> <version>${vertx.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.4.2</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>${main.class}</Main-Class> <Main-Verticle>${main.verticle}</Main-Verticle> </manifestEntries> </transformer> </transformers> <artifactSet /> <outputFile>${project.build.directory}/${project.artifactId}-${project.version}-prod.jar</outputFile> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
然后在src/main/java/io/example
目录下新增MainVerticle.java
文件,代码如下:
package io.example; import io.vertx.core.AbstractVerticle; /** * Created by chengen on 26/04/2017. */ public class MainVerticle extends AbstractVerticle { public void start() { vertx.deployVerticle(MyFirstVerticle.class.getName()); } }
然后重新打包后执行,便可再次看到Hello World!。
请注意:重新打包之前,您可能需要清除之前编译后留下的文件,用mvn clean package命令打包。