MAVEN

一、 Maven简介

目前无论使用IDEA还是Eclipse等其他IDE,使用里面ANT工具。ANT工具帮助我们进行编译,打包运行等工作。Apache基于ANT进行了升级,研发出了全新的自动化构建工具Maven。(知道:ANT有的功能MAVEN都有,只是使用起来更加方便了,功能更加强大了。)
以后创建的都是Maven项目,无论是普通java se项目还是java ee项目都是maven项目。
Maven工具基于POM(Project Object Model,项目对象模型)模式实现的。在Maven中每个项目都相当于是一个对象,对象(项目)和对象(项目)之间是有关系的。关系包含了:依赖、继承、聚合,实现Maven项目可以更加方便的实现导jar包、拆分项目等效果。

二、 Maven工具关于导jar(依赖)的实现原理

在Maven工具所谓的导入jar实际上就是关系中的“依赖”,所有需要导入的jar,都是在maven工具的pom.xml中进行实现的(配置<dependency>)。而是Maven工具会根据pom.xml中的配置进行自动下载对应的jar包。从中央仓库进行下载,下载到本地仓库中进行使用。下载时是根据坐标进行确认需要下载的jar包。
中央仓库:互联网上的服务器。服务器中包含所有jar包(jar包公司只要上传过)。不是必须使用哪个。默认是maven自己的网络服务器,但是由于速度较慢,我们一般都配置成国内的中央仓库(配置成阿里的)
本地仓库:本机中文件夹。文件夹包含了自己下载的jar。文件夹结构为groupid分级的文件夹/artifactid文件夹/version文件夹/包含jar包。
坐标:坐标包含了三个点,只有有一个点不一样就是不同的jar
Group Id:公司名。多用公司网址倒写。感觉和包写法一样。
Artifact Id:项目名。
Version:版本。
平时如果希望查询坐标,多去下面这个网站进行查询。
https://mvnrepository.com
http://maven.aliyun.com

三、 Maven总体配置

默认本地仓库: C:/用户/登录用户文件夹/.m2/repository
在C:/用户/用户文件夹/下创建.m2文件,去01软件中把settings.xml放入到.m2文件夹中。
1 settings.xml中配置项
1.1 配置本地仓库地址
此步骤不是必须配置,如果在公司中公司提供了本地仓库内容此步骤必须配置。
如果不配置默认安装在C:/用户/用户文件夹/.m2中
<localRepository>D:/repository</localRepository>
1.2 配置中央仓库
在<mirrors>下添加

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

1.3 配置JDK版本
在<profiles>下添加

<profile>
<id>jdk-1.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>

四、 Maven项目结构

java文件夹和resource文件夹中内容(如果是web项目)最终也会被编译到WEB-INF/classes中。放到resource中配置文件和之前使用ant项目时,把配置文件放入到src的效果是完全一样的。
--demo 项目名
--.idea 项目的配置,自动生成的,不需要关注。
--src
-- main 实际开发内容
--java 写包和java代码,此文件默认只编译.java文件
--resource 所有配置文件。最终编译把配置文件放入到classpath中。
-- test 测试时使用,自己写测试类或junit工具等
--java 打包时不会保存到jar或war包中
pom.xml 整个maven项目所有配置内容。

五、 POM模型

1 依赖关系

通俗理解:导jar包。可以导入中央仓库的jar,也可以导入当前开发中其他项目打包后的jar包。
在pom.xml中<dependencies>中通过<dependency>结合坐标进行导入。

<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.1.10.RELEASE</version>
</dependency>
</dependencies>

1.1 依赖的传递性
如果A依赖了B,那么C依赖A时会自动把A和B都导入进来。
创建A项目后,选择IDEA最右侧Maven面板lifecycle,双击install后就会把项目安装到本地仓库中,其他项目就可以通过坐标引用此项目。
1.2 取消依赖传递性

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.11.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.1.10.RELEASE</version>
</dependency>

2 继承关系

设定F项目继承E项目,在F项目中配置parent标签。在E项目POM.xml中配置的内容就被F项目继承了。相当于在F项目也配置一遍(不是所有内容都能继承的)。

<parent>
<groupId>com.bjsxt</groupId>
<artifactId>e</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>

2.1 dependencyManagement
dependencyManagement声明依赖关系。作用:统一版本管理。一般情况下都结合properties使用。
<properties>里面标签名自定义

<properties>
<mybatis-version>3.5.3</mybatis-version>
<mysql-driver-version>5.1.48</mysql-driver-version>
</properties>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis-version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-driver-version}</version>
</dependency>
</dependencies>
</dependencyManagement>

3 聚合关系

前提:继承。
聚合包含了继承的特性。
聚合时多个项目的本质还是一个项目。这些项目被一个大的父项目包含。且这时父项目类型为pom类型。同时在父项目的pom.xml中出现<modules>表示包含的所有子模块。
即使在idea中,也可以使用聚合在一个窗口创建多个项目。
3.1 删除模块步骤
右键模块--> remove module

右键项目 --> delete

在父项目中pom.xml中<modules>中删除模块名

3.2 新建之前删除过的同名项目步骤
菜单 settings --> 取消复选框的勾选。否则新建项目pom.xml中配置内容无效。

六、 Maven 中项目类型

在pom.xml中通过<packaging>进行设置项目的类型。默认为jar类型。
packaging的可取值:
jar 默认值
pom 聚合项目时,父项目类型。没有实际意义。
war web项目。没有学习spring boot 之前,创建web项目时需要手动修改packaging类型为war类型(今天)。
packaging直接影响项目最后install时项目的打包类型。

七、 创建war类型Maven项目

1 创建maven项目

正常创建一个maven项目
在pom.xml配置文件中增加标签: <packaging>war</packaging>。 标签代表当前的应用是一个war工程。

2 创建webapp文件夹

在src/main下新建webapp文件夹
在webapp下新建WEB-INF文件夹
在WEB-INF下新建web.xml

3 配置web模块

如果不配置会导致无法新建jsp文件
菜单 --> project struct -->

4 配置pom.xml

配置<packagin>为war
导入web的依赖
配置tomcat插件

<packaging>war</packaging>
<groupId>com.bjsxt</groupId>
<artifactId>myweb</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<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>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 发布后叫做ROOT -->
<path>/</path>
<port>80</port>
</configuration>
</plugin>
</plugins>
</build>

5 运行

八、 scope属性可取值

compile:默认值,表示该依赖在编译和运行时都生效。
provided:只在编译期生效。依赖和插件冲突时使用。
runtime:只在运行时生效
test:只在测试的时候生效。依赖junit时使用。
system:和provided类似,表示该jar需要引用外部额外jar。
import:替代父项目时scope取值。通常在springboot和springcloud技术中使用。

九、 Maven项目名规范

maven的项目不要使用-(减号),而使用_ 下划线
例如:work_parent

十、 SSM项目拆分演示

使用Maven可以把以前项目的颗粒度变粗。以前的一个包,在Maven中很方便的变成一个项目。这些都是利用Maven的POM特性。
把以前的一个项目按照包拆分成下面四个项目。
pojo
mapper
service
controller
利用聚合项目演示,拆分过程略。
附:资源拷贝插件

<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>

十一、 热部署

热部署是Maven中tomcat插件实现的功能。可以实现一键把项目部署到服务器的tomcat中。部署的前提要求知道tomcat/webapps下manager项目访问的用户名和密码,tomcat默认是没有,所以进行配置。

1 配置tomcat中manager项目的用户名和密码步骤

在tomcat/confg/tomcat-users.xml中<tomcat-users>里面添加

<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="tomcat" password="tomcat" roles="admin-gui,admin-script,manager-gui,manager-script"/>

重启tomcat后通过浏览器地址栏访问ROOT项目
http://ip:8080/
弹出登录框输入,用户名tomcat,密码tomcat,进入manager项目就说明配置成功了

2 配置tomcat插件

在项目的pom.xml中tomcat插件部分额外添加属性。
对于部署项目时
<port>无意义的。
<path>部署项目名
<url>最后的控制器是text

<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8081</port>
<!-- 发布到tomcat名称 -->
<path>/abc</path>
<username>tomcat</username>
<password>tomcat</password>
<url>http://192.168.8.128:8080/manager/text</url>
</configuration>
</plugin>
</plugins>
</build>

点击IDEA右侧MAVEN --> plugins --> tomcat7
判断配置时path设置的项目名是否在tomcat/webapps存在。
如果不存在tomcat7:deploy
如果存在tomcat7:redeploy

原文地址:https://www.cnblogs.com/huxiaoyang/p/13362899.html