maven 3.2.1之概念简介与构建web应用

    上篇介绍了maven的环境搭建与构建.jar的文件


    1.maven的概念简介    

maven的定义
maven基于pom,管理project lifecycle,以约定优于配置的原则,运用大量全局可重用的插件,完成项目构建、项目管理等任务。
在Build lifecycle中,从  repositories 中获取 plugins ,基于    pom    利用dependency management 合成 artifact


maven的生命周期
生命周期为一个项目构建中一系列的有序的阶段
在maven的生命周期里,当执行特定的阶段时,会按照顺序执行此阶段以前的阶段,直至此阶段,每一个阶段都绑定了特定的插件,特定的插件里都含有一个或者多个目标



maven仓库 repositories  用于存放插件的地方

maven的仓库分为本地仓库和远程中央仓库(即maven官方存放插件的地方)



maven插件或目标

Plugins and goals

一个插件包含一个或者多个目标,一个目标是一个明确的任务
maven获取插件的帮助信息
mvn help:describe -Dplugin=help -Dfull
上面的 -Dplugin=help 的方式 其实是java的传值方式 -Dname=value 而已


maven的pom.xml

查看pom的详细信息  pom.xml是让maven跑起来的文件
 查看隐藏的默认pom信息     mvn help:effective-pom
pom所能包含的配置信息如下

<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                      http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
<!-- The Basics -->
  <groupId>...</groupId>
  <artifactId>...</artifactId>
  <version>...</version>
  <packaging>...</packaging>
  <dependencies>...</dependencies>
  <parent>...</parent>
  <dependencyManagement>...</dependencyManagement>
  <modules>...</modules>
  <properties>...</properties>
<!-- Build Settings -->
  <build>...</build>
  <reporting>...</reporting>
<!-- More Project Information -->
  <name>...</name>
  <description>...</description>
  <url>...</url>
  <inceptionYear>...</inceptionYear>
  <licenses>...</licenses>
  <organization>...</organization>
  <developers>...</developers>
  <contributors>...</contributors>
<!-- Environment Settings -->
  <issueManagement>...</issueManagement>
  <ciManagement>...</ciManagement>
  <mailingLists>...</mailingLists>
  <scm>...</scm>
  <prerequisites>...</prerequisites>
  <repositories>...</repositories>
  <pluginRepositories>...</pluginRepositories>
  <distributionManagement>...</distributionManagement>
  <profiles>...</profiles>
</project>


源文档 <http://maven.apache.org/pom.html> 


依赖管理

Maven 依赖管理 dependency management
maven的依赖管理通过maven的项目坐标进行处理   格式:groupId:artifactId:version
maven支持传递性依赖 即可以处理间接依赖

maven坐标

maven坐标
通过  groupId:artifactId:packaging:version  这些组合标示符来确定一个项目的坐标
groupId  例如maven核心构建都在 org.apache.maven下
项目的另一种形式
groupId:artifactId:packaging:classifier:version.


2.maven构建web

   使用archetype插件创建web工程 如下

mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=com.undergrowth -DartifactId=jetty-web -Dversion=1.0
   archetype的工程模板有很多  根据archetypeArtifactId的值的不同创建不同的项目


在上面创建完web工程后 就可以添加jetty的支持来运行web项目了  需要注意的是 jetty 9.2 需要maven 3和 jdk1.7的支持


  也很简单 在pom中加入如下语句

<plugins>
	<plugin>
		<groupId>org.eclipse.jetty</groupId>
		<artifactId>jetty-maven-plugin</artifactId>
	<version>9.2.0.M0</version>
	</plugin>
	</plugins>

修改后的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.undergrowth</groupId>
  <artifactId>jetty-web</artifactId>
  <packaging>war</packaging>
  <version>1.0</version>
  <name>jetty-web Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>jetty-web</finalName>
	<plugins>
	<plugin>
		<groupId>org.eclipse.jetty</groupId>
		<artifactId>jetty-maven-plugin</artifactId>
	<version>9.2.0.M0</version>
	</plugin>
	</plugins>
  </build>
</project>

然后安装

mvn install  没有错误后  

运行jetty

mvn jetty:run

如果没有问题的话 在浏览器中输入 http://localhost:8080  即看到如下界面



接下来 在项目中支持解析jsp的能力

修改pom.xml 如下 添加jsp的依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.undergrowth</groupId>
  <artifactId>jetty-web</artifactId>
  <packaging>war</packaging>
  <version>1.0</version>
  <name>jetty-web Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
	<dependency>
	 <groupId>org.eclipse.jetty</groupId>
	 <artifactId>jetty-jsp</artifactId>
	 <version>9.2.0.M0</version>
	 <scope>provided</scope>
	</dependency>
  </dependencies>
  <build>
    <finalName>jetty-web</finalName>
	<plugins>
	<plugin>
		<groupId>org.eclipse.jetty</groupId>
		<artifactId>jetty-maven-plugin</artifactId>
	<version>9.2.0.M0</version>
	</plugin>
	</plugins>
  </build>
</project>

上面的<scope>provided</scope> 表示此依赖项由容器提供 具体含义如下



修改 src/main/webapp/index.jsp 如下

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
<%  
String path = request.getContextPath();  
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
%>  
  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
<head>  
<base href="<%=basePath%>">
<body>
<h2>Hello World,maven 世界</h2>
<%
 out.print("支持jsp标签");
%>
</body>
</html>

然后 mvn install 重新编译安装项目 此时jetty不用重新启动 因为jetty会自动扫描项目是否发生改变并会自动的发布 

结果如下


添加servlet 支持

修改pom.xml 如下  添加servlet依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.undergrowth</groupId>
  <artifactId>jetty-web</artifactId>
  <packaging>war</packaging>
  <version>1.0</version>
  <name>jetty-web Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
	<dependency>
	 <groupId>org.eclipse.jetty</groupId>
	 <artifactId>jetty-jsp</artifactId>
	 <version>9.2.0.M0</version>
	 <scope>provided</scope>
	</dependency>
	<dependency>
	 <groupId>org.eclipse.jetty</groupId>
	 <artifactId>jetty-servlet</artifactId>
	 <version>9.2.0.M0</version>
	 <scope>provided</scope>
	</dependency>
  </dependencies>
  <build>
    <finalName>jetty-web</finalName>
	<plugins>
	<plugin>
		<groupId>org.eclipse.jetty</groupId>
		<artifactId>jetty-maven-plugin</artifactId>
	<version>9.2.0.M0</version>
	</plugin>
	</plugins>
  </build>
</project>

在 src\main\java\com\undergrowth\maven 下添加一个servlet的实现类  SimpleJetty.java  如下

package com.undergrowth.maven;

import java.io.*;
import javax.servlet.*;                                                         
import javax.servlet.http.*;

public class SimpleJetty extends HttpServlet {
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter pw = response.getWriter();
        pw.println( "简单的 Executed" );
        pw.flush();
        pw.close();
    }
}

在web.xml 中添加servlet的映射

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
	<servlet-name>simpleJetty</servlet-name>
	<servlet-class>com.undergrowth.maven.SimpleJetty</servlet-class>
  </servlet>
  <servlet-mapping>
	<servlet-name>simpleJetty</servlet-name>
	<url-pattern>/simplejetty</url-pattern>
  </servlet-mapping>
</web-app>


测试如下



以上即是maven中构建简单的web 构建复杂的web 使用archetype插件也有模板 在cmd下运行 mvn archetype:generate 即可选择多种模板 进行构建项目 如下

会发现 模板太多了 所以可以进行过滤 如下

接下来的步骤 一步一步即可完成




    其实本文最想记录的是 通过 http://search.maven.org/    找到你想要的项目 包括其组id、构建id、版本号 

就是通过你搜索的项的pom中 获取到组id 构建id 版本号等等信息


   记录学习的脚步

posted on 2014-05-07 21:04  liangxinzhi  阅读(149)  评论(0编辑  收藏  举报