仓库是存储各种依赖的地方,包含了各种jar包
maven无需安装,直接解压即可
出现以下信息说明成功
本地仓库默认在C盘,可以改到其他盘,在maven安装目录下的conf/settings文件进行修改
在这行配置下面加上这个标签,改变本地仓位置
maven远程仓库下载慢,可以改为国内镜像源,这里改为阿里镜像
这是整体目录结构 这是项目的根目录,pom是这个项目的结构
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<!--表示当前maven对象模型的版本,并不是maven的版本-->
<modelVersion>4.0.0</modelVersion>
<!--表示当前项目的坐标-->
<groupId>com.itheima</groupId>
<artifactId>project-java</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<!--当前项目所依赖的资源-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>
这是src目录下的两个文件,main是编写代码的,Test是用来测试代码的
这些命令 compile->test->package->install是一个递进关系,指向后面命令的时候,前面的就被执行了 使用这些命令的时候会用到maven插件,如果是第一次执行会去下载插件,后面执行就不需要下载
mvn complie //编译项目
mvn clean //清理,将编译好的文件、打好的包清理
mvn test //测试
mvn package //打包,此时就可以部署了
mvn install //将当前项目打包安装到本地仓库
编译好后会在根目录下生成一个target文件夹
在测试前我们先删除刚刚编译生成的文件夹
直接使用mvn test
命令,这包括编译部分
测试后会生成测试报告,在target/surefire-reports目录下
上面的是测试结果
下面的是详细报告,主要包括了两部分内容:
打包包括了前面两个命令的执行,在前面target的下面生成了本项目的jar
包
安装结束后本地仓库有了我这个项目
mvn archetype:generate
-DgroupId={project-packaging}
-DartifactId={project-name}
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false
mvn archetype:generate -DgroupId=com.yyn -DartifactId=project-name -
DarchetypeArtifactId=maven-archetype-quickstart -Dversion=1.0.0 -
DinteractiveMode=false
mvn archetype:generate -DgroupId=com.yyn -DartifactId=webproject-name -
DarchetypeArtifactId=maven-archetype-webapp -Dversion=1.0.0 -
DinteractiveMode=false
idea一般不支持新版本的maven,所以应当下载idea支持的maven版本 对这两项进行修改,改为本地安装的版本
选择项目骨架 输入项目信息 进去后修改一下目录结构,高亮处是我们自己新建的
在这里点击加号创建新的Module 可以在标红线的地方进行项目目录结构的修改
点击这里添加运行环境 点击加号创建maven运行环境,Name随便起,Run下面的是要运行的maven指令,working directory是这个指令作用的项目 创建好之后如下图所示,可以运行这个命令
依然还是在右上角配置,在这里选择本地的tomcat目录,配置启动tomcat打开的页面、jre、端口号 部署本项目到tomcat中 点击启动即可访问
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<scope>
标签表示这个依赖的使用范围,这里表示只在测试阶段用该依赖
依赖标签的可选值如下:
compile/test/provided/system/runtime/import
这里主要介绍compile/test/provided这三个
一般我们去maven仓库找的坐标中都会指出该依赖的使用范围
A 依赖 B,B 依赖 C,那么在 A 没有配置对 C 的依赖的情况下,A 里面能不能直接使用 C?
在 A 依赖 B,B 依赖 C 的前提下,C 是否能够传递到 A,取决于 B 依赖 C 时使用的依赖范围。
当 A 依赖 B,B 依赖 C 而且 C 可以传递到 A 的时候,A 不想要 C,需要在 A 里面把 C 排除掉。而往往这种情况都是为了避免 jar 包之间的冲突。
<dependency>
<groupId>com.yyn</groupId>
<artifactId>demo</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
<!-- 使用excludes标签配置依赖的排除 -->
<exclusions>
<!-- 在exclude标签中配置一个具体的排除 -->
<exclusion>
<!-- 指定要排除的依赖的坐标(不需要写version) -->
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
如果不想让依赖B所使用的C依赖被A知道,可以在B项目中的C依赖中使用标签,将其值改为true,这样A就不知道B使用了C这个依赖
<dependency>
<groupId>com.yyn</groupId>
<artifactId>demo</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
当一个项目分为多个模块时,为了方便模块依赖版本的管理以及更好地构建项目,可以使用聚合与继承,二者是相互的
需要新建一个空工程,该工程中只要pom文件,pom文件内容如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yyn</groupId>
<artifactId>parent-project</artifactId>
<version>1.0-SNAPSHOT</version>
<!--打包方式为pom,说明该项目为父工程-->
<packaging>pom</packaging>
<name>parent-project</name>
<!--用来聚合子模块-->
<modules>
<module>sub1</module>
<module>sub2</module>
</modules>
</project>
与一般pom文件的区别主要在于<packaging>pom</packaging>
和多了一个<modules>
属性,该属性就是用来聚合子模块的。module为子模块的<artifactId>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--父工程坐标-->
<parent>
<artifactId>parent-project</artifactId>
<groupId>com.yyn</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<!--如果子模块的gropId和版本号与父工程一直,则可以省略这两个标签-->
<!--<groupId>com.yyn</groupId>-->
<!--<version>1.0-SNAPSHOT</version>-->
<artifactId>sub2</artifactId>
</project>
多了<parent>
标签,表示该模块的父模块
在父工程中用<dependencyManagement>
标签进行整个项目的依赖管理,但此时子模块不具有这些依赖,如果子模块想使用这些依赖,还应当在子模块中进行配置
<!-- 使用dependencyManagement标签配置对依赖的管理 -->
<!-- 被管理的依赖并没有真正被引入到工程 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
子模块使用父模块的依赖时可以省略版本号,如果子模块加上版本号,则以子模块版本号为准
<!-- 子工程引用父工程中的依赖信息时,可以把版本号去掉。 -->
<!-- 把版本号去掉就表示子工程中这个依赖的版本由父工程决定。 -->
<!-- 具体来说是由父工程的dependencyManagement来决定。 -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</dependency>
</dependencies>
使用上面的方式管理版本时,如果多个依赖有着相同的版本,还需要进行多出修改,难以做到一次修改多处使用,这个可以通过下面的方法来解决
<!-- 通过自定义属性,统一指定Spring的版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 自定义标签,维护Spring版本数据 -->
<spring.version>4.3.6.RELEASE</spring.version>
</properties>
使用${属性名}来管理版本
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yyn</groupId>
<artifactId>parent-project</artifactId>
<version>1.0-SNAPSHOT</version>
<!--打包方式为pom,说明该项目为父工程-->
<packaging>pom</packaging>
<name>parent-project</name>
<!--自定义属性-->
<properties>
<spring.version>4.1.0</spring.version>
</properties>
<!--用来聚合子模块-->
<modules>
<module>sub1</module>
<module>sub2</module>
</modules>
<!-- 使用dependencyManagement标签配置对依赖的管理 -->
<!-- 被管理的依赖并没有真正被引入到工程 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
maven的生命周期描述的是一个项目构建过程中发生的事件 生命周期是一个抽象的概念,而插件则是具体完成操作的东西,每个阶段需要对应的插件来完成该阶段的任务
为了让构建过程自动化完成,Maven 设定了三个生命周期,生命周期中的每一个环节对应构建过程中的 一个操作。
在同一个周期内,插件在执行后面的操作时会把前面的操作都执行一遍
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。