Maven系列(二)exec-maven-plugin

1. mvn 命令行运行

# exec:java 不会自动编译代码,你需要手动执行 mvn compile 来完成编译
mvn compile
# 执行 exec 运行 main 方法
mvn exec:java -Dexec.mainClass="com.github.binarylei.Main"
-Dexec.args="arg0 arg1 arg2"
mvn exec:exec -Dexec.executable="java" -Dexec.args="-DsystemProperty1=value1 -DsystemProperty2=value2
-XX:MaxPermSize=256m -classpath %classpath com.github.binarylei.Main arg1 arg2"

2. exec:java

exec 主要由两个 goal 组成:exec:exec 和 exec:java。你应该如何选择呢?

  • 首先,你需要记住,exec:exec 总是比 exec:java 强大而灵活
  • 此外,两者的主要区别是在线程管理上:exec:exec 总是启动一个新的线程,并且在只剩下守护线程的时候从 VM 上退出(关闭应用程序)。而对于 exec:java,当所有非守护线程结束时,守护线程会被 join 或 interrupt,应该程序不会关闭。

一般的使用者来说,这种差别并不重要。对于两者的选择,一般来说,如果你的工程启动非常简单,不需要设置 jvm 参数、系统属性、命令行参数,那么就用 exec:java,你只需要指定一下 mainClass,一切就 OK 了。例如这面这段配置:

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.github.binarylei.Main</mainClass>
</configuration>
</plugin>

3. exec:exec

假定我们的应用程序是通过这样的 java 命令来启动的:

java -DsystemProperty1=value1 -DsystemProperty2=value2 -XX:MaxPermSize=256m
-classpath .... com.github.binarylei.Main arg1 arg2

这个启动命令先后为应用程序设置了必要的系统属性:

  • systemProperty1 和 systemProperty2,
  • jvm 参数
  • classpath:....省略的部分就是我不说你也能想到会有多么冗长的类路径
  • 程序入口:--主类的类名,arg1/arg2 是传给应用程序的命令行参数
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>java</executable> <!-- executable指的是要执行什么样的命令 -->
<arguments>
<argument>-DsystemProperty1=value1</argument> <!-- 这是一个系统属性参数 -->
<argument>-DsystemProperty2=value2</argument> <!-- 这是一个系统属性参数 -->
<argument>-XX:MaxPermSize=256m</argument> <!-- 这是一个JVM参数 -->
<argument>-classpath</argument> <!-- 这是classpath属性,其值就是下面的<classpath/> -->
<classpath/> <!-- 这是exec插件最有价值的地方,工程的classpath并不需要手动指定,由exec自动计算得出 -->
<argument>com.github.binarylei.Main</argument> <!-- 程序入口,主类名称 -->
<argument>arg1</argument> <!-- 程序的第一个命令行参数 -->
<argument>arg2</argument> <!-- 程序的第二个命令行参数 -->
</arguments>
</configuration>
</plugin>

如果 pom 配置了插件则通过以下命令启动程序:

mvn exec:exec 或
mvn installs

是不是简洁了很多。

4. profiles

<profiles>
<profile>
<id>dev</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.github.binarylei.Main2</mainClass>
<arguments>
<argument>arg1</argument>
<argument>arg2</argument>
</arguments>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>

maven 中可以通过以下命令启动程序:

mvn installs -Pdev

Maven系列(二)exec-maven-plugin的更多相关文章

  1. Maven 系列 二 :Maven 常用命令,手动创建第一个 Maven 项目【转】

    1.根据 Maven 的约定,我们在D盘根目录手动创建如下目录及文件结构: 2.打开 pom.xml 文件,添加如下内容: <project xmlns="http://maven.a ...

  2. Maven 系列 二 :Maven 常用命令,手动创建第一个 Maven 项目

    1.根据 Maven 的约定,我们在D盘根目录手动创建如下目录及文件结构: 2.打开 pom.xml 文件,添加如下内容: 1 <project xmlns="http://maven ...

  3. Maven系列(一)plugin

    Maven系列(一)plugin maven-compiler-plugin 使用 mvn compile 命令,出现错误: 编码 GBK 的不可映射字符而不能编译.这是因为代码或注释中存在中文引起的 ...

  4. Maven(二)Maven 的基本配置

    Maven 的基本配置 Maven 中仓库的概念 Maven 中的仓库是用拿过来存储所有项目的依赖关系的.当你创建一个 Maven 项目时,Maven 会通过依赖机制先到你本地仓库(自己维护的仓库)中 ...

  5. Maven系列二setting.xml 配置详解

    文件存放位置 全局配置: ${M2_HOME}/conf/settings.xml 用户配置: ${user.home}/.m2/settings.xml note:用户配置优先于全局配置.${use ...

  6. Appium+Java 自动化测试系列二:Maven+Testng

    新建Maven项目作为测试项目分为3个步骤: 1.Eclipse安装Testng 插件 2.新建Maven项目 3.引入Testng 一.Eclipse安装Testng插件 TestNG安装可选择在线 ...

  7. Maven(二)Maven项目的创建(命令、myeclipse)及生命周期

    上一篇给大家介绍了Maven的概念和仓库的一些信息,接下来给大家分享一下使用命令和MyEclipse创建Maven项目 一.使用命令管理Maven项目 1.1.创建Maven java项目 1)创建一 ...

  8. Maven 系列 一 :Maven 快速入门及简单使用【转】

    开发环境 MyEclipse 2014 JDK 1.8 Maven 3.2.1 1.什么是Maven? Maven是一个项目管理工具,主要用于项目构建,依赖管理,项目信息管理. 2.下载及安装 下载最 ...

  9. Maven 系列 一 :Maven 快速入门及简单使用

    开发环境 MyEclipse 2014 JDK 1.8 Maven 3.2.1 1.什么是Maven? Maven是一个项目管理工具,主要用于项目构建,依赖管理,项目信息管理. 2.下载及安装 下载最 ...

  10. Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例)

    这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例) ...

随机推荐

  1. python-log-env

    logging.basicConfig(format="[%(asctime)s] %(filename)s[line:%(lineno)d] %(levelname)s: %(messag ...

  2. linux随机数

    linux系统随机数生成;1,利用uuid(universally unique identifier),由open software foundation在distributed computing ...

  3. 马尔可夫毯(Markov Blanket)

    马尔可夫毯(Markov Blanket) 最近接触到马尔可夫毯(MarkovBlanket)这个概念,发现网上资料不多,通俗易懂的解释甚少,查了一些资料后,决定写一个总结. 提到马尔可夫毯,就会有一 ...

  4. redis该怎么用

    最近一些人在介绍方案时,经常会出现redis这个词,于是很多小伙伴百度完redis也就觉得它是一个缓存,然后项目里面把数据丢进去完事,甚至有例如将实体属性拆分塞进redis hash里面的奇怪用法等等 ...

  5. CSS镂空图片处理

    来源:http://www.zhangxinxu.com/wordpress/?p=5267,分享收藏 使用镂空图片,通过CSS改变颜色,达到图片切换的效果,可以同过背景图,然后改变背景色,从而达到图 ...

  6. linux 下创建文本的方法

    1.   打开终端,输入  vi  1.txt 输入:wq 文本创建成功 2.  打开终端,输入  vim  1.txt 输入:wq 文本创建成功 3. 打开终端 , 输入 touch  1.txt ...

  7. cv::circle《转》

    void circle(CV_IN_OUT Mat& img, Point center, int radius, const Scalar& color, int thickness ...

  8. UI5-文档-4.17-Fragment Callbacks

    现在我们已经集成了对话框,是时候添加一些用户交互了.用户肯定希望在某个时候再次关闭对话框,因此我们添加一个按钮来关闭对话框并分配一个事件处理程序. Preview The dialog now has ...

  9. VBox 安装 macOS 10.12

    安装步骤⑴ 下载及解压 macOS 10.12 Sierra Final by TechReviews.rar ⑵ 下载及双击安装 VirtualBox-5.1.6-110634-Win.exe ,默 ...

  10. 快速可靠网络传输协议 KCP(转)

    KCP 是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低30%-40%,且最大延迟降低三倍的传输效果.纯算法实现,并不负责底层协议(如UDP)的收发,需要使用者自己定 ...