一、环境配置

1.1 在什么地方配置

我的电脑 - 属性 - 系统设置 - 环境变量

1.1.1 系统变量

  1. M2_HOME:你的mavenbin文件夹的路径
  2. MAVEN_HOME:你的maven的文件路径

1.1.2 用户变量

  1. Path:新增一条
    1. 你的maven的bin文件夹的路径
      1. 可用:%系统变量名%方式,如:%MAVEN_HOME%\bin

二、setting文件配置

2.1 在什么地方配置

你的maven路径\conf\settings.xml

2.2 setting文件部分标签介绍

2.2.1 settings 标签

  1. **settings.xml 的头文件**
  2. 一般不做修改

2.2.2 localRepository 标签

  1. **本地仓库路径**
  1. 可在maven文件夹内新增文件夹“maven-repo”,作为本地仓库
    1. 如我的本地仓库为:xml <localRepository>F:\learn\JavaWeb\apache-maven-3.6.3\maven-repo</localRepository>

2.2.3 mirrors 标签

  1. **maven仓库镜像**
  1. 阿里云仓库镜像xml <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>

三、用IDEA创建一个maven项目

  1. 选择maven模板

maven模板.png

  1. 取名、定义包名

image-20200818224546217.png

  1. 修改maven目录
    1. 需勾上Override才能修改目录

image-20200818224546217.png

  1. 等待下载资源并导入资源

image-20200818224750595.png

四、IDEA中的maven部分设置介绍

4.1 修改默认maven路径

IDEA项目创建成功后,其maven的路径可能默认为IDEA自带的maven路径,需改为本地maven路径
image-20200818225439068.png

4.2 自动导入源码(可选)

注:

  1. 勾上会影响性能
  2. 该功能详细内容可查看:在Intellij IDEA 中自动加载Maven管理的依赖包的源码 —一唐 云栖社区

image-20200818230256682.png

4.3 maven的本地仓库

image-20200818230505491.png

4.4 其他设置选项

  1. lgnored Files:忽略指定maven模块
  2. Runner:maven运行环境配置

具体可查看 IntelliJ IDEA 的说明文档

五、pom文件

pom.xml 是 Maven 的核心配置文件

5.1 内容

  1. Lifecycle
    maven的命令行操作

    image-20200819001035706.png

  2. Plugins
    插件

    image-20200819001303532.png

  3. Dependencies
    项目依赖

    image-20200819001537233.png

5.2 代码内容介绍

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Maven版本和头文件 -->
  3. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.yafnds</groupId>
  7. <artifactId>JavaWeb-01-home-maven</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <!--
  10. packaging:项目的打包方式
  11. jar:java应用
  12. war:JavaWeb应用
  13. -->
  14. <packaging>war</packaging>
  15. <name>JavaWeb-01-home-maven Maven Webapp</name>
  16. <!-- FIXME change it to the project's website -->
  17. <url>http://www.example.com</url>
  18. <!-- 配置 -->
  19. <properties>
  20. <!-- 项目的默认构建编码 -->
  21. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  22. <!-- 编码版本 -->
  23. <maven.compiler.source>1.7</maven.compiler.source>
  24. <maven.compiler.target>1.7</maven.compiler.target>
  25. </properties>
  26. <!-- 项目依赖 -->
  27. <!-- 即右边栏的Dependencies -->
  28. <dependencies>
  29. <!-- 具体依赖的jar包文件 -->
  30. <dependency>
  31. <groupId>junit</groupId>
  32. <artifactId>junit</artifactId>
  33. <version>4.11</version>
  34. <scope>test</scope>
  35. </dependency>
  36. </dependencies>
  37. <!-- 项目构建用的东西 -->
  38. <!-- 即右边栏的Plugins -->
  39. <build>
  40. <finalName>JavaWeb-01-home-maven</finalName>
  41. <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
  42. <plugins>
  43. <plugin>
  44. <artifactId>maven-clean-plugin</artifactId>
  45. <version>3.1.0</version>
  46. </plugin>
  47. <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
  48. <plugin>
  49. <artifactId>maven-resources-plugin</artifactId>
  50. <version>3.0.2</version>
  51. </plugin>
  52. <plugin>
  53. <artifactId>maven-compiler-plugin</artifactId>
  54. <version>3.8.0</version>
  55. </plugin>
  56. <plugin>
  57. <artifactId>maven-surefire-plugin</artifactId>
  58. <version>2.22.1</version>
  59. </plugin>
  60. <plugin>
  61. <artifactId>maven-war-plugin</artifactId>
  62. <version>3.2.2</version>
  63. </plugin>
  64. <plugin>
  65. <artifactId>maven-install-plugin</artifactId>
  66. <version>2.5.2</version>
  67. </plugin>
  68. <plugin>
  69. <artifactId>maven-deploy-plugin</artifactId>
  70. <version>2.8.2</version>
  71. </plugin>
  72. </plugins>
  73. </pluginManagement>
  74. </build>
  75. </project>

六、注意点

6.1 BUG:Tomcat运行后class文件不编译

之前把idea的版本做了一次升级,结果发现自己项目启动Tomcat后报了一个错误,实例化Servlet类[com.yafnds.servlet.HelloServlet]异常,具体错误格式可以查看这个文章:
【Java】tomcat 500错误解决系列一:实例化Servlet错误
主要内容为:

HTTP状态 500 - 内部服务器错误
类型 异常报告

消息 实例化Servlet类[package.SessionDemo_01_getSession]异常

描述 服务器遇到一个意外的情况,阻止它完成请求。

该错误的主要原因是:Tomcat服务器在target文件夹下找不到需要的class文件


但是,我在试了网上的很多方法后发现,我这里找不到class文件的原因是Tomcat运行时根本没有编译class文件,如图:(编译后的target)
image.png

出错原因:父模块中出现了子模块的内容。

(出错时没有截图,后来试了好几次,发现没法复现bug,所以就没有截图了。如有需要,可以查看这篇文章(解决:多模块项目:复制已有模块进行结构修改时报错:Module “xxx” must not contain source root “...\xxx\src\main\java”. ),问题较为类似)

解决办法:打开该项目的 Project Structure 把父模块中不属于自己的特殊目录统统删掉,点右侧的X即可
**

6.2 BUG:防止资源导出失败

6.2.1 问题描述

有时候会出现在 src-main-java 或 resources 文件夹中的 properties 和 xml 文件无法在编译时导出的问题**

6.2.2 解决办法

在 pom 文件中的 标签里配置 resources

<build>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <includes>
        <include>**/*.properties</include>
        <include>**/*.xml</include>
      </includes>
      <filtering>false</filtering>
    </resource>
    <resource>
      <directory>src/main/java</directory>
      <includes>
        <include>**/*.properties</include>
        <include>**/*.xml</include>
      </includes>
      <filtering>false</filtering>
    </resource>
  </resources>
</build>