您好,登錄后才能下訂單哦!
怎么在Vert.x中使用Maven插件創建一個項目?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
已有項目添加該插件
在項目 pom.xml 目錄,執行下面的命令即可添加:
mvn io.reactiverse:vertx-maven-plugin:1.0.17:setup
執行該命令后,在 pom.xml 中會增加下面的配置:
<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>
自動引入的 vert.x 版本為 3.5.3,你可以通過在 mvn 命令增加 -DvertxVersion=3.4.0 這個參數來指定需要的版本。
從頭創建空項目
首先你 必須創建一個目錄 ,vert.x 插件不會自動給你創建目錄,只會創建目錄內的 src 和 pom.xml 等文件。
創建一個目錄,進入該目錄內,在該目錄內執行下面的命令:
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 系統,將上面的 ^ 改為 \ 。
這里和上面相比增加了項目 GAV 的配置。
通過 -Dverticle=io.vertx.sample.MyFirstVerticle
,可以生成一個默認的 Verticle 類。
通過 -Ddependencies=web
可以指定你想加入的 vert.x 的依賴,這里寫的名字都是縮寫,具體對應關系看下面的介紹。
使用上面命令后,就創建了一個基礎 vert.x 項目,在開始學習 vert.x 的時候,通過這種方式可以更快的創建基礎項目。
-Ddependencies 對照表
源碼: dependencies.json
下面 JSON 中的 labels 就是縮寫名,groupId 和 artifactId 是對應的依賴。
[ { "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": [ "oauth3", "oauth3-auth", "oauth" ], "groupId": "io.vertx", "artifactId": "vertx-auth-oauth3" }, { "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" } ]
打包項目
集成了 vert.x 插件后,打包變的極其容易,只需要下面的命令:
mvn clean package
通過這種方式就會打出一個 fat jar 包,可以直接通過 java -jar xxxx.jar 運行的包。
其他命令
除了上面這些,還有 vertx:run, vertx:debug, vertx:start, vertx:stop 命令,這些命令可以在不打 jar 包的情況下運行或者關閉項目。
常見問題
通過插件方式運行時,你經常會遇到下面的問題:
[INFO] 嚴重: java.net.BindException: Address already in use: bind
這種情況是因為使用類似 IDEA Maven 插件中的命令直接雙擊運行時,你無法關閉這個應用。如果你使用的純命令行,直接 Ctrl+C 就能關閉。
使用 vertx:run
在命令行運行時可以直接關閉。
使用 vertx:start
運行時,需要通過 vertx:stop
關閉。
萬一遇上無法關閉的情況,在 windows 中,可以用下面方式解決。
在命令行中,輸入下面的命令:
jps -m
這個命令會列出所有運行的 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
根據后面的信息找到你想關閉的 jvm。輸入下面的命令(假設關閉 2384):
taskkill /f /pid 2384
關于怎么在Vert.x中使用Maven插件創建一個項目問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。