maven

一,项目的打包

jar -->java项目

war-->web项目

方式1【不推荐】

如果不是maven项目,直接把WebRoot里面的内容copy到tomcat/webapps里面bjsxt

存在问题 如果项目依赖了其它包(非WEB-INF/lib)。那么这些包就无法进入项目




cmd查看maven版本 如何查看maven版本_maven


方式二【推荐】

非maven项目推荐


cmd查看maven版本 如何查看maven版本_maven_02


cmd查看maven版本 如何查看maven版本_maven_03


cmd查看maven版本 如何查看maven版本_maven_04


导出war包放到tomcat/webapps里面运行

1,maven概述

1.1 定义

1,Maven 作为 Apache 的一个开源项目,旨在给项目管理提供更多的支持,它最早的意图只是为了给 apache 组织的几个项目提供统一的开发、测试、打包和部署,能让开发者在多个项目中方便的切换。

2,Maven 中最值得称赞的地方就是使用了标准的目录结构和部署。

3,在多个开发团队环境的情况下,Maven可以设置标准。由于大部分的项目设置简单可重复使用,使使Maven开发容易,创建报告,检查,生产和测试完全自动化设置。

4,maven是一个项目构建和管理的工具,提供了帮助管理 构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。

5,maven的好处在于可以将项目过程规范化、自动化、高效化以及强大的可扩展性,利用maven自身及其插件还可以获得代码检查报告、单元测试覆盖率、实现持续集成等等。

1.2 基本原理

Maven 的基本原理很简单,采用远程仓库和本地仓库以及一个类似 build.xml 的 pom.xml ,将 pom.xml 中定义的 jar 文件从远程仓库下载到本地仓库,各个应用使用同一个本地仓库的 jar ,同一个版本的 jar 只需下载一次,而且避免每个应用都去拷贝 jar 。

同时它采用了现在流行的插件体系架构,只保留最小的核心,其余功能都通过插件的形式提供,所以 maven 下载很小,在执行 maven 任务时,才会自动下载需要的插件。


cmd查看maven版本 如何查看maven版本_maven_05


mirror相当于一个拦截器,它会拦截maven对remote repository的相关请求,把请求里的remote repository地址,重定向到mirror里配置的地址。


cmd查看maven版本 如何查看maven版本_java_06


此时,B Repository被称为A Repository的镜像。如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。换句话说,任何一个可以从仓库Y获得的构件,都能够从它的镜像中获取。

< mirrors/>是镜像列表,是maven从远程仓库里下载构件的一组服务器镜像。镜像能减轻中央maven库的负载,也能突破代理等的网络环境的限制,每个仓库都有一个ID,而mirror需要和仓库的ID对应。

1.3,坐标

(1)定义

坐标用来标识时空中的某个点,方便人们找到位置,如中电信息大厦可以用经纬度坐标找到,也可以通过国家、省市区、街道、门牌组成的坐标去找。

(2)分类

groupId: 组织ID,一般是公司、团体名称

artifactId:实际项目的ID,一般是项目、模块名称

version:版本,开发中的版本一般打上 SNAPSHOT 标记

Type/packaging :包类型,如JAR,EAR,POM…

classifier:分类,如二进制包、源、文档

通过这个规则就可以定位到世界上任何一个构件。

1.4,特点

1,依赖管理是maven的一大特征,对于一个简单的项目,对依赖的管理并不是什么困难的事,但是如果这个项目依赖的库文件达到几十个甚至于上百个的时候就不是一个简单的问题了。在这个时候maven对于依赖管理的作用就显露出来了。

2,传递性依赖是在maven2中添加的新特征,这个特征的作用就是你不需要考虑你依赖的库文件所需要依赖的库文件,能够将依赖模块的依赖自动的引入。

3,由于没有限制依赖的数量,如果出现循环依赖的时候会出现问题,这个时候有两种方式处理,一种是通过 build-helper-maven-plugin 插件来规避,另一种就是重构两个相互依赖的项目。

4,通过传递性依赖,项目的依赖结构能够很快生成。Maven 能够解决依赖传递

5,传递依赖中需要关注的就是依赖调解,依赖调解的两大原则是:最短路径优先和第一声明优先

6,maven有三套classpath(编译classpath,运行classpath,测试classpath)分别对应构建的三个阶段。依赖范围就是控制依赖与这三套classpath的关系。

7,依赖范围有六种:

compile:编译依赖范围,在三个classpath都有效。

test:测试依赖范围,在编译代码和运行代码是无效。

provided:以提供的依赖范围,在编译和测试的时候有效,在运行的时候无效。例如servlet-api,因为容器已经提供,在运行的时候是不需要的。

runtime:运行时依赖范围,仅在测试和运行的时候有效。例如jdbc只有在测试和运行的时候才有效。

system:系统依赖范围,与provided范围一致,但是依赖是通过系统变量来指定依赖,不利于移植。

import(在maven2.0.9后支持):导入依赖范围,对三个classpath没有实际影响。


cmd查看maven版本 如何查看maven版本_java_06


2,eclipse集成maven插件

2.1 下载maven服务器

下载地址http://maven.apache.org/download.cgi


cmd查看maven版本 如何查看maven版本_cmd查看maven版本_08


cmd查看maven版本 如何查看maven版本_java_09


2.2 配置环境变量并测试

1,将下载的压缩文件解压到D盘


cmd查看maven版本 如何查看maven版本_cmd查看maven版本_10


2,配置M2_HOME的环境变量


cmd查看maven版本 如何查看maven版本_maven_11


3,配置path环境变量,在path值的末尾添加"%MAVEN_HOME%bin"


cmd查看maven版本 如何查看maven版本_cmd查看maven版本_12


4,点击确定之后,打开cmd窗口:输入 mvn -version,出现如下内容表示安装成功


cmd查看maven版本 如何查看maven版本_maven_13


2.3 配置本地仓库


cmd查看maven版本 如何查看maven版本_java_14


cmd查看maven版本 如何查看maven版本_maven_15


2.4 配置镜像


cmd查看maven版本 如何查看maven版本_spring_16


<mirror>  
      <id>alimaven</id>  
      <name>aliyun maven</name>  
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
      <mirrorOf>central</mirrorOf>          
    </mirror>


2.5 Maven项目的JDK配置


cmd查看maven版本 如何查看maven版本_maven_17


<profile>  
        <id>jdk1.8</id>  
        <activation>  
            <activeByDefault>true</activeByDefault>  
            <jdk>1.8</jdk>  
        </activation>  
        <properties>  
            <maven.compiler.source>1.8</maven.compiler.source>  
            <maven.compiler.target>1.8</maven.compiler.target>  
            <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>  
        </properties>  
    </profile>


2.5 配置eclipse mavem插件


cmd查看maven版本 如何查看maven版本_maven_18


cmd查看maven版本 如何查看maven版本_spring_19


cmd查看maven版本 如何查看maven版本_java_20


cmd查看maven版本 如何查看maven版本_spring_21


cmd查看maven版本 如何查看maven版本_cmd查看maven版本_22


cmd查看maven版本 如何查看maven版本_maven_23


2.6,配置eclipse jdk


cmd查看maven版本 如何查看maven版本_cmd查看maven版本_24


-Dmaven.multiModuleProjectDirectory=MAVEN_HOME

3【掌握】eclipse下创建java项目

创建项目


cmd查看maven版本 如何查看maven版本_java_25


cmd查看maven版本 如何查看maven版本_cmd查看maven版本_26


cmd查看maven版本 如何查看maven版本_spring_27


项目结构说明


cmd查看maven版本 如何查看maven版本_maven_28


cmd查看maven版本 如何查看maven版本_cmd查看maven版本_29


加入相关依赖


<!-- 加入常量配置 -->
    <properties>
        <!--版本号-->
        <spring.version>4.3.18.RELEASE</spring.version>
    </properties>
    <!-- 依赖 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>


排除相关依赖


cmd查看maven版本 如何查看maven版本_cmd查看maven版本_30


Scop的说明

compile:编译依赖范围,在三个classpath都有效。默认的

test:测试依赖范围,在编译代码和运行代码是无效。

provided:以提供的依赖范围,在编译和测试的时候有效,在运行的时候无效。例如servlet-api,因为容器已经提供,在运行的时候是不需要的。

runtime:运行时依赖范围,仅在测试和运行的时候有效。例如jdbc只有在测试和运行的时候才有效。

system:系统依赖范围,与provided范围一致,但是依赖是通过系统变量来指定依赖,不利于移植。

导入本地jar包


cmd查看maven版本 如何查看maven版本_spring_31


4 eclipse下maven项目聚合

项目与项目之间的依赖


cmd查看maven版本 如何查看maven版本_cmd查看maven版本_30


依赖的方式

Copy

Alt+/


cmd查看maven版本 如何查看maven版本_cmd查看maven版本_33


cmd查看maven版本 如何查看maven版本_cmd查看maven版本_34


项目的继承方式1

创建02_maven_parent

打包方式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>
    <groupId>com.sxt</groupId>
    <artifactId>02_maven_parent</artifactId>
    <version>1.0</version>
    <!-- 设置打包方式 -->
    <packaging>pom</packaging>

    <!-- 加入常量配置 -->
    <properties>
        <spring.version>4.3.18.RELEASE</spring.version>
    </properties>

    <!-- 依赖 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>

</project>


创建02_maven_children

打包方式可以是jar可以是pom 也可以war


cmd查看maven版本 如何查看maven版本_maven_35


查看子项目的依赖

发项父项目所有的依赖全部过来

总结

父项目的打包方式必须为pom

子项目会继承父项目所有的依赖

项目的继承方式2

修改02_maven_parent


cmd查看maven版本 如何查看maven版本_java_36


修改02_maven_children


cmd查看maven版本 如何查看maven版本_java_37


总结

如果父项目加入了依赖管理器,那么子项必须手动去声明需要的依赖,如果当前依赖父项目有了,可以不指定版本号 如果没有,那么必须有GAV坐标

5 eclipse下创建maven的WEB项目

创建项目


cmd查看maven版本 如何查看maven版本_spring_38


cmd查看maven版本 如何查看maven版本_java_39


cmd查看maven版本 如何查看maven版本_cmd查看maven版本_40


cmd查看maven版本 如何查看maven版本_maven_41


解决src/main/java不显示问题

项目右键->properties->


cmd查看maven版本 如何查看maven版本_java_42


cmd查看maven版本 如何查看maven版本_cmd查看maven版本_43


cmd查看maven版本 如何查看maven版本_spring_44


cmd查看maven版本 如何查看maven版本_java_45


cmd查看maven版本 如何查看maven版本_java_46


引入相关的jar


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

    </dependencies>


运行项目之配置tomcat的运行插件


<build>
        <finalName>03_maven_web</finalName>
        <!-- 配置插件 -->
        <plugins>
            <plugin>
                <!--maven的tomcat插件 -->
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <uriEncoding>UTF-8</uriEncoding> <!--解决页面提交数据乱码问题 -->
                    <port>8080</port><!-- tomcat插件的请求端口 -->
                    <path>/hello</path><!-- 项目的请求路径 -->
                </configuration>
            </plugin>
        </plugins>


    </build>


运行项目


cmd查看maven版本 如何查看maven版本_java_47


cmd查看maven版本 如何查看maven版本_spring_48


cmd查看maven版本 如何查看maven版本_maven_49


在index.jsp里面输出1-100


cmd查看maven版本 如何查看maven版本_spring_50


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
45d454545645645456
<c:forEach end="100" var="cc" begin="1">
${cc}
</c:forEach>
</body>
</html>


修改pom.xml引入jstl


<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.sxt</groupId>
    <artifactId>03_maven_web</artifactId>
    <packaging>war</packaging>
    <version>1.0</version>
    <name>03_maven_web Maven Webapp</name>
    <url>http://maven.apache.org</url>

    <properties>
        <servlet.version>3.1.0</servlet.version>
        <jsp.version>2.2</jsp.version>
        <jstl.version>1.1.2</jstl.version>
    </properties>

    <dependencies>
        <!--javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlet.version}</version>
            <scope>provided</scope>
        </dependency>
        <!-- jsp-api -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>${jsp.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- 添加jstl的依赖 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl.version}</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>${jstl.version}</version>
        </dependency>

    </dependencies>

    <!-- 项目构建节点 -->
    <build>
        <finalName>03_maven_web</finalName>
        <!-- 配置插件 -->
        <plugins>
            <plugin>
                <!--maven的tomcat插件 -->
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <uriEncoding>UTF-8</uriEncoding> <!--解决页面提交数据乱码问题 -->
                    <port>8080</port><!-- tomcat插件的请求端口 -->
                    <path>/hello</path><!-- 项目的请求路径 -->
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>


修改页面


cmd查看maven版本 如何查看maven版本_spring_50


cmd查看maven版本 如何查看maven版本_spring_52


查看web.xml发面是2.3的servlet版本


cmd查看maven版本 如何查看maven版本_java_53


而2.3的版本不支持注解和文件上传的注解

更改2.3---3.1

1, 删除web.xml

2, 右键项目—properties—project faects


cmd查看maven版本 如何查看maven版本_spring_54


3, 去掉Dynamic Web Module前面的沟沟


cmd查看maven版本 如何查看maven版本_maven_55


4, 更改2.3---3.1


cmd查看maven版本 如何查看maven版本_java_56


5, 应用


cmd查看maven版本 如何查看maven版本_spring_57


6, 再把Dynamic Web Moule勾上


cmd查看maven版本 如何查看maven版本_spring_58


7, 点击Further进入


cmd查看maven版本 如何查看maven版本_java_59


8, 查看web.xml


cmd查看maven版本 如何查看maven版本_java_60


6 使用maven的常规使用

Eclipse

Run as maven install 把项目进行打包 并把当前的包放入本地的maven仓库

Run as maven clean 把target里面编译的去掉

Run as maven build 构建项目的规则

tomcat7:run ======mvn tomcat7:run

package 只是打包


cmd查看maven版本 如何查看maven版本_spring_61


Maven窗口命令

mvn clean

mvn packaage

mvn tomcat7:run