Maven
-
问题描述
-
我们项目中用的jar包,需要先下载再导入 再依赖
-
jar包之间的依赖关系 程序员需要明确 否则报错 比如 jar包A 依赖于jar包B 只导入jar包A 程序报错
-
我们的项目都在一个大的工程中 所有的代码都写在了一个工程中 这样功能做不到抽取 更做不到分模块开发
-
在实际开发中 手动导入jar包 可能存在jar包之间的版本兼容问题 特别是依赖包
-
1. 什么是Maven
Maven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中, 通过该文件Maven可以管理项目的整个生命周期,包括清除、编译,测试,报告、打包、部署等等。目前Apache下绝大多数项目都已经采用Maven进行管理. 而Maven本身还支持多种插件, 可以方便更灵活的控制项目, 开发人员的主要任务应该是关注商业逻辑并去实现它, 而不是把时间浪费在学习如何在不同的环境中去依赖jar包,项目部署等。Maven正是为了将开发人员从这些任务中解脱出来而诞生的。
总结: Maven是一个采用纯Java编写的开源项目管理工具
2. 为什么使用Maven
-
解决导入jar包的问题 版本冲突等问题
-
解决项目构建问题
3. Maven的作用
-
依赖管理
-
一键构建
3.1. 依赖管理
依赖管理 分为依赖和管理
依赖: 就是我们导入jar
管理:一般是jar包的版本管理
-
直接依赖
-
间接依赖
3.2. 一键构建
一键构建 表示项目从开发到部署 都是通过maven命令完成 依赖声明周期
4. Maven的生命周期
一个项目从编写代码开始->[清理clean]编译->测试->运行->打包->部署的过程
-
编码时期:程序员写代码
-
编译: 代码编写完成之后 想变成class文件
命令是:compile
-
测试: 上线之前 想进行功能测试
-
运行: 项目运行 没啥说的
命令是 run
-
打包: java项目打成 jar web项目打成war
命令是:package
-
安装: 把java的包安装到本地仓库
命令是 install
-
部署: 上线到生产环境
deploy
-
清理: 清除已经编译好的class文件
命令:clean
5. Maven的下载
注意点:下载下来之后 是个压缩包 解压时 路径不要有中文
6. maven工程的包的介绍
-
bin : 命令文件夹
-
boot : 启动器 (引导程序)
-
conf : maven配置文件
-
lib: maven需要的jar包
7. 仓库介绍
7.1. 仓库的分类
-
本地仓库
本地仓库 表示本地硬盘上的某一个位置 这个位置用来存放 从中央仓库 或者 远程仓库 拉去下来的jar
-
远程仓库
是指互联网上的仓库 一般都是局域网(私服)
-
中央仓库
中央仓库 就是最核心 最大的 jar包最全的 服务于全球的一个仓库 有专门的团队在维护
7.2 jar的查找过程
1-> jar包 先从本地仓库找 如果本地仓库有 则不再往下找
2-> jar包 如果本地仓库没有 则从远程仓库找 如果有 则不会再往下找
3-> jar包 如果远程仓库没有 则会从中心仓库找 (百分之99的都能找到 )
7.3 本地仓库的配置
8. maven的使用
8.1 指令的使用
需要把 maven包下的bin目录 配置到环境变量中 使用mvc:指令使用
这种方式已经过时 了解即可
8.2 和Idea集成
配置全局Maven设置(不要设置当前工程的Maven)
9. idea创建Maven工程
9.1. 创建普通java工程
目录结构
9.2. 创建web工程
9.2.1. 使用骨架的形式
9.2.2. java工程改造成web工程
9.3. 工程目录介绍
-
大概介绍
-
POM文件
-
大概介绍
-
坐标信息
-
环境变量的配置
-
坐标依赖
-
插件信息
-
10. maven工程的运行方式
10.1. tomcat的方式
和web工程一样
10.2. maven-tomcat插件的方式
-
pom文件添加如下内容
<!--在pom文件中 添加comcat7插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <!-- 项目访问路径 本例:localhost:9090, 如果配置的aa,则访问路径为localhost:9090/aa --> <path>/</path> <port>9090</port> <uriEncoding>UTF-8</uriEncoding><!-- 非必需项 --> </configuration> </plugin>
-
插件启动方式一
-
插件启动方式二
10.3. maven-jetty插件的方式
-
在pom文件中添加jetty插件
<plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.3.0.M2</version> <configuration> <webAppConfig> <!--配置根路径--> <contextPath>/</contextPath> </webAppConfig> <httpConnector> <!--配置端口--> <port>10000</port> </httpConnector> </configuration> </plugin>
-
运行方式同上
11. maven的JDK版本问题
-
问题描述
11.1. 解决方式一
-
在pom.xml中配置
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> <java.version>1.8</java.version> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
-
刷新
-
在pom.xml添加如下信息
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>
-
刷新
11.3. 解决方式三
-
在maven配置文件setting中profiles标签内添加如下信息
<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> <maven.compiler.encoding>utf-8</maven.compiler.encoding> </properties> </profile>
12. 坐标的作用范围
-
compile
默认scope为compile,表示为当前依赖参与项目的编译、测试和运行阶段,属于强依赖。打包之时,会达到包里去。
-
test
该依赖仅仅参与测试相关的内容,包括测试用例的编译和执行,比如定性的Junit。
-
runtime
依赖仅参与运行周期中的使用,编译不参与。一般这种类库都是接口与实现相分离的类库,比如JDBC类库,在编译之时仅依赖相关的接口,在具体的运行之时,才需要具体的mysql、oracle等等数据的驱动程序。 此类的驱动都是为runtime的类库。
-
provided
该依赖在打包过程中,不需要打进去,这个由运行的环境来提供,比如tomcat或者基础类库等等,事实上,该依赖可以参与编译、测试和运行等周期,与compile等同。区别在于打包阶段进行了exclude操作。