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