maven
1.maven的作用
a.管理jar
i.增加第三方jar(spring-context.jar spring-aop.jar....)
ii.jar包之间的依赖关系(自动关联下载所有依赖的jar,并且不会冲突)
b.将项目拆分成若干个模块
2.maven概念:
是一个基于java平台的自动化构建工具
make->ant->maven->gradle
maven能做哪些:
清理:删除编译的结果,为重新编译做准备
编译:java->class
测试: 针对于项目中的关键点进行测试,亦可用项目中的测试代码去测试开发代码;
报告:将测试的结果进行显示
打包:将项目中包含的多个文件压缩成一个文件,用于安装或部署。(java项目-jar,web项目-war)
安装:将打成的包 放到 本地仓库,供其他项目使用
部署:将打成的包 放到 服务器上准备运行。
-将java、js、jsp等各个文件进行删选、组装,变成一个可以直接运行的项目
-Eclipse中部署的web项目可以运行
-将Eclipse中的项目,复制到tomcat/webapps中则不能运行
-项目可以在webappas中直接运行
Eclipse中的项目,在部署时会找到一个对应的部署项目(在wtpwebapps中),区别在于:部署项目没有源码文件src(java),只有编译后的class文件和jsp文件
因为两者目录结构不一致,因此Tomcat中无法直接运行Eclipse中复制过来的项目(因为如果要在tomcat中运行一个项目,则该项目必须严格遵循tomcat的目录结构)
Eclipse中的项目要想在透明car中运行,就需要部署:a.通过eclipse中的 Add and Remove 按钮进行部署
b.将web项目打成一个war包,然后将该war包复制tomcat/webapps中,直接运行即可
自动化构建工具maven:将原材料(java,js,css,html,图片)->产品(可发布项目)
编译-打包-部署-测试 --》 自动构建
1.下载配置maven
a.配置JAVA_HOME
b.配置MAVEN_HOME
c.配置path
d.验证
mvn -v
e.配置本地仓库 maven目录/conf/setting.xml
默认本地仓库:xx/repository
修改本地仓库:<localRepository>新的地址</localRepository>
2.使用maven
约定 优于 配置
硬编码方式:job.setPath("d:\\abc")
配置方式:
job
conf.xml <path>d:\\abc</path>
约定:使用默认值
maven约定的目录结构:
项目
-src
-main :程序代码
-java java代码
-resources 资源代码、配置代码
-test :测试代码
-java
-resources
pom.xml : 项目对象模型
<parent>
<groupId>域名翻转,大项目名</groupId>
<groupId>com.zjyh</groupId>
<artifactId>子模块名</artifactId>
<artifactId>seedPlatform</artifactId>
<version>版本号</version>
<version>0.0.1-SNAPSHOT</version>
</parent>
依赖:
spring-context.jar --> spring-aop.jar
A中的某些类需要使用B中的某些类,则称为A依赖于B
在maven项目中,如果要使用一个当时存在的jar或者模块,则可以通过依赖实现(去本地仓库、远程仓库去寻找)
执行mvn:必须在pom.xml所在目录中执行
maven常见命名:(第一次执行命令时,需要下载执行该命令的基础环境,所以会从远程仓库中下载该环境到本地仓库)
编译:(Maven基础组件,基础jar)
mvn compile --只编译main目录中的java文件
mvn test 测试
mvn package 打成jar/war
mvn install 将开发的模块放入本地仓库,供其他模块使用(放入的位置是通过gav决定)
mvn clean 删除target目录(删除编译文件的目录)
运行mvn命令,必须在pom.xml文件所在目录
通常下载一个jar,先在本地仓库中下载 ,如果本地仓库中不存在,则再联网到中央仓库(镜像)去下载
依赖:
A jar -> B jar
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
1.依赖的范围、依赖的有效性
compile(默认) test provided
主程序[main] √ × √
测试程序[test] √ √ √
部署[运行] √ × ×
Maven在编译、测试、运行项目时,各自使用一套classpath
依赖:
a.commons-fileupload.jar --> commons-io.jar:虽然我们实际开发时,认为二者jar必须关联,但是maven可能不这么认为
b.如果X.jar依赖于Y.jar,但是在引入X.jar之前已经存在了Y.jar,则maven不会再在引入X.jar时引入Y.jar
2.依赖排除
A jar -> B jar
当我们通过maven引入A.jar时,会自动引入B.jar
A.jar(x.java,y.java,z.java) B.jar(p.java,c.java,i.java)
A.jar和B.jar之间的依赖本质:z.java -> c.java
<!-- 排除依赖pom.xml中配置,例如:依赖排除bean-->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
</exclusions>
3.依赖的传递性
A.jar -> B.jar -> C.jar
要使A.jar -> C.jar:而且仅当B.jar 依赖于C.jar的范围是compile
4.依赖原则:为了防止冲突
a.路径最短优先原则
b. 路径长度相同:
I.在同一个pom.xml文件中有2个相同的依赖(覆盖):后面声明的依赖会覆盖前面声明的依赖(严禁使用本情况,严禁在同一个pom中声明2个版本不同的依赖)
II.如果是不同的pom.xml中有两个相同的依赖(优先),则先声明的依赖,会覆盖后声明的依赖
(JDK只能识别source folder中的源码)
在Eclipse中创建maven工程
1.配置maven:
配置maven版本
配置本地仓库:设置settings.xml
在eclipse中编写玩pom.xml依赖后,maven-update project
package:命令执行顺序
resources
compile
test
package
maven生命周期:
生命周期和构建的关系:
生命周期中的顺序:a b c d e
当我们执行c命令,则实际执行的是a b c
生命周期包含的阶段,3个阶段:
clean lifecysle : 清理
pre-clean clean post-clean
default lifecysle : 默认(常用)
site lifecysle : 站点
pre-site site post-site site-deploy
再次强调:在pom.xml中添加完依赖后,需要maven -> update project
统一项目的jdk:
方法一:build path:删除旧版本,增加新版本
方法二:右键项目-属性-project Factors - java version 改版本(之前存在要改的版本)
方法三:通过maven统一版本
<profiles>
<profile>
<id>jdk17</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7<maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
打包方式:
java工程---jar
web工程--war
父工程--pom
继承实现步骤:
1.建立父工程:父工程的打包方式是pom
2.在父工程的pom.xml中编写依赖
<dependencyManagement>
<dependencies>
<dependency>
3.子类:
<!--当前工程继承一个父工程:1加入父工程坐标gav 2当前工程的pom.xml到父工程的pom.xml的相对路径-->
<parent>
<!--1加入父工程坐标gav-->
<proupId>org.lanqiao.maven</proupId>
<artifactId>B</artifactId>
<version>0.0.1-SNAPSHOT<version>
<!--2当前工程的pom.xml到父工程的pom.xml之间的相对路径-->
<relativePath>../B/pom.xml<relativePath>
</parent>
4.在子类中需要声明:使用那些父类的依赖
<dependency>
<!--声明:需要使用到父类的junit(只需要g,a)-->
<proupId>junit</proupId>
<artifactId>junit</artifactId>
</dependency>
聚合:
Maven项目能够识别:自身包含、本地仓库中的
Maven2工程依赖Maven1工程,则在执行时,必须先将Maven1工程加入到本地仓库(install),之后才能执行Maven2工程
以上前置工程的install操作,可以交给“聚合”,一次性搞定。。。
聚合的使用
在一个总工程中配置聚合:(聚合的配置只能配置在"打包方式为pom"的Maven工程中)
<!--配置聚合,避免前置工程的install操作-->
<modules>
<!--项目的根路径,可以不用设置顺序,顺序没有影响-->
<module>../Maven1</module>
<module>../Maven2</module>
</modules>
配置完聚合之后,以后只要操作总工程,则会自动操作该聚合中配置过的工程
注意:clean命令删除target目录,并不是清理install存放入的本地仓库
聚合:
Maven将一个大工程拆分成若干个子工程(子模块)
聚合可以将拆分的多个子工程合起来
继承:
父->子工程,可以通过父工程统一管理依赖的版本
部署web工程:war
通过maven直接部署运行web项目:
a.配置cargo
b.maven命令:deploy
实际开发中,开发人员将自己的项目开发完毕后达成war包交给实施人员去部署:
视频学习地址:https://ke.qq.com/course/list/DT