传统项目管理状态分析:
Maven
是 java 语言编写的一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)。POM
(Project Object Model):项目对象模型。Maven出现前,项目结构杂乱:
Maven出现后,创建了统一的项目结构:
下载页面可以看到目前最新的版本号,以及最后发布时间:
在下面可以看到 Linux、Windows 的安装包,以及相应的源码包:
解压压缩包后,目录内容如下:
我们用笔记本打开 bin 目录下的 mvn.cmd:
可以看到 Maven 是需要 JAVA_HOME 和 MAVEN_HOME 两个环境变量支持的:
我们需要提前创建好这两个环境变量,在我的电脑,点击属性 -> 高级系统设置 -> 环境变量 -> 新建,输入好我们的安装目录即可。
还需要将 maven 的执行命令放到 Path 里面,方便我们后期使用。
输入如下命令,测试环境变量配置结果:
mvn -v
正确配置后结果:
什么是坐标?
Maven 中的坐标用于描述仓库中资源的位置。
https://repo1.maven.org/maven2/
Maven 坐标主要组成:
Maven 仓库网站: https://mvnrepository.com/
Maven 坐标的作用
使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的标识与下载工作交由机器完成。
例如:我想找 junit 4.12 的包
我们一般找 Maven 的相关依赖,都是去 Maven 的仓库页面上找:https://mvnrepository.com/
Maven 启动后,会自动保存下载的资源到本地仓库。
默认位置
<localReporsitory>${user.home}/.m2/repositorylocalReporsitory>
默认仓库目录为登陆用户名所在目录下的 .m2
文件夹中。
自定义位置
<localRepository>D:\maven_repositorylocalRepository>
设置仓库目录为 D:\maven_repository 文件夹中。
我们先执行一下如下命令,Maven 会自动帮我们创建一个本地仓库:
mvn
创建的本地仓库地址默认是在:C:\Users\用户名\.m2\repository
但是如果我们使用默认地址,这个文件夹会越来越大,把 C 盘撑爆,所以我们需要自定义仓库路径。可以在 Maven 安装路径的 conf 文件夹下的 settings.xml 中进行配置:
远程仓库其实就是指定 Maven 的 jar 包是从哪来的,其实默认在 Maven 中已经做了设置了。
Maven 默认连接的仓库位置:
<repositories>
<repository>
<id>centralid>
<name>Central Repositoryname>
<url>http://repo.maven.apache.org/maven2url>
<layout>defaultlayout>
<snapshots>
<enabled>falseenabled>
snapshots>
repository>
repositories>
具体是在哪里进行了远程仓库的配置?
先说结论:默认远程仓库是在maven-model-builde-3.9.1.jar(不同版本可能会有区别)的org/apache/maven/model路径下的pom-4.0.0.xml中指定的。
下面说一下具体是怎么找到的:
首先,我们打开 Maven 安装目录下的 lib
文件夹,使用 WinRAR
打开任意一个 jar 包后,在 WinRAR 中返回到上一级 lib 目录下,点击搜索,输入 pom*.* 进行搜索:
WinRAR下载地址: https://www.win-rar.com/start.html?L=7
在搜索结果中,我们可以看到有一个 pom-4.0.0.xml 的文件:
点击定位,就可以定位到文件的具体位置了,我们关闭搜索框,然后将文件拖拽到刚才的 lib 目录下:
打开后,我们可以看到这里配置了远程仓库的地址:
我们可以看到 url 是 https://repo.maven.apache.org/maven2,这个是国外的服务器,我们都知道国外的服务器下载东西比较慢,所以我们就需要修改默认的配置,使用国内的服务器帮我们下载。
阿里就做好了这样的一个仓库,注意这里不是修改中央仓库的位置,而是当我们访问中央仓库的时候,不再访问国外的服务器,而是访问阿里的服务器,这样速度就比较快了,国外的中央仓库依然存在。那么我们管这样的仓库,叫做镜像仓库
。
在 settings.xml 文件中配置阿里云镜像仓库:
<mirrors>
<mirror>
<id>nexus-aliyunid>
<mirrorOf>centralmirrorOf>
<name>Nexus aliyunname>
<url>http://maven.aliyun.com/nexus/content/groups/publicurl>
mirror>
mirrors>
我们打开 settings.xml 文件,找到
标签,将上面的阿里云仓库配置粘贴到里面:
到这儿我们就完成了镜像仓库的配置。
补充:
阿里云maven
,也可以打开下方链接)这里仅作了解,我们可以在仓库中再配置一个 settings.xml 文件,注意这里的 settings.xml 文件最好与 conf 中的 settings.xml 文件保持一致,不然关于不一致的内容,仓库中的 settings.xml 内容会覆盖 conf 中的 settings.xml 内容。
先创建一个文件夹 java-project,再根据Maven项目结构依次创建相应层级的文件夹
在 java-project/src/main/java/com/demo 目录下,创建 Demo.java 文件,并写入如下内容:
package com.demo;
public class Demo {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
在 java-project/src/test/java/com/demo 目录下,创建 DemoTest.java 文件,并写入如下内容:
package com.demo;
import org.junit.Test;
import org.junit.Assert;
public class DemoTest {
@Test
public void testDemo() {
Assert.assertEquals("Hello World!", "Hello World!");
}
}
在 java-project 目录下,创建 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>
<packaging>jarpackaging>
<groupId>com.demogroupId>
<artifactId>java-projectartifactId>
<version>1.0-SNAPSHOTversion>
<properties>
<maven.compiler.source>8maven.compiler.source>
<maven.compiler.target>8maven.compiler.target>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
properties>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
dependency>
dependencies>
project>
创建完成后的Maven项目结构如下:
在 pom.xml 文件所在目录中,打开控制台窗口,执行如下命令进行编译:
mvn compile
执行结果如下,我们可以看到编译过程中是先去我们指定的阿里云仓库去下载依赖:
如果是之前已经下载过依赖,再执行就会是这样:
我们可以看到这里使用了两个插件:maven-resources-plugin
、maven-compiler-pugin
。
插件的存放位置可以去maven仓库中找到:
下载编译之后,我们可以在编译日志中看到编译了1个文件到 target\classes
目录中:
命令执行完之后,我们可以看到项目中多了 target 文件夹。
目前 target 文件夹中包含两个文件夹:
我们可以执行如下命令,来清理编译后的内容:
mvn clean
执行结果如下:
我们可以看到,这里也是使用了一个 Maven 插件:maven-clean-plugin
,然后执行的操作就是将 target 文件夹删除了。
我们可以执行如下命令,对项目进行测试:
mvn test
执行结果如下:
执行日志中,我们可以看到执行了 1 个测试,失败了 0 个。
执行之后,我们发现又创建了 target 文件夹,但是文件夹下的内容变成了 4 个:
其中 surefire-reports
里面包含了我们项目的测试报告:
其中,txt 文件记录了我们的测试日志信息:
xml 文件记录了我们测试的详细信息,包括测试的环境信息(如JDK版本、系统名称、时区、编码)等:
最后面展示了执行的测试类和测试的执行时间:
执行如下命令,可以对项目进行打包:
mvn package
执行结果如下:
我们可以看到,package 命令是先执行了 compile、test 之后才进行 package 打包。
target 目录中出现了我们打好的 jar 包:
执行如下命令,可以对项目进行安装:
mvn install
这个安装命令主要用于将我们的项目打包之后放到我们的本地仓库中,安装之后,我们可以在仓库中看到我们自己的包:
创建工程:
mvn archetype:generate \
-DgroupId={project-packaging} \
-DartifactId={project-name} \
-Dversion={project-version} \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false
创建java工程
mvn archetype:generate -DgroupId=com.demo -DartifactId=java-project -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot -DinteractiveMode=false
创建web工程
mvn archetype:generate -DgroupId=com.demo -DartifactId=web-project -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot -DinteractiveMode=false
其实对比之下,maven创建web项目的时候,只是多了一个web目录。
打开 IDEA,依次点击 File
-> New
-> Project...
选择 New Project
,填写好项目名称,选择 Maven工程,填写好所属组织名和项目ID,点击Create
。
这样 IDEA 就会自动帮我们创建好一个 Maven 项目了。
同样的我们可以选择Maven Archetype,从模板中选择web模板进行创建。
创建后项目如下:
我们可以点击右上角运行的下拉框,选择Edit Configurations...
进行配置。
点击+
,选择 Maven
输入我们想要定制的构建过程,点击 OK。
我们就可以在右上角看到我们自己定制的 Maven 命令了,直接运行就相当于执行了相应的maven命令。
Tomcat 7 运行插件
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.1version>
<configuration>
<port>80port>
<path>/path>
configuration>
plugin>
plugins>
build>
我们可以去 Maven Repository 搜一下 tomcat maven
,在里面找一个 org.apache.tomcat.maven
的包:
Maven Repository地址:https://mvnrepository.com/
点进去之后的第一个包就是我们需要的 tomcat 插件:
我们选择2.1的版本,复制相应的坐标:
注意,这里需要使用war包才能启动tomcat7,我们可以使用刚才创建好的web-project项目,复制后,如下所示:
IDEA右边的Maven窗口我们也可以看到新增了 tomcat7 的插件:
我们打开 tomcat7 插件,双击 tomcat7:run
,就可以运行 tomcat了。
我们可以看到tomcat7插件已经启动成功了,8080端口:
访问地址:http://localhost:8080/web-project
如果我们想定制端口和访问路径,可以进行如下配置:
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.1version>
<configuration>
<port>80port>
<path>/path>
configuration>
plugin>
依赖: 指当前项目运行所需的 jar,一个项目可以设置多个依赖。
格式:
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
dependency>
dependencies>
可选依赖指对外隐藏当前所依赖的资源——不透明。
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<optional>trueoptional>
dependency>
排除依赖指主动断开依赖的资源,被排除的资源无序指定版本——不需要。
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<exclusions>
<exclusion>
<groupId>org.hamcrestgroupId>
<artifactId>hamcrest-coreartifactId>
exclusion>
exclusions>
dependency>
(表中为空的部分表示依赖会消失掉。)
clean 生命周期
default 生命周期
执行生命周期中的任何一步(例如:compile),这一步之前的所有操作都需要进行一遍。
site 生命周期
插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能。
默认maven在各个生命周期上绑定有预设的功能。
通过插件可以自定义其他功能。
Maven 官网插件地址: https://maven.apache.org/plugins/index.html
打开 Maven 官网插件页面:
我们可以看到,官网根据插件的类型进行了不同的分类:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-source-pluginartifactId>
<version>2.2.1version>
<executions>
<execution>
<goals>
<goal>jargoal>
goals>
<phase>generate-test-resourcesphase>
execution>
executions>
plugin>
plugins>
build>
我们在插件页面选择 Packaging types/tools 类型中的 source
,点击进入。
我们可以看到,这里介绍了 source
插件的详细内容,其中包含了 5 种 Goals,这里我们主要说其中两种:
jar
:对主程序的源码打包;test-jar
:对测试程序的源码打包。我们之前讲过构建生命周期/阶段(Build lifecycle & phases),和我们插件中用到的
这里 generate-test-resources
指的就是我们之前提到的 default 构建生命周期中的一个阶段。
在项目中增加完 source 的插件配置后,我们可以在IDEA右侧看到相应的插件已经加载好了:
由于目前clean test
。
执行结束后,我们可以看到 target 文件夹下多了一个 source 源码包:
参考地址:
1.Maven技术快速入门,https://blog.csdn.net/Augenstern_QXL/article/details/118443858