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

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

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

(0)

相关推荐

  • maven添加oracle依赖失败问题的处理方法

    由于Oracle授权问题,Maven3不提供oracle JDBC driver 可以到maven中央仓库去下载依赖,网址: http://repo.spring.io/plugins-release/com/oracle/ojdbc6/11.2.0.3/     复制到本地仓库对应目录即可 <!-- oracle --> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6&

  • java如何使用自己的maven本地仓库详解

    本地仓库 主要是一种缓存,当你使用远程仓库中下载组件后,它下一次会优先从本地进行加载,一般位于USER_HOME/.m2目录下,我们自己也可以建立公用的包,把包发布到本地仓库,自己在其它项目里直接可以用,当然如果希望在任务地方都使用自己的包,需要把它发布到远程仓库中. 像nuget,npm一样maven也是仓库 Jar的maven配置 <dependency> <groupId>javalindday</groupId> <artifactId>jpaDem

  • 使用maven profile指定配置文件打包适用多环境的方法

    开发过程, 我们习惯把数据源配置, 项目常量, 日志配置等基础数据配置写到一个个单独的的文件中. 如jdbc.properties等各种.格式的文件. 如何不频繁修改配置文件, 随时打包不同基础数据配置信息的项目. 1.新建maven项目,   在pom.xml中添加 profile节点信息如下: <profiles> <profile> <!-- 开发环境 --> <id>dev</id> <properties> <envi

  • Maven根据不同环境打包不同配置文件的方法

    开发项目时会遇到这个问题:开发环境,测试环境,生产环境的配置文件不同,打包时经常要手动更改配置文件,更改的少还可以接受,但是如果需要更多个配置文件,手动的方法就显得非常笨重了. 下面介绍一种方法,利用Maven插件来打包不同环境的配置文件.我们用到的是maven-war-plugin这个插件. 首先贴出整个pom文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.

  • Maven项目改为spring boot项目的方法图解

    目录树 •新建Maven项目及步骤 •修改方法 •启动测试 新建Maven项目及步骤 我这里是从创建开始讲,使用的工具是Idea2017版本.如果是已经创建了Maven,想改为spring boot项目的请直接跳到[修改方法] 1.点击右上角的File,出来的列表选择New Object: 2.选择Maven,勾选Create from archetype,选择quickstart 3.输入GroupId与ArtifactId,Version版本号自己看着怎么顺眼怎么改:其中GroupId为包名

  • 解决IDEA中Maven项目中JSTL标签无效问题

    代码如下(忽略编译错误,不影响结果) 最近刚换IDEA用上Maven,之前一直都是用Eclipse.这回踩了个坑,所以跟大家分享一下. 当我准备在IDEA上用Maven创建SSM项目的时候,我发现页面的JSTL标签不生效,EL标签和导入的C标签会直接被输出. 例如上图最后页面显示的是${name},并没有输出我定义的"呵呵",在pom.xml文件中有jstl的依赖包,但死活不生效. 尝试了很多方法,网上找了很多资料,想起之前用IDEA创建普通web项目的时候,导入C标签会报错,需要手动

  • 浅谈Maven环境隔离应用

    前言 在大大小小的公司中,开发总是多环境的,可能是2个(dev.prod)或者是4个甚至更多(dev.prod.beta.local). 我们需要针对的配置不同环境下的服务器地址或数据库地址或属性参数等等,而Maven的环境隔离就帮我们解决了这实际性的问题,轻松解决完成环境隔离. 什么是Maven环境隔离 顾名思义,Maven环境隔离就是将开发中的环境分隔开,方便进行开发.这个在实际项目中用的还是蛮多的,如果你的项目用的Maven构建但是没用环境隔离,请立即将项目做一下环境隔离,相信我,你会回来

  • 解决MyEclipse中Maven设置jdk版本jdk1.8报错问题

    今天安装了jdk1.8.tomcat8.和maven3.5.2,弄好后在myeclipse新建了一个maven项目,项目默认是jdk1.5,如图一,我把它改成jdk1.8,项目就报错了,如图二,然后update project后又变成jdk1.5了. 图一: 图二: 解决方法: 打开maven项目的pom.xml文件, 在build节点下加入下面这段代码 ,然后在选中项目右键-->maven4myeclipse-->update project...就能更新为jdk1.8了.如图三,现在项目已

  • 如何将maven项目划分为多个模块

    多模块拆分的必要性 使用Java技术开发的工程项目,无论是数据处理系统还是Web网站,随着项目的不断发展,需求的不断细化与添加,工程项目中的代码越来越多,包结构也越来越复杂这时候工程的进展就会遇到各种问题: (1)不同方面的代码之间相互耦合,这时候一系统出现问题很难定位到问题的出现原因,即使定位到问题也很难修正问题,可能在修正问题的时候引入更多的问题. (2)多方面的代码集中在一个整体结构中,新入的开发者很难对整体项目有直观的感受,增加了新手介入开发的成本,需要有一个熟悉整个项目的开发者维护整个

  • 浅谈Maven 项目中依赖的搜索顺序

    网上有很多关于maven项目中mirror.profile.repository的搜索顺序的文章,说法不一.官方文档并没有找到相关的说明,鉴于此,我抽时间做了一个验证. 依赖仓库的配置方式 maven项目使用的仓库一共有如下几种方式: 中央仓库,这是默认的仓库 镜像仓库,通过 sttings.xml 中的 settings.mirrors.mirror 配置 全局profile仓库,通过 settings.xml 中的 settings.repositories.repository 配置 项目

  • Maven在Java8下如何忽略Javadoc的编译错误详解

    JavaDoc简介And基础知识 (一) Java注释类型 //用于单行注释. /*...*/用于多行注释,从/*开始,到*/结束,不能嵌套. /**...*/则是为支持jdk工具javadoc.exe而特有的注释语句. 说明:javadoc 工具能从java源文件中读取第三种注释,并能识别注释中用@标识的一些特殊变量(见表),制作成Html格式的类说明文档.javadoc不但能对一个 java源文件生成注释文档,而且能对目录和包生成交叉链接的html格式的类说明文档,十分方便. (二)Java

  • Maven本地仓库的配置以及修改默认.m2仓库位置

    本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven会从远程仓库下载到你本地仓库.这样在你下次使用的时候就不需要从远程下载了.如果你所需要的jar包版本在本地仓库没有,而且也不存在于远程仓库,Maven在构建的时候会报错,这种情况可能是有些jar包的新版本没有在Maven仓库中及时更新. (感觉和网络里面的路由器有点像,你发请求,先在路由器缓存中找,若有就返回:没有,再去服务器下载新的再返回给用户的同时更新路由器本地缓存.) 默认仓

随机推荐