项目上线时不会使用
缺点:非WEB-INF/lib里面的包无法发布到项目里面
如jstl
1,定义
1,Maven 作为 Apache 的一个开源项目,旨在给项目管理提供更多的支持,它最早的意图只是为了给 apache 组织的几个项目提供统一的开发、测试、打包和部署,能让开发者在多个项目中方便的切换。
2,Maven 中最值得称赞的地方就是使用了标准的目录结构和部署。
3,在多个开发团队环境的情况下,Maven可以设置标准。由于大部分的项目设置简单可重复使用,使使Maven开发容易,创建报告,检查,生产和测试完全自动化设置。
4,maven是一个项目构建和管理的工具,提供了帮助管理 构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。
5,maven的好处在于可以将项目过程规范化、自动化、高效化以及强大的可扩展性,利用maven自身及其插件还可以获得代码检查报告、单元测试覆盖率、实现持续集成等等。
2,maven可以让项目与项目之间有关系
关系就是依赖
以前的做法
如项目A需要项目B里面的类
把项目B打成jar包放到A的lib里面去
3,如果上一个版本的spring jar包有bug要更新如何办
解决方法:把所有和spring相关的版本删除,再添加新的版本
存在问题:以前的spring的依赖包如
jackson
log4j
等等,这些包的版本如法得知道要更新什么版本
4,使用maven解决上面问题
5,基本原理
6,镜像
mirror相当于一个拦截器,它会拦截maven对remote repository的相关请求,把请求里的remote repository地址,重定向到mirror里配置的地址。
此时,B Repository被称为A Repository的镜像。如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。换句话说,任何一个可以从仓库Y获得的构件,都能够从它的镜像中获取。
< mirrors/>是镜像列表,是maven从远程仓库里下载构件的一组服务器镜像。镜像能减轻中央maven库的负载,也能突破代理等的网络环境的限制,每个仓库都有一个ID,而mirror需要和仓库的ID对应。
7,坐标
jar包名字的组成部分是什么
spring-mvc-4.3.17.jar
jar名 项目名
版本号
生活中的坐标作用:
Maven里面基础的坐标
G-groupId
A -artifactId
V --version
8,三级仓库结构
(1)远程公用仓库
Maven 内置了远程公用仓库: http://repo1.maven.org/maven2 这个公用仓库也叫中央仓库是由 Maven 自己维护,包好了世界上大部分流行的开源项目构件。
https://mvnrepository.com
(2)内部中央仓库
也称私有共享仓库(私服)。一般是由公司自己设立的,只为本公司内部共享使用。它既可以作为公司内部构件协作和存档,也可以作为公用类库镜像缓存,减少在外部访问和下载的频率。
(3)本地仓库
Maven 会将工程中依赖的构件(Jar包)从远程下载到本机一个目录下管理,通常默认在 $user.home/.m2/repository 下。
1.下载
http://maven.apache.org/download.cgi
3.目录说明
bin 要配置环境变量的命令地址
boot 启动jar包 了解
conf 配置文件[重点]
lib 依赖包
5.配置本地仓库
D:\DevTools\server\apache-maven-3.6.0\conf
<!-- 配置阿里云镜像-->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<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>
9.修改jdk的配置
3.Maven java项目目录说明
src/main/java 存放java代码
src/main/resouces 存放 配置文件的
src/test/java 存放测试的java的代码
src/test/resources 存放测试的配置文件
src:是以上四个目录的集合
target:插件和编译后的目录
pom.xml
|–对项目需要的插件和依赖的配置
4.导入一些简单的依赖
<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>01_maven_hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 声明依赖的配置 -->
<properties>
<spring.version>4.3.7.RELEASE</spring.version>
<mybatis.version></mybatis.version>
<servlet.version>3.1.0</servlet.version>
</properties>
<!-- 配置依赖 -->
<dependencies>
<!-- 配置spring-bean的依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
<!-- 排除commons-logging的包 -->
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 引入servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
<!-- 引入jsp -->
</dependencies>
</project>
6.GAV坐标的再次说明
G–groupid 组织ID
A- artifactId 项目名
V- version 项目版本
scope
|-- compile 默认的编译时有效
|-- provided 在项目打包时不会被加入war包里
|-- runtime 运行时有效
|-- system 如果maven里面没有需要的jar包那可以使用本地的包要结合systemPath
|-- systemPath
7.引入本地包
<dependency>
<groupId>commons-carrent</groupId>
<artifactId>commons-carrent</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>D:\workspace-sts\1129adv\01_maven_hello\lib\commons-
carrent.jar</systemPath>
</dependency>
引入
9.总结
每一个Maven项目都有gav坐标
目地是为了上其它项目能进行依赖
1.创建01_maven_parent的Maven项目
打包形式
packaging :pom
加入依赖
<!-- 加入依赖 -->
<dependencies>
<!-- mybaits -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
</dependencies>
2.创建01_maven_children的maven项目
3.特点
只要子项目继承了父项目。那么子项目就拥有的父项目里面依赖的所有jar包
1.创建02maven_parent
打包方式 packaging 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>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 依赖管理器 -->
<dependencyManagement>
<!-- 加入依赖 -->
<dependencies>
<!-- mybaits -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
2.创建02maven_children
打包方式 packaging jar
<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>
<parent>
<groupId>com.sxt</groupId>
<artifactId>02_maven_parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>02_maven_children</artifactId>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.17.RELEASE</version>
</dependency>
</dependencies>
</project>
3.总结
使用dependencyManagement之后,子项目继承父项目,默认子项目不能引入父项目包,如果子项目要使用,必须显示依赖,但可以不用指定版本号
使用maven的module项目,完成项目的拆分,将一个系统可以拆分为n个子系统(子项目)进行开发:
可以按照三层结果进行拆分,也可以按照项目的模块进行拆分。
1.聚合方式
按三层结构分
dao
service
domian
controller
按功能分
www.jd.com
https://passport.jd.com 认证的项目
https://order.jd.com 订单项目
https://vip.jd.com 会员项目
https://cart.jd.com/ 购物车项目
https://help.jd.com 客服项目
2.创建maven_parent 项目
打包方式:pom
依赖:maven_commons
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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sxt</groupId>
<artifactId>maven_parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 配置依赖 -->
<dependencies>
<dependency>
<groupId>com.sxt.commons</groupId>
<artifactId>maven_commons</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
3.创建maven_domain Model
打包方式jar
创建User
4.创建maven_dao Model
打包方式jar
依赖:maven_domain
pom.xml
5.创建maven_service Model
打包方式jar
依赖:maven_dao
pom.xml
UserService
UserServiceImpl
3.为什么要使用项目聚合
小项目没必须去
电商项目
ego-commons 项目 jar
ego 项目 pom
|–ego-manager 后台项目 module pom
|–manager-entity jar
|–manager-mapper jar
|–manager-service jar
|–manager-controllers war
|–ego-sso 单点登陆项目 module pom
|–sso-entity
|–sso-mapper
|–sso-service
|–sso-contrllletr
|–ego-protal module pom
|-- protal-entity
|-- protal -mapper
|-- protal -service
|-- protal -scontroller
发现差
src/main/java
src/test/java
src/test/resources
出现以上问题原因
解决方案
<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>/bjsxt</path><!-- 项目的请求路径 -->
</configuration>
</plugin>
</plugins>
</build>
1,maven install 把项目打包war 或者jar
http://127.0.0.1:8080/bjsxt/index.html
出现以上错
原因
当前项目没有引入jsp 和servlet的jar包
解决方案
引入jsp和servlet的jar包
<!-- javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.2.1</version>
<scope>provided</scope>
</dependency>
pom.xml
<!-- 添加jstl的依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!-- 配置当前项目使用哪个版本去编译 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<!-- 指定source和target的版本 -->
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<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>1129carrent</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>1129carrent Maven Webapp</name>
<url>http://maven.apache.org</url>
<!-- 声明依赖的版本 -->
<properties>
<servlet.version>3.1.0</servlet.version>
<jsp.version>2.3.1</jsp.version>
<jstl.version>1.1.2</jstl.version>
<mybatis.version>3.4.6</mybatis.version>
<mybatis-spring.version>1.3.2</mybatis-spring.version>
<spring.version>4.3.17.RELEASE</spring.version>
<druid.version>1.1.2</druid.version>
<mysql.version>5.1.39</mysql.version>
<jackson.version>2.8.9</jackson.version>
<fileupload.version>1.3.3</fileupload.version>
<pagehelper.version>5.1.8</pagehelper.version>
<!-- 注意只能使用2.0以下的版本 -->
<log4j.version>1.2.17</log4j.version>
<poi.version>3.17</poi.version>
<zxing.version>3.3.3</zxing.version>
</properties>
<dependencies>
<!-- 导入jsp -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>${jsp.version}</version>
<scope>provided</scope>
</dependency>
<!-- 导入servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
<!-- 添加jstl的依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!-- pagepelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>${pagehelper.version}</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<!-- 导入spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- springmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- mysql数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- json -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- 文件上传 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${fileupload.version}</version>
</dependency>
<!-- log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<!-- poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<!-- zxing -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>${zxing.version}</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>${zxing.version}</version>
</dependency>
<dependency>
<groupId>umeditor</groupId>
<artifactId>umeditor</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>D:\workspace-sts\1129adv\1129carrent\lib\ueditor-
mini.jar</systemPath>
</dependency>
<!-- druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
</dependencies>
<build>
<finalName>1129carrent</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>/bjsxt</path><!-- 项目的请求路径 -->
</configuration>
</plugin>
<!-- 配置当前项目使用哪个版本去编译 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<!-- 指定source和target的版本 -->
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>1129carrent</display-name>
<!-- 编码过滤器开始 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<!-- <url-pattern>/* -->
springmvc
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath*:applicationContext.xml
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath*:springmvc.xml
1
springmvc
*.action
index.jsp
StatViewServlet
com.alibaba.druid.support.http.StatViewServlet
loginUsername
root
loginPassword
123456
allow
deny
192.169.2.111
StatViewServlet
/druid/*
WebStatFilter
com.alibaba.druid.support.http.WebStatFilter
exclusions
*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
WebStatFilter
/*