官方资料http://www.mojohaus.org/exec-maven-plugin/
这个插件有两个goal, exec:java和exec:exec, 这两者差别表如今如下两个方面: ##VM进程的差异 exec:java,是在同一个VM中执行mvn命令和java程序,即它们在同个进程中;
而exec:exec会建立一个新的VM去运行java程序,所以它能够配置单独的VM参数java
##configuration参数不一样 注意,两者的configuration必须写在<plugin>根结点之下,不然不认识。 exec:java的配置更简单易用,exec:exec的配置更原始(所以也更强大)linux
##exec:java的基本配置windows
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.5.0</version> <configuration> <mainClass>test.child1.Main</mainClass> <!--程序入口--> <additionalClasspathElements> ${project.basedir}/target/conf,${project.basedir}/../conf </additionalClasspathElements><!--额外的classpath--> </configuration> <executions> <execution> <goals> <goal>java</goal> </goals> </execution> </executions> </plugin>
这里指定了main入口和额外的classpath,这里的classpath的分隔符使用的是逗号","maven
##exec:exec的配置spa
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.5.0</version> <configuration> <executable>java</executable><!-- 使用java命令来执行应用程序 --> <arguments> <!-- 设置java命令后面附带的参数 --> <argument>-classpath</argument> <classpath /> <!-- 插件将收集全部的依赖库和编译好的class文件, 也能够指定使用哪些依赖,若是依赖太多,这样作太费事。根据java命令的规则,classpath必须放在程序入口以前 --> <argument>test.child1.Main</argument> <!-- 程序入口 --> <argument>-Dkey=value</argument> </arguments> </configuration> <executions> <execution> <goals> <goal>exec</goal> </goals> </execution> </executions> </plugin>
从这个配置能够明显的看出,它会根据配置组合出一条相似于下面的这条java执行命令:.net
java -classpath C:\~\.m2\~\xx1.jar;C:\~\.m2\~\xx2.jar;D:\project\target\classes test.child1.Main -Dkey=value
而后执行命令
mvn exec:exec -DaddResourcesToClasspath=true
addResourcesToClasspath是指将资源文件的目录也加入到classpath, 它是可选的,若是资源文件已经在classes目录(即资源文件已经处于classpath中),则不须要附加这个参数。可是若是开发者经过maven-resources-plugin更改了目标路径,会致使找不到资源文件的目录,依赖于资源文件的程序没法运行。
##exec:exec添加额外的classpath
上面的例子,没法将自定义的路径加入到classpath,解决办法是手动拼接classpath, 为了方便收集全部的依赖库,可使用maven-dependency-plugin插件将依赖的库事先拷贝到特定的目录,好比${project.basedir}/target/lib/。 示例以下插件
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.5.0</version> <configuration> <executable>java</executable> <arguments> <argument>-classpath</argument> <argument> ${project.basedir}/target/classes${path.separator}${project.basedir}/target/lib/*${path.separator}${project.basedir}/target/conf </argument> <argument>test.child1.Main</argument> </arguments> </configuration> <executions> <execution> <goals> <goal>exec</goal> </goals> </execution> </executions> </plugin>
示例中的${path.seperator}是java的系统变量,表示classpath的分隔符, 见maven pom进阶教程 - properties、filter ,linux上是冒号":", windows上是分号";"(使用java -h查看classpath的说明)code