Maven—基础

1.Maven概述
1.1项目开发中的问题
在这里插入图片描述1.2.Maven是什么?
在这里插入图片描述
历史上的项目构建工具:
make->Ant–>Maven–>Gradle
在这里插入图片描述在这里插入图片描述约定就是一系列固定好的规则,大家都按照该规则执行,程序就能正常运行。
在这里插入图片描述2.仓库(Repository)
2.1.仓库的概念
maven的仓库用来存放artifact(艺术品、构件,一般指像struts2等jar包或执行用的插件包)
2.2.仓库的分类
分为本地仓库和远程仓库两类:
本地仓库:自己电脑硬盘上的一个目录,里面存放的是构件我们本地maven项目,默认情况下依赖是本地仓库,如果本地仓库没有,自动通过网络从远程仓库获取。注意:项目优先找本地仓库中的,找不到,再去远程仓库找并下载下来,放到本地仓库。
远程仓库:中央仓库和私服
中央仓库:官服,也是maven默认的远程仓库。该仓库里面收集存放了世界上大部分开源的Java的类库。(如,Oracle的jar在中央仓库就没有!或者自己公司内部的项目也不会有。)
私服:相对于官服说的,也是一种远程仓库。作用:1)可以将中央仓库没有的构件放到私服中供下载2)提升构件的下载速度。

2.3.本地仓库的配置和建立
如果默认情况下,不进行配置,本地仓库是在一个默认的位置(不推荐)。
打开maven全局的核心配置文件:
在这里插入图片描述自定义本地仓库:
在这里插入图片描述3.命令行方式创建项目
3.1.命令行方式创建简单Java项目
新建一个目录,存放项目:
在这里插入图片描述
打开cmd窗口:
在这里插入图片描述
执行命令:

mvn archetype:generate -DgroupId=cn.itcast.maven.quickstart
-DartifactId=simple -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

mvn:maven的主命令
archetype:骨架类型,一套项目结构模版的类型名字,这里generate创建系列的模版。
groupId:组id,类似于java中的包名,用来存放构件的路径。
artifactId:构件id,类似于java中的类名,用来指定最终打包后的jar或war的名字。默认和项目名一样。
archetypeArtifactId:具体骨架的id,这里的骨架用的quickstart。(骨架会决定项目的结构),该骨架会自动带示例。
interactiveMode:交互模式是否关闭,false为关闭,就会将没有输入的东西使用默认值。
测试:
在这里插入图片描述在这里插入图片描述项目结构(标准):
pom.xml:会位于每一个maven项目的根目录。
src:存放源代码的
main/java:存放正式源代码。
test/java:存放测试源代码。

再次创建一个项目simple2:
结论:相同骨架生成的项目结构一模一样,都是固定标准的。

3.3.常用的几个插件命令
在这里插入图片描述插件命令的执行方式:
mvn 插件目标名字 可选参数
注意:所有的mvn命令,都针对pom.xml的!
编译compile:将java文件编译为class,存放到target/classes文件夹中。
在这里插入图片描述
如果要编译测试代码, test-compile:
在这里插入图片描述在这里插入图片描述在这里插入图片描述
清除clean:作用删除target目录。经常用来清理target,重新编译或打包等之前。
在这里插入图片描述
打包package:maven会自动识别项目类型,java项目-jar,web项目-war
在这里插入图片描述在这里插入图片描述
安装install:将构件(自己项目或第三方的jar)安装到本地仓库。
在这里插入图片描述位置规则:组id+构件id+版本号+构件本身

5.图形化方式创建项目

5.1.安装配置
配置外置maven的位置:
在这里插入图片描述全局的配置文件和本地仓库的配置:
在这里插入图片描述勾选下载源代码和文档:
在这里插入图片描述
5.2.创建简单Java项目
选择骨架(quickstart-简单项目标准骨架-多了示例):
在这里插入图片描述
在这里插入图片描述在这里插入图片描述如果使用同一个骨架,那么不管是命令行还是插件方式,项目结构都一样。
提示:插件会自动编译,生成target目录。
插件命令操作,比如打包:
在这里插入图片描述输入插件命令(注意:不要mvn命令了!)
在这里插入图片描述比如清理命令:
在这里插入图片描述5.3不选择骨架(用默认骨架,不会有示例)
在这里插入图片描述提示:打包方式决定项目的类型和打包的类型:
jar:简单java项目
war:web项目
pom:父项目,可以用来继承。
生成:
在这里插入图片描述main/java:正式源代码
main/resources:正式的配置文件
test/java:测试源代码
test/resources:测试的配置文件
5.4. 创建WEB项目
选择骨架
在这里插入图片描述
在这里插入图片描述在这里插入图片描述结构:
main/resources:存放正式配置文件
webapp:存放页面等
但缺少java代码编写的地方(缺憾)
项目运行(内置插件tomcat):
在这里插入图片描述不选择骨架(目录结构完整,但没有示例)

在这里插入图片描述在这里插入图片描述结构:
main/java:正式java代码编写
main/resources:正式的配置文件
test/java:测试的java代码
test/resources:测试配置文件。
webapp:存放页面等(问题:没有生成WEB-INF/web.xml,需要手动建立:可以将之前的拷贝过来,或者使用工具生成:
在这里插入图片描述在这里插入图片描述

小结:
实际开发的时候,一般不管创建java项目还是web项目,都跳过骨架选择,原因是结构比较完整,而且没有示例。

6.项目对象模型(POM)
6.1.pom是什么?答:maven项目的核心配置文件
在这里插入图片描述
maven全局配置文件和具体项目的配置文件是不一样的。
全局是settings.xml
在这里插入图片描述
具体项目的核心配置文件pom.xml,一定位于项目的根目录:
在这里插入图片描述
6.2.三个概念
最大pom:maven运行时候,pom的配置的默认值,maven内部jar中存放。

有效pom:具体项目运行时的真正配置。只是一个运行环境。无法直接修改,但可以通过自定义pom进行覆盖修改(覆盖默认值!)。

自定义pom:pom.xml中编写的内容,覆盖最大pom,生成有效pom。
在这里插入图片描述

6.3.POM基本配置

POM中会有大量配置:
在这里插入图片描述认识主要配置:
在这里插入图片描述
坐标:用来定位的。类似于地图的坐标概念。每一个maven项目都一定有坐标。
在这里插入图片描述如果要想在仓库中找到某个构件(jar),必须知道这三个东西。
原因是坐标决定了构件在仓库中的位置,比如:要寻找strus2 core的jar:

在这里插入图片描述
打包方式:决定maven如何看待一个项目的类型,以及决定打包后的文件的扩展名。
在这里插入图片描述
常见的类型:

  1. jar:简单java项目
  2. war:web项目
  3. pom:父项目

项目描述性文档(没啥用)
在这里插入图片描述

测试
一般情况下,artifactId、项目名、name的名字是一样的。但其实可以不一样,作用也不一样。
artifactId(不管打包还是运行,都以artifactid为主!)

在这里插入图片描述
1)项目打包:文件名
在这里插入图片描述2)tomcat运行:上下文的名字

7.依赖管理Dependency Management

7.1.依赖是什么?
maven中,项目所需要的其他的构件(jar),就称之为依赖。
比如ssh的一个项目中,需要依赖Spring的构件(依赖)。

7.2.构建依赖-通过坐标导入jar包
坐标可以决定一个构件在仓库中的唯一位置,因此只要知道了依赖的坐标,即可引入jar进来。
如何获取到坐标:两种方式:
法一:到中央仓库的索引网站查询

https://search.maven.org
https://repository.apache.org
https://mvnrepository.com

例:
现在引入spring的jar
1.在网站中搜索:spring context
2.找到需要的版本:
3.将依赖坐标配置复制到项目中:

<dependencies>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>4.2.9.RELEASE</version>
	</dependency>
</dependencies>

方法二:如果本地仓库曾经下载过构件,有构件的话,可以直接通过本仓库的索引查询,但前提是先对本地仓库建立索引.
操作方法如下:
1.打开视图:

在这里插入图片描述在这里插入图片描述在这里插入图片描述
好了之后,就可以本地搜索:
可以在项目上、pom.xml上、打开的pom的文档上,右键,maven-添加依赖:
目标:引入struts2的core:
在这里插入图片描述
插件会自动添加坐标到pom.xml中:
小结:
不管用哪一种方式,都是需要坐标,都会自动在项目中引入jar:
问题:怎么我只引入两个坐标,为什么会有这么多的jar。
原因:依赖的构件也会依赖于其他的构件导致的。
在这里插入图片描述
有个视图可以查看依赖树:
在这里插入图片描述
**问题:**如果版本引错了,需要重新引入吗?
不需要,手动该一下版本号即可。
如果该版本没有,则会自动从网上下载。(必须联网!)

猜你喜欢

转载自blog.csdn.net/tangiwang/article/details/83795553
今日推荐