Apache Maven,是一个软件(特别是Java软件)项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。

Maven

存在意义

  1. 项目庞大,不适合使用package来划分模块,借助于Maven将一个项目拆分成多个工程。
  2. 原本jar需要复制到WEB-INF/lib工程臃肿,借助于Maven将jar包保存在”仓库”中,有需要”引用”文件接口。
  3. 一个jar包依赖的其他jar包需要手动加入项目,借助于Maven将被依赖的jar包导入进来。

运行时环境:其实是jar包的引用,并没有把jar包复制进工程。

四大特性

依赖管理系统

在Java中可以用groupIdartifactIdversion组成Coordination(坐标)唯一标识一个依赖。

1
2
3
4
5
6
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>

groupId:定义当前目录隶属的实际项目(jar包所在仓库路径)

artifactId:定义实际项目中的一个Maven模块-项目名,推荐实际项目名称作为artifactId前缀

version:Maven项目当前所处版本

多模块构建

一致的项目结构

解决不同idea不同的目录结构

一致的构建模型和插件机制

Maven安装与配置

下载地址

https://maven.apache.org/download.cgi#

配置环境变量

MAVEN_HOME D:\apache-maven-3.8.4\bin %MAVEN_HOME%

目录结构

目录 描述
${basedir} 存放pom.xml和所有子目录。
${basedir}/src/main/java java源代码
${basedir}/src/main/resources 项目的资源,如property文件
${basedir}/src/test/java 项目的测试类,如JUnit文件
${basedir}/src/test/resources 测试使用的资源

修改settings.xml

修改默认仓库位置

打开maven目录 –>conf/settings.xml

1
2
3
4
5
6
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->

位置改为自己本机指定目录,/不要写反。

1
<localRepository>D:/apache-maven-3.8.4/repo</localRepository>

修改仓库源

https://developer.aliyun.com/mvn/guide

1
2
3
4
5
6
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>

编译执行

进入项目的根目录

编译java文件 mvn xxx

执行main方法

1
mvn exec:java -Dexec.mainClass="com.xxx.xxx.TextDemo(类名)"

报错:

  1. 不是使用管理员权限
  2. JDK环境配置问题
  3. 包名类名路径错误

Maven命令

命令 描述
mvn -v, –version 显示版本信息
mvn clean 清除产生的项目
mvn package 打包
mvn test 运行测试
mvn compile 编译源代码
mvn install 在本地 Repository 中安装 jar
mvn deploy 将打包文件发布到远程参考
mvn site 生成项目相关信息的网站
mvn eclipse:eclipse 生成eclipse项目,idea同理
mvn dependency:tree 打印整个依赖树

IDEA编辑器集成Maven环境

image-20211227192352962

设置配置文件路径和本地仓库路径

image-20211227193905949

Maven创建项目

创建Java项目

image-20211227194320510

设置项目名称和路径

image-20211227194418411

image-20211227200053102

设置目录结构

image-20211227203035330

编译项目

image-20211227204151806

打包成jar包

image-20211227203914718

image-20211227203810302

创建web项目

创建项目

模板选择webapp

image-20211227204406928

修改jdk版本

1
2
3
4
5
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>

设置单元测试版本为4.12

1
2
3
4
5
6
7
8
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>

删除pluginManagement标签

<pluginManagement...>

设置web插件

jetty

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!--jetty-->
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.25</version>
<configuration>
<!--热部署,每10s扫描一次-->
<scanIntervalSeconds>10</scanIntervalSeconds>
<!--项目站点路径-->
<contextPath>/abc</contextPath>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>9090</port>
</connector>
</connectors>
</configuration>
</plugin>

tomcat7

1
2
3
4
5
6
7
8
9
10
11
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>8081</port>
<path>/test</path>
<uriEncoding>UTF-8</uriEncoding>
<server>tomcat7</server> <!--服务器名称-->
</configuration>
</plugin>

启动项目

image-20211227223615824

或者注释<connector>command line中填写jetty:run -Djetty.port=8899

mvnrepository

https://mvnrepository.com/

image-20211227231748408

image-20211227231733712

常用插件

扫描漏洞类插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<plugins>
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>6.5.1</version>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>

执行mvn verify,结果如下:

image-20220106164052970

安装第三方JAR

官网地址

1
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

<path-to-file>为你jar包所在的路径
<group-id>为grouId号,与<artifact-id>组成唯一识别你jar包的坐标,当不在公共资源jar包中,自己自定义的jar时,可以自定义groupId号
<artifact-id>为artifactId号,与<group-id>组成唯一识别你jar包的坐标,当不在公共资源jar包中,自己自定义的jar时,可以自定义artifactId号
<version>jar包版本号,也可以自定义
<packaging>包的后缀,一般都是jar

常见问题

maven缺失ojdbc6解决方案

cmd命令行输入以下命令

1
mvn install:install-file -Dfile=D:/MavenRepo/ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.4 -Dpackaging=jar -DgeneratePom=true

image-20220107154533805

IDEA中maven原型加载不出来

解决方法来自IDEA的不加载archetype list的问题和Maven 的41种骨架功能介绍

1
Setting---->Build Tools → Maven → Importing, set VM options for importer to -Xmx1024m (默认的是-Xmx512m )

image-20220119152827958

删除C:\Users\DropAnn\AppData\Local\JetBrains\IntelliJIdea2021.2\Maven\Indices下面的文件夹

然后重启IDEA。