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

相关文章
相关标签/搜索