zoukankan      html  css  js  c++  java
  • 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>
    

    在 srcmainjavacomundergrowthmaven 下添加一个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 版本号等等信息


       记录学习的脚步

  • 相关阅读:
    初识数据库与SQL语句
    初始面向对象
    集合与深浅copy
    函数进阶
    函数操作
    文件操作
    生成器与列表生成式
    函数名的本质,闭包和迭代
    小数据库
    DAY 5 字典
  • 原文地址:https://www.cnblogs.com/liangxinzhi/p/4275572.html
Copyright © 2011-2022 走看看