maven pom進階教程 - exec:exec與exec:java

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

相關文章
相關標籤/搜索