Maven https://maven.apache.org/index.html
Gradle
项目管理工具:
一个项目对象模型POM
一组标准集合
一个项目生命周期(Project Lifecycle)
一个依赖管理系统(Dependency Management System)
用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑
能解决什么问题:
1jar 包冲突
2将.java文件编译成.class字节码文件
3单元测试
4打包
1依赖管理[代码可重用]
jar 包仓库
jar 包的坐标
2一键构建
仓库的种类以及彼此关系
1.本地仓库
.m2/repository[系统盘];
可以自己设置路径。
2中央仓库 https://mvnrepository.com/
放置了几乎所有开源的 jar包。
3远程仓库[私服] / b2b
Maven 标准目录结构
》一个项目中的代码分几部分:
1核心代码部分
2配置文件部分
3测试代码部分
4测试配置文件部分
》传统项目
项目名
src
...没有标准的命名规范
》Maven 项目
src/main/java 目录--核心代码部分
src/main/resources 目录--配置文件部分
src/test/java 目录--测试代码部分
src/test/resources 目录--测试配置文件部分
[src/main/webapp 目录--页面资源,js,css,图片等等]
Maven 常用命令
mvn clean -- 删除 target 目录
mvn compile -- 将 src/main/java 下的文件编译为 class 文件输出到 target 目录下
mvn test -- 将 src/test/java 和 src/main/java 下的文件编译为 class 文件输出到 target 目录下
mvn package -- 将 src/test/java 和 src/main/java 下的文件编译为 class 文件输出到 target 目录下;对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war 包输出到 target 目录下(pom.xml 中 <packaging>war</packaging>)
mvn install -- package + 打成 jar 包或 war 包后发布到本地仓库
Maven 生命周期
清理生命周期
默认生命周期
站点生命周期
Maven 概念模型图
IDEA
IDEA 集成Maven 插件
1使用骨架
2不使用骨架[推荐]
坑:
1、IDEA 2019.3.2 支持 maven 3.6.1及以下版本(最新版可能不能用)
2、右键无创建 servlet 文件选项
src/main/java 文件夹应该标记为 Sources Boot
https://www.cnblogs.com/gf-jie/p/11384839.html
3、添加依赖
4、运行
1)error running "tomcat:run":
应该是 mvn tomcat:run(前面有 mvn)
2)http://localhost:8080/maven_web/MyServlet
MyServlet 是 servlet-name
3)org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 1 in the generated java file
The type java.io.ObjectInputStream cannot be resolved.
It is indirectly referenced from required .class files
tomcat 和 jdk 版本
tomcat 6.0.29
tomcat7 7.0.47
4)jar 包冲突
scope 范围
<scope>compile</scope>[默认]
<scope>test</scope>
<scope>provided</scope>
<scope>runtime</scope>
<scope>system</scope>
作用:
1管理 jar 包
i.增加第三方 jar 包[maven来下载]
ii.jar 包之间的依赖[自动关联下载所有依赖的包,不会冲突]
2可以将一个项目拆分若干个模块
概念:
是一个基于 java 平台的自动化构建工具。
make-ant-maven-gradle
注:Eclipse也是构建工具,半自动化。java -》class
清理:删除编译的结果,为重新编译做准备。
编译:java -> class。
测试:单元测试。
报告:将测试的结果进行显示。
打包:将项目中包含的多个文件压缩成一个文件,用于安装或部署。
安装:将打成的包放到本地仓库,供其他项目使用。
部署:将打成的包放到服务器上准备运行。
自动化构建工具 Maven:将 原材料 -》产品(可发布的项目)
仓库:
本地仓库
中央仓库(中央仓库镜像)
私服Nexus
如果要在 tomcat 中运行一个项目,则该项目必须严格遵循 tomcat 的目录结构。
eclipse
解决:web 项目打成 war 包[java 项目 jar 包]。
下载配置 Maven
Eclipse
Eclipse配置Maven
[注意:perspective 一定要选Java EE]
使用 Maven
【约定 由于 配置】
,硬编码方式
,配置方式
,约定[使用默认值]
maven 约定的目录结构:
0src
1main
2java
2resources
1test
2java
2resources
0target
1classes
1test-classes
1.jar/.war
0pom.xml[将项目看成一个对象]
坐标:
<groupId>域名反转.大的项目名</groupId>
<artifactId>模块</artifactId>
<version>版本</version>
<name>
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<scope></scpope>
</dependency>
</dependencies>
[ERROR] 不再支持目标选项 5。请使用 7 或更高版本。
[jdk默认版本是1.5]
https://blog.csdn.net/weixin_44405634/article/details/100837978
Maven设置项目编码以及jdk版本
1build path
1右键 项目 属性
2Maven
<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.compile.compilerVersion>
</properties>
</profile>
<profiles>
统一版本
<!-- 统一版本 -->
<properties>
<lanqiao.World.junit.version>4.0</lanqiao.World.junit.version>
</properties>
</version>${lanqiao.World.junit.version}</version>
统一编码
依赖的范围(有效性)
compile 编译 测试 运行
test 测试
provided 编译 测试
Maven 在编译、测试、运行(部署)项目时,各自使用一套 classpath。
依赖排除
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<scope></scpope>
<excludions>
<excludion>
<groupId></groupId>
<artifactId></artifactId>
<excludion>
<excludions>
</dependency>
通过Maven 整合多个项目
依赖的传递性
A.jar->B.jar->C.jar
要使A.jar->C.jar, 当且仅当 B.jar 依赖于 C.jar 的范围是 compile。
依赖原则为了防止冲突
a.最短路径优先原则
路径长度相同:
同一个pom.xml中存在多个不同版本,后面声明的依赖覆盖前面的依赖[严禁使用本情况](覆盖);
不同pom.xml中存在且都是 compile 范围,先声明的覆盖后写的(优先)。
Maven 继承的实现
疑问:::
Maven 中不用写 main 方法吗?