官方資料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