maven
一,项目的打包
jar -->java项目
war-->web项目
方式1【不推荐】
如果不是maven项目,直接把WebRoot里面的内容copy到tomcat/webapps里面bjsxt
存在问题 如果项目依赖了其它包(非WEB-INF/lib)。那么这些包就无法进入项目
方式二【推荐】
非maven项目推荐
导出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 任务时,才会自动下载需要的插件。
mirror相当于一个拦截器,它会拦截maven对remote repository的相关请求,把请求里的remote repository地址,重定向到mirror里配置的地址。
此时,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没有实际影响。
2,eclipse集成maven插件
2.1 下载maven服务器
下载地址http://maven.apache.org/download.cgi
2.2 配置环境变量并测试
1,将下载的压缩文件解压到D盘
2,配置M2_HOME的环境变量
3,配置path环境变量,在path值的末尾添加"%MAVEN_HOME%\bin"
4,点击确定之后,打开cmd窗口:输入 mvn -version,出现如下内容表示安装成功
2.3 配置本地仓库
2.4 配置镜像
<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配置
<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插件
2.6,配置eclipse jdk
-Dmaven.multiModuleProjectDirectory=MAVEN_HOME
3【掌握】eclipse下创建java项目
创建项目
项目结构说明
加入相关依赖
<!-- 加入常量配置 -->
<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>
排除相关依赖
Scop的说明
compile:编译依赖范围,在三个classpath都有效。默认的
test:测试依赖范围,在编译代码和运行代码是无效。
provided:以提供的依赖范围,在编译和测试的时候有效,在运行的时候无效。例如servlet-api,因为容器已经提供,在运行的时候是不需要的。
runtime:运行时依赖范围,仅在测试和运行的时候有效。例如jdbc只有在测试和运行的时候才有效。
system:系统依赖范围,与provided范围一致,但是依赖是通过系统变量来指定依赖,不利于移植。
导入本地jar包
4 eclipse下maven项目聚合
项目与项目之间的依赖
依赖的方式
Copy
Alt+/
项目的继承方式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
查看子项目的依赖
发项父项目所有的依赖全部过来
总结
父项目的打包方式必须为pom
子项目会继承父项目所有的依赖
项目的继承方式2
修改02_maven_parent
修改02_maven_children
总结
如果父项目加入了依赖管理器,那么子项必须手动去声明需要的依赖,如果当前依赖父项目有了,可以不指定版本号 如果没有,那么必须有GAV坐标
5 eclipse下创建maven的WEB项目
创建项目
解决src/main/java不显示问题
项目右键->properties->
引入相关的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>
运行项目
在index.jsp里面输出1-100
<%@ 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>
修改页面
查看web.xml发面是2.3的servlet版本
而2.3的版本不支持注解和文件上传的注解
更改2.3---3.1
1, 删除web.xml
2, 右键项目—properties—project faects
3, 去掉Dynamic Web Module前面的沟沟
4, 更改2.3---3.1
5, 应用
6, 再把Dynamic Web Moule勾上
7, 点击Further进入
8, 查看web.xml
6 使用maven的常规使用
Eclipse
Run as maven install 把项目进行打包 并把当前的包放入本地的maven仓库
Run as maven clean 把target里面编译的去掉
Run as maven build 构建项目的规则
tomcat7:run ======mvn tomcat7:run
package 只是打包
Maven窗口命令
mvn clean
mvn packaage
mvn tomcat7:run