Maven

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 概念模型图

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 方法吗?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342