zoukankan      html  css  js  c++  java
  • Maven系列(二)exec-maven-plugin

    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
  • 相关阅读:
    002Python和JS的不同进制之间的转换实现
    001JS中的非严格相等 ==
    028_同步本地git项目到github和码云
    015你所常见的日常英语
    001CSS三大特性
    014国家地区语言缩写码
    013常用的英语词典Share
    012_犯人的夏日的蚊虫叮咬词汇
    011_中文"上火"的英文怎么说
    我的IT之路这样走过
  • 原文地址:https://www.cnblogs.com/binarylei/p/8628243.html
Copyright © 2011-2022 走看看