上篇介绍了maven的环境搭建与构建.jar的文件
1.maven的概念简介
maven的定义
maven基于pom,管理project lifecycle,以约定优于配置的原则,运用大量全局可重用的插件,完成项目构建、项目管理等任务。
在Build lifecycle中,从 repositories 中获取 plugins ,基于 pom 利用dependency management 合成 artifact
生命周期为一个项目构建中一系列的有序的阶段 在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-pompom所能包含的配置信息如下
<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.0archetype的工程模板有很多 根据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 版本号等等信息
记录学习的脚步