本文介绍了使用Vert.x Maven插件快速创建项目的方法,分享给大家,具体如下:
文档地址: https://reactiverse.io/vertx-maven-plugin
已有项目添加该插件
在项目 pom.xml 目录,执行下面的命令即可添加:
mvn io.reactiverse:vertx-maven-plugin:1.0.17:setup
执行该命令后,在 pom.xml 中会增加下面的配置:
3.5.3 1.0.17 io.vertx vertx-stack-depchain ${vertx.version} pom import
还有下面的插件:
io.reactiverse vertx-maven-plugin ${vertx-maven-plugin.version} vmp initialize package true
自动引入的 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": [ "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" } ]
打包项目
集成了 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
当相同端口的 jvm 关闭后,你就可以再次运行了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。