Maven的生命周期和插件(NEW)

  不同版本的插件,功能有可能不同,有些配置在某些版本中根本就永不了,所以使用插件的时候注意点!
生命周期 运行一个命令,要进过哪些步骤。 如,执行mvn test命令,会先执行compile,再执行test,这就是一个生命周期。 一个生命周期中,包含若干个阶段 每个阶段都对应一个插件(plugin) 每个插件又有若干个目标,将根据具体环境决定执行哪个目标(goal)。    比如,执行 mvn test命令  生命周期将经过如下几个阶段: 资源拷贝 maven-resources-plugin:2.6:resources (default-resources) 编译java源代码 maven-compiler-plugin:2.5.1:compile (default-compile) 测试资源拷贝 maven-resources-plugin:2.6:testResources (default-testResources) 测试代码编译 maven-compiler-plugin:2.5.1:testCompile (default-testCompile) 测试 maven-surefire-plugin:2.12.4:test (default-test) 可以看到,上面的maven-resources-plugin和maven-compiler-plugin插件都执行了2次,但是每次执行的目标都不相同,这就是插件与它的目标!   插 件 Maven中所有的命令都是通过执行插件来完成的 插件具有不同的目标 (goal)
goal:
Java源代码的编译和测试代码的编译功能很类似,都是调用Java编译器进行,将功能类似的代码开发为一个插件,通过不同的目标goal来区分它们!
 
========================================================================= 
一个生命周期 Life Circle
经过若干个阶段 Phase
每个阶段执行不同的插件 Plugin
每个插件具有不同的目标 Goal
每个目标对应一个具体的任务 Task 
Maven中有3套不同的生命周期,它们之间是相互独立的,互不影响。
这三套生命周期分别是:
  • Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
  • Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
  • Site Lifecycle 生成项目报告,站点,发布站点。

Clean生命周期:

  • pre-clean 执行一些需要在clean之前完成的工作
  • clean 移除所有上一次构建生成的文件
  • post-clean 执行一些需要在clean之后立刻完成的工作

mvn clean中的clean就是上面的clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,mvn clean等同于 mvn pre-clean clean,如果我们运行 mvn post-clean,那么 pre-clean,clean 都会被运行。这是Maven很重要的一个规则,可以大大简化命令行的输入。

Site生命周期

  • pre-site 执行一些需要在生成站点文档之前完成的工作
  • site 生成项目的站点文档
  • post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  • site-deploy 将生成的站点文档部署到特定的服务器上

经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成。

Default生命周期,最重要的,绝大部分工作都发生在这个生命周期中,重要和常用的阶段:

  • validate
  • generate-sources
  • process-sources
  • generate-resources
  • process-resources 复制并处理资源文件,至目标目录,准备打包。
  • compile 编译项目的源代码。
  • process-classes
  • generate-test-sources
  • process-test-sources
  • generate-test-resources
  • process-test-resources 复制并处理资源文件,至目标测试目录。
  • test-compile 编译测试源代码。
  • process-test-classes
  • test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
  • prepare-package
  • package 接受编译好的代码,打包成可发布的格式,如 JAR 。
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install 将包安装至本地仓库,以让其它项目依赖。
  • deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

记住,运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install的时候,代码会被编译,测试,打包。

此外,Maven的插件机制是完全依赖Maven的生命周期的。

==================================================================

插件的使用

 

下载插件:http://maven.apache.org/plugins/index.html

插件命令:source:jar-no-fork

作用:生成项目的源码jar包,只包含源代码,便于携带拷贝学习。

如,下面的配置,将对每个模块,单独生成一个src源码jar包。

在pom中对插件进行配置,如果在parent模块中进行插件的配置,子模块将继承该插件的所有配置

当前,子模块也可以自己定义插件覆盖parent中的配置。

<project>
	...

<!-- 插件 -->
	<build>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-source-plugin</artifactId>
					<version>2.2.1</version>
					<executions>
						<execution>
							<!-- 指定在package阶段后执行该插件 -->
							<phase>package</phase>
							<!-- 指定执行该插件的jar-no-fork目标 -->
							<goals>
								<goal>jar-no-fork</goal>
							</goals>
						</execution>
					</executions>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>

	...
</project>

 

子模块中引用插件

<project>
	...

<!-- 插件 -->
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-source-plugin</artifactId>
                                <!-- 该插件的其它配置将从parent中继承下来 -->
			</plugin>
		</plugins>
	</build>

	...
</project>

 

 

插件命令:war:war

作用:打war包时可能会用到

<!-- war包的插件 -->
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-war-plugin</artifactId>
	<version>2.4</version>
	<configuration>
		<!-- 指定生成的war包的名称,该名称不会影响发布的项目的访问路径 -->
		<warName>user</warName>
	</configuration>
</plugin>

 

 

插件命令:rar:rar

作用:打包为rar格式的包

不管includeJar为true或false,生成的rar包中的内容都一样,是哪儿没用对?

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-rar-plugin</artifactId>
	<version>2.3</version>
	<!--configuration标签用来配置插件的一些属性参数  -->
	<configuration>
		<!-- 是否包含本模块生成的jar包,这里设置true和false没区别,都把jar包塞rar包里了,很郁闷!!! -->
		<includeJar>false</includeJar>
	</configuration>
	<executions>
		<execution>
			<phase>package</phase>
			<goals><goal>rar</goal></goals>
		</execution>
	</executions>
</plugin>

 Rapid Testing Using the Jetty Plugin

 

Normally, testing a web application involves compiling Java sources, creating a WAR and deploying it to a web container.

Using the Jetty Plugin enables you to quickly test your web application by skipping the last two steps. By default the Jetty Plugin scans target/classes for any changes in your Java sources and src/main/webapp for changes to your web sources. The Jetty Plugin will automatically reload the modified classes and web sources.

To use the Jetty Plugin just add the following in your pom.xml:

<!-- jetty插件 -->
<plugin>
	<groupId>org.mortbay.jetty</groupId>
	<artifactId>jetty-maven-plugin</artifactId>
	<version>7.1.6.v20100715</version>
	<configuration>
		<!-- 扫描周期 -->
		<scanIntervalSeconds>3</scanIntervalSeconds>
		<!-- 指定项目发布的上下文 -->
		<webAppConfig>
			<contextPath>/test</contextPath>
		</webAppConfig>
		<connectors>
			<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
				<!-- 指定服务监听的端口 -->
				<port>80</port>
				<maxIdleTime>60000</maxIdleTime>
			</connector>
		</connectors>
	</configuration>
</plugin>

 访问jetty发布的服务,80端口可以省略,项目根路径指定为了test,所以:

http://localhost:80/user-web/   --->   http://localhost/test/ 

goal: Java源代码的编译和测试代码的编译功能很类似,都是调用Java编译器进行,将功能类似的代码开发为一个插件,通过不同的目标goal来区分它们!   =========================================================================  一个生命周期 Life Circle 经过若干个阶段 Phase 每个阶段执行不同的插件 Plugin 每个插件具有不同的目标 Goal 每个目标对应一个具体的任务 Task 

猜你喜欢

转载自schy-hqh.iteye.com/blog/1950128