MAVEN

MAVEN的安装目录

bin:存放了 maven 的命令,比如我们前面用到的 mvn tomcat:run
boot:存放了一些 maven 本身的引导程序,如类加载器等
conf:存放了 maven 的一些配置文件,如 setting.xml 文件
lib:存放了 maven 本身运行所需的一些 jar 包
至此我们的 maven 软件就可以使用了,前提是

MAVEN仓库

  • 本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包,
    优先从本地仓库查找
    默认本地仓库位置在 maven从本地找包的路径 maven打的包在哪_maven{user.dir}表示 windows 用户目录。
  • 远程仓库:如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载。
    远程仓库可以在互联网内也可以在局域网内。
  • 中央仓库 :在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中
    央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包
    含了世界上大部分流行的开源项目构件。

命令及生命周期

  1. 清理生命周期

mvn clean 删除target即编译好的信息,转移前必须清楚编译信息

  1. 默认生命周期

mvn compile 编译后放置在target中classes中
mvn test :编译测试下面的文件放置在target的test-classes中
mvn package:编译好target的clesses,test-classes打成war包
mvn install:全部编译打包,并且安装到本地仓库
mvn deploy :发布项目,执行前必须进行配置

  1. 站点生命周期

全局setting和个性setting(配置初类似*)

maven 仓库地址、私服等配置信息需要在 setting.xml 文件中配置,分为全局配置和用户配置。
在 maven 安装目录下的有 conf/setting.xml 文件,此 setting.xml 文件用于 maven 的所有 project
项目,它作为 maven 的全局配置。
如需要个性配置则需要在用户配置中设置,用户配置的 setting.xml 文件默认的位置在:maven从本地找包的路径 maven打的包在哪_maven从本地找包的路径_02{user.dir} 指 windows 中的用户目录。
maven 会先找用户配置,如果找到则以用户配置文件为准,否则使用全局配置文件。

MAVEN项目目录结构

src/main/java —— 存放项目的.java 文件
src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件
src/main/webapp —— 存放web资源文件,如js,css文件
src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类
src/test/resources —— 测试资源文件
target —— 项目输出位置,编译后的 class 文件会输出到此目录
pom.xml——maven 项目核心配置文件

pom 项目对象模型

自身信息
依赖的jar包
运行环境信息

pom 基本配置

pom.xml 是 Maven 项目的核心配置文件,位于每个工程的根目录,基本配置如下:
:文件的根节点 .
: pom.xml 使用的对象模型版本
:项目名称,一般写项目的域名
:模块名称,子项目名或模块名称
:产品的版本号 .
:打包类型,一般有 jar、war、pom 等
:项目的显示名,常用于 Maven 生成的文档。
:项目描述,常用于 Maven 生成的文档
:项目依赖构件配置,配置项目依赖构件的坐标
:项目构建配置,配置编译、运行插件等。

pom依赖坐标导入

<!--项目名称,定义为组织名+项目名,类似包名-->
<groupId>com.itheima</groupId>
<!-- 模块名称 -->
<artifactId>hello_maven</artifactId>
<!-- 当前项目版本号,snapshot 为快照版本即非正式版本,release 为正式发布版本 -->
<version>0.0.1-SNAPSHOT</version>
<packaging > :打包类型

jar:执行 package 会打成 jar 包
war:执行 package 会打成 war 包
pom :用于 maven 工程的继承,通常父工程设置为 pom

依赖范围

  • 范围使用包裹生效
  1. compile:编译范围,指 A 在编译时依赖 B,此范围为默认依赖范围。编译范围的依赖会用在
    编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。
  2. provided:provided 依赖只有在当 JDK 或者一个容器已提供该依赖之后才使用, provided 依
    赖在编译和测试时需要,在运行时不需要,比如:servlet api 被 tomcat 容器提供。
  3. runtime:runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc
    的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包。
  4. test:test 范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用,
    比如:junit。由于运行时不需要所以 test范围依赖不会被打包。
  5. system:system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中 JAR
    文件的路径,需要指定 systemPath 磁盘路径,system依赖不推荐使用。

 默认引入 的 jar 包 ------- compile 【默认范围 可以不写】(编译、测试、运行 都有效 )
 servlet-api 、jsp-api ------- provided (编译、测试 有效, 运行时无效 防止和 tomcat 下 jar 冲突)
 jdbc 驱动 jar 包 ---- runtime (测试、运行 有效 )
 junit ----- test (测试有效)

  • 配置命令
    -DarchetypeCatalog=internal