文章目录

  • 两种目录
  • Maven 本地仓库
  • Maven 项目目录结构(约定)
  • 手动创建 Maven 项目的目录结构
  • 编写主函数



两种目录

  1. Maven 本身的目录(Maven命令所在的安装目录 + Maven本地仓库)
  2. Maven 项目的目录(项目的目录)

Maven 安装后,本身会有两个目录:

  1. Maven 的命令所在目录,如:D:\Program Files\apache-maven-3.8.3
  2. Maven 本地仓库所在目录,如:C:\Users\thinkpad01\.m2\repository(可在 maven 命令的所在目录下的 conf/settings.xml 中修改)

Maven 本地仓库

Maven 仓库分为 远程仓库本地仓库。当你在 pom.xml 里配置项目依赖后,Maven 首先会从本地仓库中查找该依赖包,如果没有找到,则通过 pom.xml 配置的地址或默认地址(如果没有配置远程仓库的地址)下载该依赖包到 .m2文件夹中。

windows下maven的本地仓库

C:\用户\XXXX(你的计算机用户名文件夹)\.m2

如果目录下没有这个文件夹,可以随意执行maven的命令(即便出错),就会帮我们生成.m2文件夹,如:

mvn install

mac OS 下的.m2文件夹在HOME目录下(~)

如果想修改本地仓库的位置,可以在 Maven 文件夹(Maven命令所在目录)下的 conf/settings.xml文件中进行配置。添加如下内容:

<localRepository>地址<localRepository>

# 比如把仓库修改为在E盘的mavenRepository文件夹:
<localRepository>E:/mavenRepository<localRepository>
# 这样,maven下载的依赖包就会下载到该文件夹中。

Maven 项目目录结构(约定)

Maven项目 的目录结构在所有编辑器(Eclipse、IDEA、VSCode等)下都是固定的。

Maven 提倡使用一个共同的标准目录结构,且以“约定由于配置”的原则,开发人员须尽可能遵守如下目录结构:

目录

内容

根目录

存放 pom.xml 和所有的子目录

根目录/src/main/java

项目的 java源代码

根目录/src/main/resources

项目的资源,如:property文件springmvc.xml

根目录/src/test/java

项目的测试类,如:Junit代码

根目录/src/test/resources

测试用的资源

根目录/src/main/webapp/WEB-INF

web应用文件目录、web项目的信息,如:web.xml、本地图片、jsp视图页面

根目录/target

打包输出目录

根目录/target/classes

编译输出目录

根目录/target/test-classes

测试编译输出目录

Test.java

Maven 只会自动运行符合该命名规则的测试类

~/.m2/repository

Maven 默认的 本地仓库目录

全面的 Maven 项目目录结构

根目录
  |
  |------ pom.xml
  |
  |------ src
  |        |
  |        |----- main
  |        |        |
  |        |        |---- java      // java 源码
  |        |        |
  |        |        |---- resources // 项目资源
  |        |        |
  |        |        |---- webapp
  |        |                |
  |        |                |---- WEB-INF   // web 应用文件目录、web 项目的信息
  |        |
  |        |----- test
  |                 |
  |                 |---- java      // 项目测试类
  |                 |
  |                 |---- resources // 测试用的资源
  |        
  |        
  |        
  |------ target
            |
            |---- classes           // 编译输出目录
            |
            |---- test-classes      // 测试编译输出目录

pom.xml: Maven 项目所有的 jar 包依赖、插件依赖都放在其中,是核心配置文件。

手动创建 Maven 项目的目录结构

手动创建 Maven 项目,只需要创建以下这部分的目录、文件即可(大小写也按照如此)。target 目录在执行 mvn compile后会自动生成。

根目录
  |
  |------ pom.xml
  |
  |------ src
  |        |
  |        |----- main
  |        |        |
  |        |        |---- java      // java 源码
  |        |        |
  |        |        |---- resources // 项目资源
  |        |
  |        |----- test
  |        |        |
  |        |        |---- java      // 项目测试类
  |        |        |
  |        |        |---- resources // 测试用的资源
  |        |
  |        |

如创建了一个叫 maven-test01 的项目目录

pom.xml 中内容:

  • 注意几点:
  • <?xml version="1.0" encoding="utf-8"?>中的 utf-8 是指这个 pom.xml 的编码,而非项目的编码。<property> 中的 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 才是项目的编码。
  • <groupId> 中写的组织名,对应 main/java 下的包名。包中才是 .java 源代码。
  • <artifactId> 中写的是项目名,是当前 maven 项目在组中唯一的 ID,也是 pom.xml 对应的项目根目录名。
  • <packaging>里可以是jar也可以是war,说明这个项目是普通 jar项目还是普通war项目
  • <name> 一般与项目名保持一致。使用<name>标签声明一个对于用户更为友好的项目名称,虽然不是必须的,但还是推荐为每个 pom 声明 name,以方便信息交流。
  • pom.xml<project> 根目录下的第一个元素 <modelVersion> 指定当前 pom 模型的版本,对于 maven3 (如这里的3.8.3)或者 maven2 ,它都只能是 4.0.0
  • <version> 版本号:x.x.x-里程碑
  • 1.0.0-SNAPSHOT
  • 第一个x:大版本,有重大变革
  • 第二个x:小版本,修复bug,增加功能
  • 第三个x:更新

里程碑版本:

  • SNAPSHOT (快照,开发版)
  • alpha (内部测试)
  • beta (公开测试)
  • Release | RC (发布版)
  • GA (正常版本)
<?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.testmaven</groupId>
    <artifactId>maven-test01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>maven01</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    
    <dependencies>
       <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>3.8.1</version>
           <scope>test</scope>
       </dependency>
    </dependencies>
 
</project>
<?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.testmaven</groupId>
    <artifactId>maven01</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <packaging>jar</packaging>
    <name>maven01</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
 
</project>

因此,对应的目录层级如下:

maven01 ======================================================= artifactId
  |
  |------ pom.xml
  |
  |------ src
  |        |
  |        |----- main
  |        |        |
  |        |        |---- java      // java 源码
  |        |        |       |
  |        |        |       |---- com =============================
  |        |        |              |                              ||
  |        |        |              |---- testmaven ============ groupId
  |        |        |                       |
  |        |        |                       |---- demo
  |        |        |                               |
  |        |        |                               |---- Hello.java
  |        |        |
  |        |        |---- resources // 项目资源
  |        |
  |        |----- test
  |        |        |
  |        |        |---- java      // 项目测试类
  |        |        |
  |        |        |---- resources // 测试用的资源
  |        |
  |        |

因为类一般都放在包里,所以先创建一个包(com.testmaven.demo),在包里新建一个类,在类中再写主函数。


编写主函数

package com.testmaven.demo;

public class Hello {
    public static void main(String[] args) {
        System.out.println("Kevin: Hello Maven!!");
    }
}