一、Maven配置区别
自定义 Maven 和 IDE 捆绑 Maven,拉取依赖的「来源」是一样的(都是远程仓库),但「拉取效率、配置灵活性」有区别:
- 拉取来源:两者默认都是从 Maven 官方中央仓库拉取,但自定义配置里加了阿里云镜像,所以实际是从阿里云拉(速度快);而 IDE捆绑的 Maven 如果用默认配置,是从官方中央仓库拉(速度慢)。
- 核心差异不只是速度:自定义 Maven 还能自由改本地仓库位置、加私服认证、配代理等;IDE 捆绑的 Maven
配置更固定,想改这些得手动调整用户目录下的 settings.xml。
简单说:拉取的依赖内容是一样的,但自定义 Maven 能通过配置让拉取过程更高效、更贴合你的使用习惯。



1、 区别
最大区别:控制权归属
(1)自定义 Maven(手动安装版)
你完全掌控 Maven 的版本、配置文件和本地仓库位置。你可以随时升级、更换 Maven 版本,也可以修改 settings.xml 来配置镜像、代理等,不受 IDE 更新的影响。
(2)IDE 捆绑 Maven
Maven 的版本和基础配置由 IDE 决定,你只能在 IDE 提供的范围内调整。当 IDE 更新时,内置 Maven 也可能被自动更新,可能引发兼容性问题。
2、拉取依赖能力
这两种配置拉取依赖的能力是完全一样的。
(1)能否拉取到某个依赖,只取决于 settings.xml 中配置的镜像源(比如阿里云镜像、中央仓库),而不是 Maven
本身是自定义的还是 IDE 捆绑的。
(2) 自定义配置的优势在于,可以更方便地修改镜像源,让依赖下载速度更快,但这并不代表能拉取到更多依赖。
3、仓库大小与依赖数量的关系
(1)本地仓库的大小,是由项目中实际用到的依赖数量和大小决定的,和 Maven 是自定义还是 IDE 捆绑无关。
(2)不管用哪种配置,只要是同一个项目,下载的依赖都是一样的,仓库大小也会是一样的。
二、settings.xml 配置
只要 IDE 里指定了这个 settings.xml,Maven 就会按这个规则运行。
settings.xml 里关于镜像源配置(核心配置):
xml
<mirrors>
<!-- 阿里云镜像(重点) -->
<mirror>
<id>alimaven</id> <!-- 镜像唯一标识,随便起但不能重复 -->
<name>aliyun maven</name> <!-- 镜像名称,仅说明用 -->
<url> http://maven.aliyun.com/nexus/content/groups/public/ </url> <!-- 阿里云镜像地址 -->
<mirrorOf>central</mirrorOf> <!-- 表示替代 Maven 官方中央仓库 -->
</mirror>
<!-- 禁用 HTTP 外部仓库(安全配置) -->
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf> <!-- 匹配所有 HTTP 协议的外部仓库 -->
<url>http://0.0.0.0/</url> <!-- 无效地址,相当于禁用 -->
<blocked>true</blocked> <!-- 明确标记禁用 -->
</mirror>
</mirrors>
- 阿里云镜像的作用:Maven 官方中央仓库在国外,下载依赖慢且容易失败;
配置阿里云镜像后,Maven
会从国内的阿里云服务器下载依赖,速度提升几十倍。 - 禁用 HTTP 仓库的作用:强制使用 HTTPS 协议下载依赖,避免 HTTP 协议的安全风险(比如依赖包被篡改)。
三、达梦数据库的 JDBC 驱动
达梦驱动属于商业软件的依赖,达梦数据库的 JDBC 驱动既没上传到 Maven 中央仓库(中央仓库只有公共开源的依赖),也没上传到阿里云等公共镜像仓库,所以不管是从中央仓库还是阿里云仓库,下载时会提示 "找不到"它。
DmJdbcDriver18还是其他版本的达梦驱动,都无法直接从中央仓库(或阿里云等公共镜像仓库)下载,必须通过以下方式获取:
(1)从达梦数据库的安装目录中提取驱动 Jar 包(通常在drivers/jdbc文件夹下);

(2)手动将 Jar 包安装到本地 Maven 仓库(用mvn install:install-file命令);
(3)若企业有私有 Maven 仓库,可将驱动上传到私有仓库后再引入。
1、新建lib文件夹
在父项目根目录下,新建一个名为 lib 的文件夹。

2、复制jar包
把 DmJdbcDriver18.jar 复制到这个新建的 lib 文件夹里。

3、配置 system 依赖失败(system 依赖不适合多模块项目)
如果项目没有拆分多模块,可以使用该方法。
(1) 修改父 pom.xml 里的 DM8 依赖配置,替换成下面这个本地 jar 包的写法:
xml
<!-- 本地达梦DM8驱动 -->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>Dm8JdbcDriver18</artifactId>
<version>8.1.2</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/DmJdbcDriver18.jar</systemPath>
</dependency>
${project.basedir} 是 Maven 内置变量,指向父项目根目录,能保证路径在任何环境下都正确。
问题:因为该项目是多模块结构,子模块会继承父项目的驱动依赖。
所以父模块用${project.basedir}/lib/DmJdbcDriver18.jar配置 DM8 的 system 依赖时,子模块(如 base)会继承该依赖,然后${project.basedir}会指向子模块自身目录,导致 Maven 去E:\project\back\base\lib找驱动(实际驱动在父模块E:\project\back\lib),从而报错。
(2) 配置 Maven 打包时包含 system 依赖
默认情况下,Maven 打包时不会包含 scope=system 的依赖,需要在当前父 pom.xml 中添加配置,确保驱动包被打进最终的 jar/war 包:
xml
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>
注意: system 依赖是 "系统级依赖",Maven 默认不打入包,需手动加<includeSystemScope>true</includeSystemScope>才会包含,漏配就报错。
4、解决方案
(1)方案 一:用绝对路径配置 system 依赖(不灵活,排除)
直接把父模块 pom.xml 里的systemPath改成驱动包的绝对路径,这样所有子模块继承依赖时,都会指向同一个正确路径,不会再出现 "路径漂移":
xml
<!-- 本地达梦DM8驱动 -->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>Dm8JdbcDriver18</artifactId>
<version>8.1.2</version>
<scope>system</scope>
<!-- 替换为你驱动包的实际绝对路径(必须是父模块lib下的路径) -->
<systemPath>E:\project\back\lib\DmJdbcDriver18.jar</systemPath>
</dependency>
- 保存父模块 pom.xml;
- 在 IDEA 右侧 Maven 面板点击「Reload All Maven Projects」刷新依赖;
- 执行
mvn clean install -U(可在 IDEA 终端执行),此时 base等子模块会按绝对路径找驱动,报错直接消失。
(2)方案 二:放弃 system 依赖,安装驱动到本地 Maven 仓库
①安装驱动到本地 Maven 仓库
打开命令提示符(CMD),进入驱动包所在目录(E:\project\back\lib),执行以下命令:
bash
mvn install:install-file -Dfile=DmJdbcDriver18.jar -DgroupId=com.dameng -DartifactId=Dm8JdbcDriver18 -Dversion=8.1.2 -Dpackaging=jar
执行成功后,驱动会被安装到你本地 Maven 仓库
(默认路径:C:\Users\你的用户名.m2\repository\com\dameng\Dm8JdbcDriver18\8.1.2)。

下面解释为什么jar包下载在E盘的目录下。
②修改父模块 pom.xml(删除 system 依赖,改用普通依赖)
bash
<!-- 删除原来的system依赖,替换为下面的普通依赖 -->
<!-- 达梦DM8驱动(从本地Maven仓库加载) -->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>Dm8JdbcDriver18</artifactId>
<version>8.1.2</version>
</dependency>
IDEA 右侧 Maven 面板点击「Reload All Maven Projects」,所有子模块会从本地仓库加载驱动,彻底解决路径问题。
数据库已经连接成功:日志里的 [dataSource-1] inited。
③关于打包:
普通依赖(无 system scope)是 Maven 标准依赖,打包时会自动把驱动包打进最终的 jar/war 包,运行时能直接加载
四、mvn install:install-file命令
命令的核心作用就是:把本地 jar 包 "安装" 到 Maven 的本地仓库。
关键规则:Maven 命令的仓库路径,由「当前生效的 settings.xml」决定。
IDEA 里 "自定义 Maven" 的本质,是让 IDEA 调用 Maven 命令时,使用你指定的 Maven 安装包 + 对应的settings.xml,而settings.xml里的<localRepository>参数,决定了本地仓库的位置。

五、为什么不使用Add as Library
因为:既点了 "Add as Library..." 又在 pom.xml 里配置了 DM8 依赖,但只要 Maven 本地 / 远程仓库里找不到这个驱动包,打包一定会报错,甚至本地用 Maven 命令运行也会报错。
"Add as Library..." 是 IDEA 的一个实用功能,核心作用是:把当前选中的本地 jar 包(比如这里的DmJdbcDriver18.jar),直接添加为当前项目的 "库依赖"。

1、使用场景
可以理解为:让 IDEA 的代码编译环境 "认识" 这个 jar 包,能识别包里的类、方法等内容,避免代码里出现 "找不到类" 的红色报错(比如dm.jdbc.driver.DmDriver爆红)。
核心场景:当通过非 Maven 方式(比如直接下载 jar 包放到项目里)引入依赖时,IDEA 默认不会自动识别这个 jar 包,代码里引用包内的类会爆红 ------ 此时用 "Add as Library..." 就能快速解决编译报错。
注意点:
- 它是 IDEA 本地的临时配置:只在当前 IDEA 项目中生效,不会影响 Maven 的依赖管理(Maven 打包时不会自动包含这个
jar 包,除非你同时在pom.xml里配置了依赖); - 和 Maven 依赖的区别: Maven 依赖:是项目级的、可打包的、跨环境的依赖; Add as Library:是 IDEA编辑器级的、仅用于编译的临时依赖。
简单说,这个功能是 让 IDEA 不爆红的快捷方式,但不能替代 Maven 的依赖配置(否则打包后运行会报错)。
2、打包场景
只单独用 "Add as Library..." 功能,打包时大概率会出错,核心原因是:这个功能只是让 IDEA 编辑器识别了 jar 包,但 Maven 完全 "不知道" 这个 jar 包的存在。
具体解释:
Maven 打包的逻辑是只认pom.xml里配置的依赖,完全不看 IDEA 的 "Add as Library..." 操作:
- 如果你只点了 "Add as Library...",但没在pom.xml里配置 DM8 驱动的依赖,Maven 打包时不会把DmJdbcDriver18.jar打进最终的 jar/war 包;
- 部署打包后的项目时,就会报 "ClassNotFoundException: dm.jdbc.driver.DmDriver"(找不到驱动类),项目启动失败。
正确的配合方式:
"Add as Library..."必须和 Maven 依赖配置一起用,才能既让 IDEA 不爆红,又让打包不出错:
- 先在pom.xml里配置 DM8 驱动的依赖(比如方案 2 的本地 Maven 仓库依赖,因为pom.xml里配置 DM8 驱动还是需要在maven里找jar包的);
- 再用 "Add as Library..." 让 IDEA 识别 jar 包(避免代码爆红);
- 此时 Maven 打包会自动包含驱动,项目运行也不会报错。