maven的作用
1.管理jar
增加第三方jar包
管理jar包之间的依赖关系 自动关联下载所有依赖的jar,并且不会冲突
2.将项目拆分成若干个模块
maven的概念:
是一个基于Java平台的 自动化 构建工具 时间顺序 make-->ant-->maven-->gradle
自动化构建工具 : 将原材料(java,js,css,html,图片) 整合成产品
maven能实现的功能:
清理 删除编译的结果,为重新编译做准备
编译 java-->class
测试 单元测试 针对于项目中的关键点进行测试,亦可用项目中的测试代码,去测试开发代码
报告 将测试的结果进行显示
打包 将项目中包含的多个文件,压缩成一个文件,,用于安装和部署(java项目-->jar web项目-->war)
安装 将打成的包,放到 本地仓库 供其他项目使用
部署 将打成的包,放到 服务器 准备运行
部署就是,将java,js,jsp等各个文件 进行筛选,组装, 变成一个可以直接运行的项目
部署:
Eclipse中部署的web项目可以运行
将Ecilipse中的项目复制到 tomcat/webapps中 不能运行
web项目可以在webapps中直接运行
Eclipse中的项目,在部署时,会是生成一个部署项目,区别在于:
部署的项目,没有源码文件,只有编译后的class文件和jsp文件
因为二者目录结构不一样,tomcat无法运行Eclipse复制的项目
Eclipse中的项目要在tomcat中运行,就需要部署
1.通过eclipse中的add and remove 按钮,进行部署
2.将web项目打成一个war包,将该war包复制到tomcat里面的webapps中,即可直接运行
下载配置maven
下载好解压
环境变量:
检查配置JAVA_HOME
配置MAVEN_HOME : D:\study\apache-maven-3.6.3
配置path : %MAVEN_HOME%\bin
验证:cmd mvn -v
配置本地仓库:
默认本地仓库 Default: ${user.home}/.m2/repository
修改成本地目录 <localRepository>D:/maven</localRepository>
使用maven
软件开发原则: 约定 优于 配置
maven约定的目录结构:
项目
-src
-main 序功能代码
-java java代码
-resources 资源代码,配置代码
-test 测试代码
-java
-resources
-pom.xml 项目对象模型 将一个项目看成一个对象
pom.xml: --------------其中的jav 起到定位作用
<groupId>域名反转.项目名</groupId>
<groupId>org.fzz.maven</groupId>
<artifactId>子模块名</artifactId>
<artifactId>HelloWorld</artifactId>
<version>版本号</version>
<version>0.0.1-SNAPSHOT</version>
执行mvn: 必须在pom所在的目录中执行
mvn常见命令:
编译:mvn compile 只编译main目录中的代码
测试:mvn test 只进行测试
打包:mvn package 打包
mvn install 放入本地仓库,供其他模块使用 (放入的位置,通过jav决定)
清理:mvn clean 删除target目录(删除编译文件的目录)
(第一次执行时,会下载一些基础组件,以后执行就不需要了)
关于私服: 通过nexus搭建环境
依赖:
项目中实现:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
依赖的范围以及有效性:
compile(默认) 编译时、测试时、运行时 都能拿到
test 只有测试时 能拿到
provided 编译时、测试时 能拿到
依赖排除:
当我们通过maven引入a.jar时,会自动引入b.jar
a.jar(x.java,y.java,z.java) b.jar(q.java,w.java,e.java)
a.jar和b.jar的依赖关系 z.java--->e.java
但是我不需要用到a.jar中的z.java, 所以没有必要再引入b.jar
排除:
<exclusions>
<exclusion>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</exclusion>
</exclusions>
依赖的传递性:
a.jar 依赖 b.jar b.jar依赖 c.jar
要使a.jar--->c.jar 要求b.jar 和 c.jar 的依赖关系必须是compile
多个maven项目之间如何依赖:
a项目 依赖于 b项目
1.b项目 install到本地仓库
2.a项目依赖
<dependency>
<groupId>org.fzz.maven</groupId>
<artifactId>HelloWorld</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
依赖原则: 为了防止冲突
路径最短优先原则
如果路径长度相同:
(严禁在同一个pom中声明两个相同依赖)
如果在同一个pom.xml文件中有两个相同的依赖:(覆盖) 后面声明的依赖,会覆盖前面的依赖
如果是不同的pom.xml中,有两个相同的依赖:(优先) 则先声明的依赖,会覆盖后声明的依赖
在Eclipse中创建maven工程:
1.在Eclipse中配置maven: (只要一次配置一次)
配置maven版本
配置本地仓库 设置settings.xml
2.在Eclipse中,编写完pom.xml依赖以后,需要maven-update project
3.执行package指令
会依次执行
resoures
compile
test
package
maven生命周期:
生命周期与构建的关系:当我们执行package命令,
实际执行的是resoures compile test package
生命周期包含三个阶段:
clean lifecycle: 清理 包含(pre-clean--> clean--> post-clean)
default lifecycle: 默认(常用)
site lifecycle: 站点 包含(pre-site--> site--> post-site--> site-deploy)
统一项目的jdk:
build path: 删除旧版本,增加新版本
右键 项目属性 project Factors - java version 改成新版本
也可以通过maven统一jdk版本:
在pom.xml中添加以下内容
<profiles>
<profile>
<id>jdk-1.x</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.x</jdk>
</activation>
<properties>
<maven.compiler.source>1.x</maven.compiler.source>
<maven.compiler.target>1.x</maven.compiler.target>
<maven.compiler.compilerVersion>1.x</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
maven继承:
打包方式:
java工程 jar
web项目 war
父工程 pom
继承实现
1.建立父工程: 父工程的打包方式是pom
2.在父工程的pom.xml中编写依赖:
<dependencyManagemane>
<dependencise>
<dependency>
<groupId>xxx</groupId>
<artifactId>xxx</artifactId>
<version>xxx</version
</dependency>
</dependencies>
</dependencyManagemane>
3.子工程:给当前工程继承一个父工程 1.加入父工程的gav,2当前工程到父工程的pom.xml之间的相对路径
<parent>
<groupId>org.fzz.maven</groupId>
<artifactId>B</artifactId>
<version>0.0.1-SNAPSHOT</version
<relativePath>../B/pom.xml</relativePath>
</parent>
4.在子工程中需要声明: 使用哪些父工程中的依赖
<dependency>
<groupId>xxx</groupId>
<artifactId>xxx</artifactId>
</dependency>
maven聚合:
不使用聚合时:
maven项目能够识别的: 自身的,本地仓库的
Maven1依赖于Maven2,在执行Maven2时,必须先将Maven1加入到本地仓库 执行install
如果需要依赖的项目特别多时,可以用聚合可以一次搞定,
使用聚合:
在一个总工程中配置聚合: (只能配置在打包方式为pom的Maven工程中)
<modules>
<!-- 项目的根路径 -->
<module>../Maven1</module>
<module>../Maven2</module>
</modules>
配置完聚合之后,只要操作总工程,则会自动操作该聚合中配置过的工程
Maven部署Web项目: 方式要选择war包
将Web项目做完以后,打成war包,放进tomcat的webapps文件夹中,启动tomcat就行了