参考自黑马程序员在b站发布的视频教程
https://maven.apache.org/download.cgi
Maven目录结构:
- \bin:
- 该目录包含了 mvn 运行的脚本,这些脚本用来配置Java命令,准备好 classpath 和相关的Java系统属性,然后执行Java命令。
- 其中 mvn 是基于 UNIX 平台的 shell 脚本,mvn.bat 是基于 Windows 平台的 bat 脚本。在命令行输入任何一条 mvn 命令时,实际上就是在调用这些脚本。
- 该目录还包含了 mvnDebug 和 mvnDebug.bat 两个文件,同样,前者是 UNIX 平台的 shell 脚本,后者是 Windows 平台的 bat 脚本。打开文件可以看到,两者基本是一样的,只是 mvnDebug 多了一条 MAVEN_DEBUG_OPTS 配置,其作用就是在运行 Maven 时开启debug,以便调试 Maven 本身。
- 该目录还包含 m2.conf 文件,这是 classworlds 的配置文件。
- \boot:
- 该目录存放着Maven的类加载器 plexus-classworlds框架,相对于默认的 java 类加载器,它提供了更丰富的语法以方便配置,Maven 使用该框架加载自己的类库。
- \conf:
- 这个目录存放着Maven的配置文件 settings.xml。直接修改该文件,就能在机器上全局地定制 Maven 的行为。
- \lib:
- 该目录包含了所有 Maven 运行时需要的jar包,Maven 本身是分模块开发的,因此该目录下可以看到诸如 maven-core-3.0.jar、maven-model-3.0.jar 之类的文件。
- 此外,这里还包含一些 Maven 用到的第三方依赖,如 common-cli-1.2.jar、commons-lang-2.6.jar 等。
- LICENSE.txt
- 记录了 Maven 使用的软件许可证Apache License Version 2.0。
- NOTICE.txt
- 记录了 Maven 包含的第三方软件。
- README.txt
- 包含了 Maven 的简要介绍,包括安装需求及如何安装的简要指令等。
<localRepository>D:\Emvironment\apache-maven-3.8.5\maven-repolocalRepository>
– 在150行左右位置
<mirrors>
<mirror>
<id>nexus-aliyunid>
<mirrorOf>centralmirrorOf>
<name>Nexus aliyunname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
mirror>
mirrors>
Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)
用于存储资源,包含各种jar包
Maven中坐标用于描述仓库中资源的位置。
Central Repository: (maven.org)
groupld
:定义当前Maven项目隶属组织名称(通常是域名反写,例如: org.mybatis)artifactld
:定义当前Maven项目名称(通常 是模块名称,例如CRM、SMS)version
:定义当前项目版本号.packaging
:定义该项目的打包方式Maven项目目录结构
├─ project
│ └─ module
│ └─ src
│ ├─ pom.xml
│ │
│ ├─ main
│ │ ├─ java
│ │ │ └─ com
│ │ │ └─ sun
│ │ │ └─ Demo.java
│ │ │
│ │ └─ resources
│ └─ test
│ ├─ java
│ │ └─ com
│ │ └─ sun
│ │ └─ DemoTest.java
│ │
│ └─ resources
pom.xml文件
<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.0modelVersion>
<groupId>com.sungroupId>
<artifactId>project-javaartifactId>
<version>1.0version>
<packaging>jarpackaging>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>testscope>
dependency>
dependencies>
project>
配置文件详解请移步此处:http://t.csdn.cn/jB5Pz
感谢原文作者
Maven项目构建命令:
目录创建好后,接下来开始构建项目。
Maven构建命令使用
mvn
开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔。
命令 | 作用 |
---|---|
mvn compile | #编译,生成target文件 |
mvn clean | #清理,删除target文件 |
mvn test | #测试,执行单元测试,其中包含了compile命令 |
mvn package | #打包,打包,其中包含了test命令 |
mvn install | #安装到本地仓库,只能是jar包,其中包含了package命令 |
创建工程
mvn archetype:generate
-DgroupId={project-packaging}
-DartifactId={project-name}
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false
创建java工程
mvn archetype:generate -DgroupId=com.sun -DartifactId=java-project -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot -DinteractiveMode=false
创建web工程
mvn archetype:generate -DgroupId=com.sun -DartifactId=web-project -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot -DinteractiveMode=false
步骤:
使用Maven导包(以junit为例)
尝试使用Maven项目构建命令:
若需要打断点调试?
步骤:
org.apache.maven.archetypes:maven-archetype-quickstart
==> Next新建空工程(maven-project),设置SDK
settings搜索Maven,设置Maven home directory、settings.xml、maven-repo
ProjetStructure ==> 新建Moudles
在pom.xml中添加:
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.2version>
<configuration>
<port>80port>
<path>/path>
configuration>
plugin>
plugins>
build>
刷新,点击右侧maven项目管理目录,可以看到web项目的Plugins目录下出现了tomcat插件,双击tomcat7:tun
即可运行项目,进入浏览器访问控制台给出的路径即可访问到webapp目录下的文件。
<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.0modelVersion>
<groupId>com.sungroupId>
<artifactId>web01artifactId>
<version>1.0-SNAPSHOTversion>
<packaging>warpackaging>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.2version>
<configuration>
<port>80port>
<path>/path>
configuration>
plugin>
plugins>
build>
project>
在
标签中配置
,
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.14version>
dependency>
dependencies>
比如:在java01的配置文件中导入以下命令:
<dependencies
>
<groupId>com.sungroupId>
<artifactId>web01artifactId>
<version>1.0-SNAPSHOTversion>
dependency>
dependencies>
可以看到web01的pom文件里的依赖被导入进java01,而此时web01是察觉不到的。
当自己的某个依赖不想被下一级项目得到时,可以加入
标签。当后面有项目导入自己时,将不导入添加此标签的依赖。
可选依赖指:主动对外隐藏当前所依赖的资源–不透明
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.12version>
<optional>trueoptional>
dependency>
排除依赖指:主动断开依赖的资源,被排除的资源无需指定版本–不需要
<dependencies>
<dependency>
<groupId>com.sungroupId>
<artifactId>web01artifactId>
<version>1.0-SNAPSHOTversion>
<exclusions>
<exclusion>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
exclusion>
exclusions>
dependency>
依赖的jar可以通过
scope
标签设定其范围,默认情况可以在任何地方引用
作用范围:
scope | 主代码 | 测试代码 | 打包 | 范例 |
---|---|---|---|---|
compile (默认) | Y | Y | Y | log4j |
test | Y | junit | ||
provided | Y | Y | servlet-api | |
runtime | Y | jdbc |
依赖范围的传递性:
带有依赖范围的资源在进行传递时,作用范围将会受到影响。
Maven构建生命周期描述的是一次构建过程经历了多少个事件。
Maven对项目构建的生命周期划分为3套:
插件使用说明查看官网:https://maven.apache.org/plugins/index.html
示例: 使用source
插件
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-source-pluginartifactId>
<version>2.2.1version>
<executions>
<execution>
<goals>
<goal>jargoal>
<goal>test-jargoal>
goals>
<phase>generate-test-resourcesphase>
execution>
executions>
plugin>
plugins>
build>