Java-Maven
Java-Maven
基本配置
-
下载
下载链接 下载流程 -
配置:
配置环境变量,将下载解压的
maven 的 bin 添加在 path 中 1
2MAVEN_HOME: C:\SoftwareDownload\Maven\apache-maven-3.8.2\
Path下: %MAVEN_HOME%\bin -
检测
检测命令 检测结果 mvn -version
第一个 MAVEN 应用
-
IDEA Maven
配置添加 IDEA-Maven
配置 -
构建一个
maven
项目 Maven 项目创建流程 -
maven
仓库地址 -
maven
依赖添加步骤 Maven-依赖获取流程
gif
镜像配置
-
添加阿里镜像
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<mirrors>
<mirror>
<id>huaweicloud</id>
<mirrorOf>central</mirrorOf>
<name>huawei cloud</name>
<url>https://repo.huaweicloud.com/repository/maven/</url>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors> -
pom.xml
为项目配置独立仓库 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21<repositories>
<repository>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<!--
pom.xml 里面的仓库与 settings.xml 里面的仓库功能是一样的。
主要区别在于 pom 里面的仓库是个性化的比如一家大公司里的 settings 文件是公用的,所有的项目都用一个 settings 文件, 但各个子项目却会引用不同的第三方库, 所以需要在 pom.xml 里设置自己需要的仓库地址。
-->
基础组件: 仓库
-
远程仓库
/ 中央仓库 -
本地仓库:
C:/User/
用户名 /.m2/repository -
本地仓库配置
1
2
<localRepository>D:/ProgramData/Maven/apache-maven-3.8.1/urlslibs</localRepository>仓库分类
配置全局 JDK
-
在配置文件的
profiles
节点内添加如下 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20<profiles>
<profile>
<id>jdk1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<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>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
<!-- 激活配置 -->
<activeProfiles>
<activeProfile>jdk1.8</activeProfile>
</activeProfiles>
</profiles>这样我们在创建
maven
项目时就会自动使用该 jdk
版本,目前推荐 jdk1.8
依赖管理
-
管理
依赖管理 - 依赖传递冲突问题
- 路径优先: 当依赖中出现相同的资源时,
层级越深, 优先级越低, 层级越浅, 优先级越高 - 声明优先: 当资源在相同层级被依赖时,
配置顺序靠前的覆盖配置顺序靠后的 - 特殊优先: 当同级配置了相同资源的不同版本,
后配置的覆盖先配置的
- 路径优先: 当依赖中出现相同的资源时,
- 依赖传递冲突问题
-
依赖范围
-
主程序范围有效
( main
文件夹范围内) -
测试程序范围有效
( test
文件夹范围内) -
是否参与打包
( package
指令范围内) scope 主代码 测试代码 打包 范例 compile(默认)
Y
Y
Y
log4j
test
Y
junit
provided
Y
Y
servlet-api
runtime
Y
jdbc
-
多环境配置
-
多环境配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76<profiles>
<profile>
<!-- 配置为开发环境 -->
<id>dev</id>
<!-- 构建 -->
<build>
<!-- 构建输出名称 -->
<finalName>dev-war</finalName>
</build>
<repositories>
<repository>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<!-- 激活开发环境 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!-- 配置为测试环境 -->
<id>test</id>
<!-- 构建 -->
<build>
<!-- 构建输出名称 -->
<finalName>test-war</finalName>
</build>
<repositories>
<repository>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</profile>
<profile>
<!-- 配置为生产环境 -->
<id>procuctEnv</id>
<!-- 构建 -->
<build>
<!-- 构建输出名称 -->
<finalName>proc-war</finalName>
</build>
<repositories>
<repository>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles> -
打包测试多环境配置
成功使用测试环境打包
Maven 命令
-
基本命令
mvn
命令
资源插件
-
加载
xml
文件 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20<build>
<resources>
<resource>
<!-- 所在目录 -->
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
1. 默认没有使用 resources 的时候,maven 执行编译代码时,会把 src/main/resources 目录中的文件拷贝到 targer/classes 目录中,对于 src/main/java 目录下的非 java 文件不处理,不拷贝到 target/classes 目录中
2. 我们的程序有需要把一些文件放在 src/main/java 目录中,当我们在执行 java 程序时,需要用到 src/main/java 目录中的文件 需要告诉 maveb 在 mvn compile src/main/java 目录下的程序时, 需要把文件一同拷贝到 target/classes 目录中。此时就需要在 <build> 中加入 <resources> -
将
resources
文件夹移动到 src/main/
,再进行如下操作,读取数据库时将不会出现NullPointerException
资源路径配置
单元测试
-
测试的是类中的方法,方法都是独立测试
-
单元测试
1
2
3
4
5
6
7
8
9import org.junit.Test;
public class TestMaven {
public void testMaven() {
System.out.println("我是 maven 测试 ");
}
}
打包
-
命令
1
2
3
4
5
6mvn package
# 三种
war # web
jar
pom # 聚合 -
结果
打包为 war
,在 linux
服务器 Tomcat
部署 -
打包输出影响信息
1
2
3
4
5
6
7<!-- <groupId>com.coderitl</groupId> -->
<artifactId>FileUpLoad</artifactId>
<version>1.0-SNAPSHOT</version>
<name>FileUpLoad</name>
<!-- 配置打包形式 -->
<packaging>war</packaging>
插件
-
pom
里配置 tomcat
插件 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15web:
需配置 => <packaging>war</packaging>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<hostName>localhost</hostName> <!-- Default: localhost -->
<port>8080</port> <!-- 启动端口 Default:8080 -->
<path>/</path> <!-- 访问应用路径 Default: /${project.artifactId}-->
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>-
无需下载系统
tomcat
,运行插件中的tomcat
运行插件中的 tomcat
-
-
war
包插件 -
jar
包插件 -
编译插件
1
2
3
4
5<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.1</version>
</plugin> -
插件无法下载
-
配置代理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<proxies>
<proxy>
<id>httpproxy</id>
<active>true</active>
<protocol>http</protocol>
<host>127.0.0.1</host>
<port>7890</port>
</proxy>
<proxy>
<id>httpsproxy</id>
<active>true</active>
<protocol>https</protocol>
<host>127.0.0.1</host>
<port>7890</port>
</proxy>
</proxies> -
终端执行如下命令
1
2# 你可以确保项目所需的依赖项都已经被正确地解决和下载。这是在开始构建或运行项目之前一个常用的步骤,以确保依赖项的可用性和一致性。
mvn dependency:resolve
-
Git 下载的项目运行方式
主要是对环境进行配置,
即 下载依赖、jdk、xxx.iml 文件
、数据库配置等
项目运行依赖配置 |
---|
![]() |
Maven 进阶
分模块开发
-
意义
将原始模块按照功能拆分成若干个子模块,
方便模块间的相互调用, 接口共享 -
实现多模块
-
创建
maven
项目 创建 A 模块 -
模块之间通过依赖引入
创建 maven
-
B
,模块引用 A 模块 在 A
模块的 maven 生命周期下点击 install,然后在 B 模块引用 A 的坐标, 刷新依赖 使用 A
模块在 B
中 添加 A
模块依赖
-
依赖管理
-
依赖具有传递性
-
直接依赖: 在当前项目中通过依赖配置建立的依赖关系
-
间接依赖: 被资源的资源如果依赖其他资源,
当前项目简介依赖其他资源 直接依赖与间接依赖 -
依赖关系查看
依赖关系查看
-
私服
-
Nexus
https://help.sonatype.com/repomanager3/product-information/download
下载 -
启动
1
2# bin/ => cmd
nexus /run nexuslatest-win64\nexus-3.20.1-01\bin
启动成功标志 -
访问
-
配置文件位置
latest-win64\nexus-3.20.1-01\etc => 修改端口号
-
私服仓库
私服仓库 -
仓库分类
- 宿主仓库
hosted
- 保存无法从中央仓库获取的资源
- 自主研发
- 第三方非开源项目
- 保存无法从中央仓库获取的资源
- 代理仓库
proxy
- 代理远程仓库,
通过 nexus
访问其他公共仓库, 例如中央仓库
- 代理远程仓库,
- 仓库组
group
- 将若干仓库组成一个群组,
简化配置 - 仓库组不能保存资源,
属于设计型仓库
- 将若干仓库组成一个群组,
- 宿主仓库
-
登录获取用户名和密码
登录获取用户名 ( admin
)和密码 修改新密码 -
资源上传
-
idea
配置 idea
配置 -
nexus
仓库 -
新建仓库
新建仓库 选择如下的 hosted
-
创建
hosted
的 release
仓库 release
完成版的 添加到 public
组中 -
创建
hosted
的 snapshots
snapshots
,之后添加到 maven-public
-
-
-
本地配置私服
-
maven
配置 1
2
3
4
5
6
7
8
9
10
11
12<servers>
<server>
<id>coderitl-release</id>
<username>admin</username>
<password>root</password>
</server>
<server>
<id>coderitl-snapshots</id>
<username>admin</username>
<password>root</password>
</server>
</servers> -
什么样的资源来自于私服
1
2
3
4
5<mirror>
<id>nexus-coderitl</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
-
-
配置发布到私服
1
2
3
4
5
6
7
8
9
10
11<!-- idea 的 pom 中配置 -->
<distributionManagement>
<repository>
<id>coderitl-release</id>
<url>http://localhost:8081/repository/coderitl-release/</url>
</repository>
<snapshotRepository>
<id>coderitl-snapshots</id>
<url>http://localhost:8081/repository/coderitl-snapshots/</url>
</snapshotRepository>
</distributionManagement>-
发布流程
发布流程 -
发布到私服
点击发布 查看
-
-