首页 > 开发 > Java > 正文

使用Vert.x Maven插件快速创建项目的方法

2024-07-14 08:42:20
字体:
来源:转载
供稿:网友

本文介绍了使用Vert.x Maven插件快速创建项目的方法,分享给大家,具体如下:

文档地址: https://reactiverse.io/vertx-maven-plugin

已有项目添加该插件

在项目 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": [      "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 关闭后,你就可以再次运行了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VeVb武林网。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表