您的位置:首页 > 其它

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

2014-05-07 21:04 190 查看
上篇介绍了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 版本号等等信息

记录学习的脚步
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: