使用 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=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 关闭后,你就可以再次运行了。

### 回答1: Vert.x 是一个开源的、高性能、异步、多语言的应用程序框架。它是基于 JVM 的,旨在提供一种易于使用的方式来编写分布式、高性能、可伸缩的应用程序。 美国的一些公司和组织已经开始使用 Vert.x 来构建他们的应用程序。比如,Uber 使用 Vert.x 构建他们的 UberEATS 应用程序,并表示它使得他们的开发工作更加高效和简单。 Vert.x 具有许多功能和优点,包括: 1. 高性能:Vert.x 是异步和非阻塞的,可以处理大量并发连接。 2. 多语言支持:Vert.x 支持多种语言,包括 Java、Kotlin、Scala、Groovy、JavaScript 和 Ruby。 3. 分布式:Vert.x 允许您将应用程序部署在多台服务器上,从而实现分布式架构。 4. 可伸缩性:Vert.x 可以轻松地扩展以满足不断增长的需求。 5. 处理不同类型的数据:Vert.x 可以处理各种数据类型,包括 HTTP、TCP、WebSocket、AMQP、MQTT 和 JDBC。 总之,Vert.x 提供了一种强大的、可伸缩的方式来构建分布式、高性能的应用程序,它在美国和其他地区的公司和组织中都得到了广泛的应用。 ### 回答2: 美团使用Vert.x开发了一系列项目,包括但不限于以下几个方面: 首先,美团在餐饮外卖领域利用Vert.x开发了在线订餐平台。这个平台能够提供用户多样化的餐饮选择,并且支持用户在线下单、支付、配送等整个链路的管理。通过Vert.x的高并发特性,优化了订单处理和实时配送过程,提升了用户体验。 其次,美团还利用Vert.x开发了跨领域的在线购物平台。这个平台可以聚合多个商家的商品信息,为用户提供全面的商品选择。通过使用Vert.x的事件驱动和异步处理机制,能够高效地处理大量用户的请求并快速响应。 另外,美团还借助Vert.x构建了智能客服系统。这个系统利用人工智能和机器学习技术,能够识别用户的问题并自动回答,提供个性化的服务。同时,利用Vert.x的高性能和可扩展性,可以支持大量用户同时进行在线咨询,确保用户得到及时的解答。 最后,美团还利用Vert.x开发了实时数据分析平台。通过对大数据进行实时处理和分析,可以帮助美团更好地了解用户行为和需求,提供更精准的推荐和营销策略。Vert.x的高并发和低延迟特性,使得平台能够快速响应用户的查询和请求,提供实时的数据分析结果。 综上所述,美团利用Vert.x开发了餐饮外卖平台、在线购物平台、智能客服系统和实时数据分析平台等一系列项目,实现了高并发、高性能、实时响应等功能,提升了用户体验和业务效率。 ### 回答3: 美团使用Vert.x构建了一系列项目,以满足其业务需求和技术要求。以下是其中几个主要的项目: 1. 消息推送服务:美团使用Vert.x创建了一套高效可靠的消息推送服务,用于向用户发送各种类型的实时通知和提醒。该服务基于Vert.x的事件驱动架构,能够处理大规模并发请求,并提供了可靠的消息传输机制。 2. 实时订单处理系统:美团通过使用Vert.x构建了一个实时订单处理系统,用于接收、处理和跟踪用户的订单请求。该系统利用Vert.x的异步I/O、实时事件处理和高性能特性,能够快速响应用户的订单请求,并实时更新订单状态。 3. 分布式任务调度系统:美团利用Vert.x开发了一个分布式任务调度系统,用于管理和调度各种任务的执行。该系统基于Vert.x的事件总线和集群管理功能,实现了任务的分布式调度、负载均衡和故障恢复,提高了任务执行的效率和可靠性。 4. 微服务框架:美团使用Vert.x搭建了一套微服务框架,用于实现业务模块的解耦和水平扩展。该框架基于Vert.x的事件驱动和响应式编程模型,提供了服务注册与发现、负载均衡、容错处理等功能,简化了微服务的开发和部署。 5. 实时数据分析平台:美团利用Vert.x构建了一个实时数据分析平台,用于收集、处理和展示各种业务数据。该平台基于Vert.x的事件驱动和流式处理能力,能够实时处理大量的数据,并提供实时的数据分析和可视化功能,帮助美团实时监控业务运营情况。 通过这些项目的应用,美团有效地利用了Vert.x的高性能、低延迟和可伸缩性特点,提升了系统的吞吐量和并发处理能力,同时满足了其实时业务和大数据处理的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

isea533

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值