MAVEN的生命周期,jetty插件

MAVEN的生命周期和插件

    maven是通过插件来实现功能的。所谓的生命周期就是我们在构建项目时,maven默认需要是想的一些功能,而每一个功能就通过插件的某一功能来实现。

    每个插件会有一个或多个功能,每个功能会实现一个目标(例如:生成test,compile,jar,rar,war)。

1.maven的插件

    先介绍maven的插件,理解了插件的作用,然后了解maven默认生命周期。就能很快掌握maven插件的使用。

    插件的使用命令。goal:插件目标,就是可以做成哪些事,例如:检验,打包,测试等等

mvn pluginname:goal

    从一个maven官网提供的source插件介绍。这个插件能将源码打包,可以对不同的源码进行打包。从下面图中,我们可以知道有很多goal

    然后我们在pom.xml中配置如下,这个插件默认的phase是package,先不配置phase。

 <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>3.0.0</version>
      </plugin>
    </plugins>
  </build>


    使用命令:

mvn clean install

    查看输出,插件并没有运行。直接使用插件

mvn source:jar

   直接就生成了一个包文件,但是只运行了插件,没有运行其它的编译,测试功能。   修改下插件的phrase和goal,

<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-source-plugin</artifactId>
				<version>3.0.0</version>
				<configuration>
					<outputDirectory>/absolute/path/to/the/output/directory</outputDirectory>
					<finalName>filename-of-generated-jar-file</finalName>
					<attach>false</attach>
				</configuration>
				<executions>
					<execution>
						<id>source-jar</id>
						<phase>compile</phase>
						<goals>
							<goal>jar</goal>
						</goals>
					</execution>
					<execution>
						<id>test-source-jar</id>
						<phase>test-compile</phase>
						<goals>
							<goal>test-jar</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
		

        执行maven的默认命令

mvn package

       从打印日志可以看出,在compiler和test-compiler后,使用了source插件。

       从这里可以看出来,如果没有绑定和插件是不会插入到maven默认的生命周期的。

        总结:一个插件有多个功能(goal),插件实现一个功能(goal)就是一个生命周期。要在MAVEN默认的生命周期中使用插件,就需要使用配置<phase>和<goal>。否则,就只能通过插件命令source:jar,但是这个命令只会执行source:jar的功能。在我们使用插件的时候,为了将其插入到maven的默认生命周期中,都需要设置<phase>和<goal>。

2.maven的生命周期

    maven有3个大的生命周期:clean,default,site。我们平时用的是clean,default周期。这么多生命周期,就是通过多个插件的多个功能实现的。下面整理的表,记录了这些生命周期名,作用,对应的插件,以对应的插件命令(和默认命令分清)。

    clean的生命周期:

生命周期作用插件命令
pre-clean执行清理前的工作maven-clean-pluginclean:clean
clean清理上一次构建生成的所有文件maven-clean-pluginclean:clean
post-clean执行清理后的工作maven-clean-pluginclean:clean


   site的生命周期:   

生命周期作用插件命令
pre-site生成前的工作mave-site-pluginsite:site
site生成项目的站点文件mave-site-pluginsite:site
post-site生成后的工作maven-site-pluginsite:site
site-deploy发布生成的站点文档maven-site-pluginsite-deploy

 default的生命周期:

生命周期作用插件命令
validate检测工程信息  
initialize初始化构建信息  
generate-sources在target中生成源码  
process-sourcess操作源码,过滤掉${}这些信息  
generate-resources生成资源文件maven-plugin-pluginplugin:descriptor
process-resources复制资源文件和源码到目标文件夹maven-resources-pluginresources:resources
compile编译源码maven-compiler-plugincompiler:compile
process-classes编译后的文件处理  
generate-test-sources生成测试的源码文件  
process-test-sources处理源码文件  
generate-test-resources生成测试的资源文件  
process-test-resources处理测试的资源文件maven-resources-pluginresources:testresources
test-compile编译测试maven-compiler-plugincompiler:testCompile
process-compile处理测试文件  
test测试maven-surefire-pluginsurefire:test
prepare-package打包前的准备工作  
package打包 不同的打包有不同的文件
pre-integration-test集成测试前的准备  
integration-test集成测试  
post-integration-test继承测试的后续处理  
verify运行检测maven-verifier-pluginverifier:verify
install生成到本地库maven-install-plugininstall:install
deploy发布到远程库maven-deploy-plugindeploy:deploy

3.jetty插件的使用

  第三方插件的使用,就是在maven默认的生命周期中插入一个生命周期(插件实现一个目标)。下面使用jetty插件实现一下

    a、使用

    在pom中设置:

	<dependencies>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
			<scope>provided</scope>
		</dependency>
	</dependencies>

	<profiles>
		<profile>
			<id>test</id>
			<properties>
				<test.name>test</test.name>
				<test.password>test</test.password>
			</properties>
		</profile>
		<profile>
			<id>dev</id>
			<properties>
				<test.name>release</test.name>
				<test.password>release</test.password>
			</properties>
		</profile>
	</profiles>

	<build>
		<finalName>test-web</finalName>
		<resources>
			<resource>
				<filtering>true</filtering>
				<directory>${basedir}/src/main/resources</directory>
				<includes>
					<include>*.properties</include>
				</includes>
			</resource>
		</resources>
		<plugins>
			<plugin>
				<groupId>org.eclipse.jetty</groupId>
				<artifactId>jetty-maven-plugin</artifactId>
				<version>9.3.8.v20160314</version>
				<configuration>
					<scanIntervalSeconds>3</scanIntervalSeconds>
					<stopKey>foo</stopKey>
					<stopPort>9999</stopPort>
					<connectors>
						<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
							<port>8000</port>
						</connector>
					</connectors>
				</configuration>
			</plugin>
		</plugins>
	</build>

 在src/main/resources中创建db.properties文件,内容如下

test.name=${test.name}
test.password=${test.password}

创建一个servlet

public class ThredServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 786750866880663272L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		Properties pro = new Properties();
		pro.load(this.getClass().getResourceAsStream("/db.properties"));
		req.setAttribute("test.password", pro.get("test.password"));
		req.setAttribute("test.name", pro.getProperty("test.name"));
		PrintWriter out = resp.getWriter();
		out.write("test.password:--" + pro.getProperty("test.password") + "\n\t");
		out.write("test.name:--" + pro.getProperty("test.name"));
		out.flush();
		out.close();
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		this.doGet(req, resp);
	}

}

    然后执行:

mvn jetty:run -P test

    输出

    接着执行

mvn jetty:run -P dev

    输出

    这样,通过<profile>可以很方便的在设置的环境中做开发,不用每次都去配置,节约时间。也不需要发布到tomcat中,每次都需要重启tomcat,相当浪费事件。

    b、jetty的配置信息

    从log中我们,发现jetty会先编译,测试,然后在运行。从下图可以看出jetty运行时加载的数据:class(class文件和property文件),web.xml,webapp(jsp,html)等信息

        jetty默认的class(class文件和property文件),web.xml,webapp(jsp,html)加载地址

resources in ${project.basedir}/src/main/webapp
classes in ${project.build.outputDirectory}
web.xml in ${project.basedir}/src/main/webapp/WEB-INF/

         可以直接设置

<webApp>
	<!-- context地址:就是模块的地址 -->
	<contextPath>/</contextPath>
	<!-- webapp地址 -->
	<baseResource>src/main/webapp</baseResource>
	<!-- web.xml地址 -->
	<descriptor>${project.basedir}/src/over/webapp/web.xml</descriptor>
</webApp>
					

    c、jetty的war包执行

        上面配置还是很麻烦,jetty提供了一个简单的配置。可以直接加载运行war包,也就是jetty会先编译,测试,打包,运行。不许要指定其它的文件信息,直接运行war包

<plugin>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-maven-plugin</artifactId>
      <version>9.3.8.v20160314</version>
      <configuration>
        <war>${project.basedir}/target/mycustom.war</war>
      </configuration>
</plugin>

        执行命令

mvn jetty:run-war -P test

 

转载于:https://my.oschina.net/u/2246410/blog/677801

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值