文章目录
- 两种目录
- Maven 本地仓库
- Maven 项目目录结构(约定)
- 手动创建 Maven 项目的目录结构
- 编写主函数
两种目录
- Maven 本身的目录(Maven命令所在的安装目录 + Maven本地仓库)
- Maven 项目的目录(项目的目录)
Maven 安装后,本身会有两个目录:
- Maven 的命令所在目录,如:
D:\Program Files\apache-maven-3.8.3
- 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 提倡使用一个共同的标准目录结构,且以“约定由于配置”的原则,开发人员须尽可能遵守如下目录结构:
目录 | 内容 |
⭐ | 存放 |
⭐ | 项目的 java源代码 |
⭐ | 项目的资源,如: |
⭐ | 项目的测试类,如: |
⭐ | 测试用的资源 |
| web应用文件目录、web项目的信息,如: |
| 打包输出目录 |
| 编译输出目录 |
| 测试编译输出目录 |
| Maven 只会自动运行符合该命名规则的测试类 |
| 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!!");
}
}