Maven必须掌握的基础
-
依赖管理
- maven是一个项目管理工具,依赖管理就是maven对项目中jar包的管理过程
- 没有maven时,我们需要将jar包一个一个的放到我们工程文件下,费时费力,而有maven以后,所有的jar包都存放到仓库中,我们在项目工程中,只需要指定需要的jar包坐标即可
-
仓库的种类
- 本地仓库:个人在本地搭建的仓库
- 远程仓库(私服):一般是公司的私有仓库
- 中央仓库:maven的官方仓库
- 我们构建工程时,maven会根据我们pom.xml中配置的jar包坐标,去本地仓库找到相应jar包
- 默认情况下,如果本地没有我们要的jar包,会直接到中央仓库去下载jar包到本地仓库
- 但如果我们配置了私服,就会优先到私服中寻找jar包,私服没有再去中央仓库下载
-
一键构建
- maven自己集成了Tomcat插件,可对项目进行编译,打包等操作,一般我们还是希望使用自己的Tomcat,所以可以通过配置,使用自己的服务器
-
常用命令
- clean:将原来的构建信息清除
- compile:编译src中main目录下文件
- test:测试
- package:将本地项目打包
- install:将本地项目打包到本地仓库
- deploy:将本地项目打包上传到私服
-
Maven生命周期
- clean:清理生命周期
- 从compile~deploy:默认生命周期
- 站点生命周期,知道有这么个生命周期就行
-
如何解决jar包冲突(用spring框架做演示)
- 导入spring的jar包
- 导入低版本的jar包
- 如何解决:
-
直接依赖:项目中用标签引入的jar包
-
传递依赖:标签引入的jar包自动导入的依赖包
-
话说,只要你人为的确保所有jar包都不冲突,版本都一致,也就没那么多事了。
-
一、优先声明原则,哪个jar包坐标引入位置靠上(先引入的),哪个jar包的依赖包优先进项目
-
二、当直接依赖的路径比传递依赖的路径进,就优先导入这个直接依赖的包
-
三、使用标签将直接将依赖包排除(推荐使用)
-
四、一个无冲突的配置文件
<!-- 统一管理jar包版本 --> <properties> <spring.version>5.0.2.RELEASE</spring.version> <slf4j.version>1.6.6</slf4j.version> <log4j.version>1.2.12</log4j.version> <shiro.version>1.2.3</shiro.version> <mysql.version>5.1.6</mysql.version> <mybatis.version>3.4.5</mybatis.version> <spring.security.version>5.0.1.RELEASE</spring.security.version> </properties> <!-- 锁定jar包版本 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> </dependencies> </dependencyManagement> <!-- 项目依赖jar包 --> <dependencies> <!-- spring --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.6.8</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-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</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-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <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.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- log start --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- log end --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.2</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>${spring.security.version}</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>${spring.security.version}</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>${spring.security.version}</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-taglibs</artifactId> <version>${spring.security.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.9</version> </dependency> </dependencies> <!-- 添加tomcat7插件--> <!-- <build>--> <!-- <plugins>--> <!-- <plugin>--> <!-- <groupId>org.apache.tomcat.maven</groupId>--> <!-- <artifactId>tomcat7-maven-plugin</artifactId>--> <!-- <version>2.2</version>--> <!-- </plugin>--> <!-- </plugins>--> <!-- </build>-->
-
Maven的分模快构建
- 现在分析一个场景,淘宝,它有手机端和PC端,也就是用手机和用电脑都可以完成相同功能,那么,淘宝是为手机端和PC端都分别建立了一个工程么?当然不是,需要重写的只有显示层,也就是针对PC和手机如何将同样的数据合理展示出来,而后台的功能,无需重写
- 实现这样的场景,就需要使用我们前后端分离的模块化技术
- 将每一个功能都写成一个模块,当某个项目需要这个功能时,将模块拿过来用即可,无需重写
- maven可以创建父子工程,实现模块化技术,以下例子作为讲解,只建立普通三层模块演示,日后复杂工程模块,步骤都相同
-
Maven的父子工程创建
- 一、创建父工程(就是帮我们管理jar之类的一些琐事)
- 二、创建dao层模块
- 三、创建service模块
- 四、建立Controller(页面交互的层)模块
- 五、配置父工程pom(这里我直接用了上面我给出的无冲突配置信息,注意我给出的文件里面注释了配置tomcat7插件,这里需要使用请解开注释)
-
启动模块化工程
- 方法一、直接启动父工程(将使用maven集成的tomcat)
- 方法二、直接运行controller子模块
- 首先我们要知道,maven工程运行一个项目会先到pom中找jar包,而controller的pom中没有任何jar包,jar包全在父工程里面,而父工程pom也没有我们模块的jar包,所以直接运行子模块需要打包
- 1、打包
- 2、运行子模块
- 方法三、使用本地服务器
-
私服
- 这玩意一般到公司都会有公司的私服,你只需要了解,怎么用即可,如果想在自己电脑上建立私服测试的,下个压缩包解压就行了
- 详细内容可以到b站去学,步骤太复杂,就不多赘述了