一、maven概念
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具和构建工具。基于java,使用必须有jdk
作用:项目的打包,部署,管理项目的jar包
Maven的优势
1. 约定优于配置 不用配置,固定死
2. 简单
3. 测试支持
4. 构建简单
5. CI集成 jenkis
6. 插件丰富
二、maven环境搭建
1.maven的下载配置
设置环境变量
测试安装及环境变量设置
2.本地及中央仓库迁移
需要了解的知识:
仓库repository
本地仓库: 程序员的个人电脑上<localRepository>D:/.m2/repository</localRepository>
远程仓库:
私服 局域网服务器仓库(自己公司的服务器nexus)
中央仓库 放各种版本各种可能会用到的jar文件(需要的配置文件需要在中央仓库下载)
maven中央仓库
apache中央仓库
阿里云的中央仓库
使用前需要修改settings.xml的3个位置 :
1.本地仓库的位置(c盘----其他盘符) 程序员windows家庭版(影音娱乐使用)----》windows10 专业版
2.中央仓库的位置(默认---》阿里云的)
3.jdk的使用版本 (默认1.5--》1.8)
本地仓库默认的地址:
settings.xml
(1)修改本地仓库的位置
<localRepository>D:/.m2/repository</localRepository>
(2)修改中央仓库的位置(这里使用的是阿里云的中央仓库,要知道,使用默认的仓库下载文件会非常慢)
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
(3)maven默认使用编译器: maven3使用jdk1.5, maven2 jdk1.3这些版本都太低了。我们可以修改
一种方式修改每个工程pom文件,这样每次新建maven工程都要设定
另外一种方式直接修改settings.xml
<profile>
<id>jdk-1.8</id>
<activation><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>
三、使用eclipse中的maven
1.eclipse使用maven环境配置
这里查看我们配置后修改的本地仓库的位置
2.使用eclipse创建maven项目helloworld
maven坐标:使用jar包,依赖该jar包需要通过坐标GAV
G: group 组织、公司名 org.lanqiao com.mysql org.apache
A: artifact 模块名,项目名字 ssm spring-aop spring-beans
V:version:版本号 0.0.1-SNAPSHOT快照版
注:
3.使用eclipse创建maven web项目
解决eclipse创建Maven项目后无法生成src/main/java资源文件夹的方法
在项目上右键选择properties,然后点击java build path,在Librarys下,编辑JRE System Library,选择workspace default jre。
tomcat7插件
<build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <!--控制tomcat端口号 --> <configuration> <port>8080</port> <!-- 发布到tomcat后的名称 --> <!--/ 相当于把项目发布成ROOT --> <path>/</path> <uriEncoding>UTF-8</uriEncoding> </configuration> </plugin> </plugins> </build>
4.使用eclipse创建空骨架的工程
使用mvn package命令可以打包成指定的jar(一般应用程序) 或者war(web应用程序)
六、maven常用命令、生命周期
mvn clean 清除项目目录中的生成结果 清理周期
默认生命周期
mvn compile 编译源代码
mvn test-compile 编译测试源代码
mvn test 运行应用程序中的单元测试
mvn package 根据项目生成的jar,war
mvn install 在本地Repository中安装jar
mvn deploy 发布项目
mvn clean package -Dmaven.test.skip=true:清除以前的包后重新打包,跳过测试类
依赖
(1)依赖的三要素,坐标(查找jar文件)
G: groupId 组织、公司名域名倒叙 +项目 org.lanqiao com.mysql org.apache.tomcat
A: artifactId 模块名/项目名字 ssm spring-aop spring-beans
V:version:版本号 0.0.1-SNAPSHOT快照版
通过依赖的GAV查找jar ---在本地仓库(远程仓库)查找
(2)统一的版本管理
<properties>
<spring-version>5.3.0</spring-version>
<junit-version>4.2</junit-version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit-version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-version}</version>
</dependency>
</dependencies>
(3)依赖的范围
<scope>test</scope>
compile默认
test
runtime
provided
编译时 测试时 运行时
compile V V V
test X V X
runtime X V V
provided V V X
(4)依赖的传递
pom.xml中导入一个依赖A.jar ---B.jar ---c.jar ---d.jar
maven会自动的把A.jar依赖的B.jar导入进来
(5)依赖冲突的问题
A.jar --- B.jar ---- C.jar
H.jar ---- C.jar
maven如何解决?2种原则
a.最短路径原则
A.jar --- B.jar ---- C.jar 路径长,所以不会导入
|
H.jar ---- C.jar 路径最短,所以会导入该C.jar
b.顺序原则
A.jar ---- C.jar //A先定义,就加载该C.jar
B.jar ---- C.jar
2个路径长度一样,按照依赖在pom.xml中的定义顺序来加载,谁先定义就加载谁的
手动去除依赖
<dependency>
<groupId>a</groupId>
<artifactId>a</artifactId>
<version>1.0</version>
//排除c依赖,原a.jar需要c.jar,通过这个设置,不会自动导入c.jar
<exclusions>
<exclusion>
<groupId>c</groupId>
<artifactId>c</artifactId>
</exclusion>
</exclusions>
</dependency>
日志框架
很多框架都会有日志框架,可能会照成冲突,可能会把自己一些依赖的日志框架排除
<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>org.lanqiao</groupId>
<artifactId>mvn_web1</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<properties>
<spring-version>4.3.12.RELEASE</spring-version>
</properties>
<dependencies>
<!-- 文件上传 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!--单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- log4j日志包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- jsp和servlet的依赖包 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
<!-- jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- mysql的驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
<!-- 谷歌工具包guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
<!-- spring context包依赖core,beans,expression,aop,common-logging包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-version}</version>
</dependency>
<!-- spring webmvc包依赖web包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring-version}</version>
</dependency>
<!-- spring jdbc包依赖tx包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring-version}</version>
</dependency>
<!-- aop织入包(声明式事务aop使用) -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
<!-- mybatis依赖包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!-- mybatis整合spring包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.3</version>
</dependency>
<!-- druid数据源包 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.20</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<!--控制tomcat端口号 -->
<configuration>
<port>8080</port>
<!-- 发布到tomcat后的名称 -->
<!--/ 相当于把项目发布成ROOT -->
<path>/</path>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
</project>