使用Vert.x Maven插件快速創(chuàng)建項(xiàng)目的方法
本文介紹了使用Vert.x Maven插件快速創(chuàng)建項(xiàng)目的方法,分享給大家,具體如下:
文檔地址: https://reactiverse.io/vertx-maven-plugin
已有項(xiàng)目添加該插件
在項(xiàng)目 pom.xml 目錄,執(zhí)行下面的命令即可添加:
mvn io.reactiverse:vertx-maven-plugin:1.0.17:setup
執(zhí)行該命令后,在 pom.xml 中會(huì)增加下面的配置:
<properties>
<vertx.version>3.5.3</vertx.version>
<vertx-maven-plugin.version>1.0.17</vertx-maven-plugin.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-stack-depchain</artifactId>
<version>${vertx.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
還有下面的插件:
<plugin>
<groupId>io.reactiverse</groupId>
<artifactId>vertx-maven-plugin</artifactId>
<version>${vertx-maven-plugin.version}</version>
<executions>
<execution>
<id>vmp</id>
<goals>
<goal>initialize</goal>
<goal>package</goal>
</goals>
</execution>
</executions>
<configuration>
<redeploy>true</redeploy>
</configuration>
</plugin>
自動(dòng)引入的 vert.x 版本為 3.5.3,你可以通過在 mvn 命令增加 -DvertxVersion=3.4.0 這個(gè)參數(shù)來指定需要的版本。
從頭創(chuàng)建空項(xiàng)目
首先你 必須創(chuàng)建一個(gè)目錄 ,vert.x 插件不會(huì)自動(dòng)給你創(chuàng)建目錄,只會(huì)創(chuàng)建目錄內(nèi)的 src 和 pom.xml 等文件。
創(chuàng)建一個(gè)目錄,進(jìn)入該目錄內(nèi),在該目錄內(nèi)執(zhí)行下面的命令:
mvn io.reactiverse:vertx-maven-plugin:1.0.17:setup ^ -DprojectGroupId=org.acme ^ -DprojectArtifactId=acme-project ^ -DprojectVersion=1.0-SNAPSHOT ^ -Dverticle=org.acme.Foo ^ -Dverticle=io.vertx.sample.MyFirstVerticle ^ -Ddependencies=web
如果你使用的 Linux 系統(tǒng),將上面的 ^ 改為 \ 。
這里和上面相比增加了項(xiàng)目 GAV 的配置。
通過 -Dverticle=io.vertx.sample.MyFirstVerticle ,可以生成一個(gè)默認(rèn)的 Verticle 類。
通過 -Ddependencies=web 可以指定你想加入的 vert.x 的依賴,這里寫的名字都是縮寫,具體對(duì)應(yīng)關(guān)系看下面的介紹。
使用上面命令后,就創(chuàng)建了一個(gè)基礎(chǔ) vert.x 項(xiàng)目,在開始學(xué)習(xí) vert.x 的時(shí)候,通過這種方式可以更快的創(chuàng)建基礎(chǔ)項(xiàng)目。
-Ddependencies 對(duì)照表
下面 JSON 中的 labels 就是縮寫名,groupId 和 artifactId 是對(duì)應(yīng)的依賴。
[
{
"name": "Vert.x Web",
"labels": [
"web"
],
"groupId": "io.vertx",
"artifactId": "vertx-web"
},
{
"name": "Vert.x Web Client",
"labels": [
"web-client"
],
"groupId": "io.vertx",
"artifactId": "vertx-web-client"
},
{
"name": "Vert.x Mongo Client",
"labels": [
"mongo"
],
"groupId": "io.vertx",
"artifactId": "vertx-mongo-client"
},
{
"name": "Vert.x Kafka Client",
"labels": [
"kafka"
],
"groupId": "io.vertx",
"artifactId": "vertx-kafka-client"
},
{
"name": "Vert.x Consul Client",
"labels": [
"consul"
],
"groupId": "io.vertx",
"artifactId": "vertx-consul-client"
},
{
"name": "Vert.x gRPC",
"labels": [
"gRPC"
],
"groupId": "io.vertx",
"artifactId": "vertx-grpc"
},
{
"name": "Vert.x (async) JDBC Client",
"labels": [
"jdbc"
],
"groupId": "io.vertx",
"artifactId": "vertx-jdbc-client"
},
{
"name": "Vert.x Redis Client",
"labels": [
"redis"
],
"groupId": "io.vertx",
"artifactId": "vertx-redis-client"
},
{
"name": "Vert.x Mail Client",
"labels": [
"mail",
"smtp"
],
"groupId": "io.vertx",
"artifactId": "vertx-mail-client"
},
{
"name": "Vert.x STOMP",
"labels": [
"stomp"
],
"groupId": "io.vertx",
"artifactId": "vertx-stomp"
},
{
"name": "Vert.x EventBus Bridge using TCP",
"labels": [
"tcp-bridge"
],
"groupId": "io.vertx",
"artifactId": "vertx-tcp-eventbus-bridge"
},
{
"name": "Vert.x - Apache Camel bridge",
"labels": [
"camel"
],
"groupId": "io.vertx",
"artifactId": "vertx-camel-bridge"
},
{
"name": "Vert.x Bridge with AMQP",
"labels": [
"amqp"
],
"groupId": "io.vertx",
"artifactId": "vertx-amqp-bridge"
},
{
"name": "Vert.x Client for RabbitMQ",
"labels": [
"rabbitmq"
],
"groupId": "io.vertx",
"artifactId": "vertx-rabbitmq-client"
},
{
"name": "Vert.x Authentication Support using JDBC",
"labels": [
"jdbc-auth"
],
"groupId": "io.vertx",
"artifactId": "vertx-auth-jdbc"
},
{
"name": "Vert.x Authentication Support using JWT",
"labels": [
"jwt-auth"
],
"groupId": "io.vertx",
"artifactId": "vertx-auth-jwt"
},
{
"name": "Vert.x Authentication Support using Mongo",
"labels": [
"mongo-auth"
],
"groupId": "io.vertx",
"artifactId": "vertx-auth-mongo"
},
{
"name": "Vert.x Authentication Support using Shiro",
"labels": [
"shiro-auth"
],
"groupId": "io.vertx",
"artifactId": "vertx-auth-shiro"
},
{
"name": "Vert.x Authentication Support using OAuth 2",
"labels": [
"oauth2",
"oauth2-auth",
"oauth"
],
"groupId": "io.vertx",
"artifactId": "vertx-auth-oauth2"
},
{
"name": "Vert.x support for RX Java",
"labels": [
"rx",
"rxjava"
],
"groupId": "io.vertx",
"artifactId": "vertx-rx-java"
},
{
"name": "Vert.x support for JavaScript (Nashorn)",
"labels": [
"js",
"javascript"
],
"groupId": "io.vertx",
"artifactId": "vertx-lang-js"
},
{
"name": "Vert.x support for Kotlin",
"labels": [
"kotlin",
"vertx-kotlin"
],
"groupId": "io.vertx",
"artifactId": "vertx-lang-kotlin-compiler"
},
{
"name": "Vert.x support for Ruby (JRuby)",
"labels": [
"rb",
"ruby",
"jruby"
],
"groupId": "io.vertx",
"artifactId": "vertx-lang-ruby"
},
{
"name": "Vert.x support for Apache Groovy",
"labels": [
"groovy"
],
"groupId": "io.vertx",
"artifactId": "vertx-lang-groovy"
},
{
"name": "Vert.x Service Discovery",
"labels": [
"discovery",
"service-discovery"
],
"groupId": "io.vertx",
"artifactId": "vertx-service-discovery"
},
{
"name": "Vert.x Circuit Breaker",
"labels": [
"circuit-breaker",
"circuit"
],
"groupId": "io.vertx",
"artifactId": "vertx-circuit-breaker"
},
{
"name": "Vert.x Service Discovery for Kubernetes",
"labels": [
"discovery-kubernetes",
"service-discovery-kubernetes"
],
"groupId": "io.vertx",
"artifactId": "vertx-service-discovery-bridge-kubernetes"
},
{
"name": "Vert.x Service Discovery for Consul",
"labels": [
"discovery-consul",
"service-discovery-consul"
],
"groupId": "io.vertx",
"artifactId": "vertx-service-discovery-bridge-consul"
},
{
"name": "Vert.x Metrics using Dropwizard",
"labels": [
"jmx",
"dropwizard"
],
"groupId": "io.vertx",
"artifactId": "vertx-dropwizard-metrics"
},
{
"name": "Vert.x Metrics using Hawkular",
"labels": [
"hawkular"
],
"groupId": "io.vertx",
"artifactId": "vertx-hawkular-metrics"
},
{
"name": "Vert.x Shell",
"labels": [
"shell"
],
"groupId": "io.vertx",
"artifactId": "vertx-shell"
},
{
"name": "Vert.x Unit",
"labels": [
"test"
],
"groupId": "io.vertx",
"artifactId": "vertx-unit",
"scope": "test"
},
{
"name": "Vert.x Cluster Manager based on Hazelcast",
"labels": [
"hazelcast",
"hazelcast-cluster-manager"
],
"groupId": "io.vertx",
"artifactId": "vertx-hazelcast"
},
{
"name": "Vert.x Cluster Manager based on Infinipan",
"labels": [
"infinispan",
"infinispan-cluster-manager"
],
"groupId": "io.vertx",
"artifactId": "vertx-infinispan"
},
{
"name": "Vert.x Cluster Manager based on Zookeeper",
"labels": [
"zookeeper-cluster-manager"
],
"groupId": "io.vertx",
"artifactId": "vertx-zookeeper"
},
{
"name": "Vert.x Cluster Manager based on Apache Ignite",
"labels": [
"ignite"
],
"groupId": "io.vertx",
"artifactId": "vertx-ignite"
},
{
"name": "Vert.x Cluster Manager based on Apache Zookeeper",
"labels": [
"zookeeper"
],
"groupId": "io.vertx",
"artifactId": "vertx-zookeeper"
},
{
"name": "Vert.x Web Template Engine based on Pebble",
"labels": [
"pebble",
"pebble-template",
"pebble-template-engine"
],
"groupId": "io.vertx",
"artifactId": "vertx-web-templ-pebble",
"classifier": "shaded"
},
{
"name": "Vert.x Web Template Engine based on Apache Freemarker",
"labels": [
"freemarker",
"freemarker-template",
"freemarker-template-engine"
],
"groupId": "io.vertx",
"artifactId": "vertx-web-templ-freemarker",
"classifier": "shaded"
},
{
"name": "Vert.x Web Template Engine based on Thymeleaf",
"labels": [
"thymeleaf",
"thymeleaf-template",
"thymeleaf-template-engine"
],
"groupId": "io.vertx",
"artifactId": "vertx-web-templ-thymeleaf",
"classifier": "shaded"
},
{
"name": "Vert.x Web Template Engine based on Handlebars",
"labels": [
"handlebars",
"handlebars-template",
"handlebars-template-engine"
],
"groupId": "io.vertx",
"artifactId": "vertx-web-templ-handlebars",
"classifier": "shaded"
},
{
"name": "Vert.x Web Template Engine based on Jade",
"labels": [
"jade",
"jade-template",
"jade-template-engine"
],
"groupId": "io.vertx",
"artifactId": "vertx-web-templ-jade",
"classifier": "shaded"
},
{
"name": "Vert.x Web Template Engine based on MVEL",
"labels": [
"mvel",
"mvel-template",
"mvel-template-engine"
],
"groupId": "io.vertx",
"artifactId": "vertx-web-templ-mvel",
"classifier": "shaded"
},
{
"name": "Vert.x (async) RPC service proxies",
"labels": [
"service-proxies",
"rpc-services"
],
"groupId": "io.vertx",
"artifactId": "vertx-service-proxy"
},
{
"name": "Vert.x Service Factory using Apache Maven",
"labels": [
"maven-service-factory"
],
"groupId": "io.vertx",
"artifactId": "vertx-maven-service-factory"
},
{
"name": "Vert.x Service Factory",
"labels": [
"service-factory"
],
"groupId": "io.vertx",
"artifactId": "vertx-service-factory"
},
{
"name": "Vert.x Service Factory using HTTP",
"labels": [
"http-service-factory"
],
"groupId": "io.vertx",
"artifactId": "vertx-http-service-factory"
},
{
"name": "Vert.x Configuration",
"labels": [
"config"
],
"groupId": "io.vertx",
"artifactId": "vertx-config"
},
{
"name": "Vert.x Configuration with Kubernetes ConfigMap",
"labels": [
"config-kubernetes",
"config-config-map",
"config-configmap"
],
"groupId": "io.vertx",
"artifactId": "vertx-config-kubernetes-configmap"
},
{
"name": "Vert.x Configuration with a Git repository",
"labels": [
"config-git"
],
"groupId": "io.vertx",
"artifactId": "vertx-config-git"
},
{
"name": "Vert.x Configuration - HOCON format",
"labels": [
"config-hocon"
],
"groupId": "io.vertx",
"artifactId": "vertx-config-hocon"
},
{
"name": "Vert.x Configuration - Yaml format",
"labels": [
"config-yaml"
],
"groupId": "io.vertx",
"artifactId": "vertx-config-yaml"
},
{
"name": "Vert.x Configuration with a Zookeeper backend",
"labels": [
"config-zookeeper"
],
"groupId": "io.vertx",
"artifactId": "vertx-config-zookeeper"
},
{
"name": "Vert.x Configuration with a Redis backend",
"labels": [
"config-redis"
],
"groupId": "io.vertx",
"artifactId": "vertx-config-redis"
}
]
打包項(xiàng)目
集成了 vert.x 插件后,打包變的極其容易,只需要下面的命令:
mvn clean package
通過這種方式就會(huì)打出一個(gè) fat jar 包,可以直接通過 java -jar xxxx.jar 運(yùn)行的包。
其他命令
除了上面這些,還有 vertx:run, vertx:debug, vertx:start, vertx:stop 命令,這些命令可以在不打 jar 包的情況下運(yùn)行或者關(guān)閉項(xiàng)目。
常見問題
通過插件方式運(yùn)行時(shí),你經(jīng)常會(huì)遇到下面的問題:
[INFO] 嚴(yán)重: java.net.BindException: Address already in use: bind
這種情況是因?yàn)槭褂妙愃?IDEA Maven 插件中的命令直接雙擊運(yùn)行時(shí),你無法關(guān)閉這個(gè)應(yīng)用。如果你使用的純命令行,直接 Ctrl+C 就能關(guān)閉。
使用 vertx:run 在命令行運(yùn)行時(shí)可以直接關(guān)閉。
使用 vertx:start 運(yùn)行時(shí),需要通過 vertx:stop 關(guān)閉。
萬一遇上無法關(guān)閉的情況,在 windows 中,可以用下面方式解決。
在命令行中,輸入下面的命令:
jps -m
這個(gè)命令會(huì)列出所有運(yùn)行的 jvm:
15248 Jps -m
2384 Launcher run io.vertx.sample.MyFirstVerticle redeploy-termination-period=1000 -Dvertx.id=5fd656fa-55a9-46b4-8d23-caa95f2e5032-redeploy
8208
11844 Launcher run io.vertx.sample.MyFirstVerticle redeploy-termination-period=1000 -Dvertx.id=bec46d01-d441-4949-a2d9-f8ffbe85f965-redeploy
14200 Launcher run io.vertx.sample.MyFirstVerticle --redeploy=F:\Git\my-first-vertx-app\target\classes/**/* --redeploy-scan-period=1000 redeploy-termi
nation-period=1000 --launcher-class=io.vertx.core.Launcher
7580 Launcher clean compile vertx:run
根據(jù)后面的信息找到你想關(guān)閉的 jvm。輸入下面的命令(假設(shè)關(guān)閉 2384):
taskkill /f /pid 2384
當(dāng)相同端口的 jvm 關(guān)閉后,你就可以再次運(yùn)行了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 解決MyEclipse中Maven設(shè)置jdk版本jdk1.8報(bào)錯(cuò)問題
- 淺談Maven 項(xiàng)目中依賴的搜索順序
- Maven項(xiàng)目改為spring boot項(xiàng)目的方法圖解
- 解決IDEA中Maven項(xiàng)目中JSTL標(biāo)簽無效問題
- 如何將maven項(xiàng)目劃分為多個(gè)模塊
- 淺談Maven環(huán)境隔離應(yīng)用
- Maven在Java8下如何忽略Javadoc的編譯錯(cuò)誤詳解
- 使用maven profile指定配置文件打包適用多環(huán)境的方法
- Maven根據(jù)不同環(huán)境打包不同配置文件的方法
- java如何使用自己的maven本地倉庫詳解
- maven添加oracle依賴失敗問題的處理方法
- Maven本地倉庫的配置以及修改默認(rèn).m2倉庫位置
相關(guān)文章
解決JDBC連接Mysql長(zhǎng)時(shí)間無動(dòng)作連接失效的問題
這篇文章主要介紹了解決JDBC連接Mysql長(zhǎng)時(shí)間無動(dòng)作連接失效的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03
java中VO和DTO之間的轉(zhuǎn)換實(shí)現(xiàn)
本文主要介紹了java中VO和DTO之間的轉(zhuǎn)換實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
springIOC的使用流程及spring中使用類型轉(zhuǎn)換器的方式
Spring IOC是Spring框架的核心原理之一,它是一種軟件設(shè)計(jì)模式,用于管理應(yīng)用程序中的對(duì)象依賴關(guān)系,這篇文章主要介紹了springIOC的使用流程以及spring中如何使用類型轉(zhuǎn)換器,需要的朋友可以參考下2023-06-06
基于Java Callable接口實(shí)現(xiàn)線程代碼實(shí)例
這篇文章主要介紹了基于Java Callable接口實(shí)現(xiàn)線程代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08

