文章目录
- 使用绝对路径导入 JAR 包
- 使用相对路径导入 JAR 包
- 在多模块中的情形
- 将 JAR 包安装到本地 Maven 仓库
在 Maven 的 POM 文件中使用本地路径引入 JAR 包依赖通常都不是好主意,但是有时候会遇到极端的情况。一般在 Maven 中引入依赖需要这个依赖已经存在于 Maven 仓库中。这个 Maven 仓库可以是本地仓库,也可以是远程仓库。如果这个 JAR 包不在仓库中,且只是希望临时马上使用,或者需要将这个 JAR 包随 Maven 项目一起传给他人,这个时候使用本地路径引入 JAR 包依赖反而方便可靠一些。
使用绝对路径导入 JAR 包
在 POM 文件加入如下配置即可。如果使用了多模块,建议只将其放置在子 POM 中。其中,组 ID
、工件 ID
、版本号
、JAR 包本地绝对路径
可按需要任意填写。
此时,这个 JAR 包就只能一直放到某个固定的位置,否则下次在 Maven 将无法找到此依赖。
<project xmlns=...>
<dependencies>
<dependency>
<groupId>组 ID</groupId>
<artifactId>工件 ID</artifactId>
<version>版本号</version>
<scope>system</scope>
<systemPath>JAR 包本地绝对路径</systemPath>
</dependency>
</dependencies>
</project>
使用相对路径导入 JAR 包
有时候需要将这个 JAR 包随 Maven 项目一起传给他人,这个时候就不能使用绝对路径。怎么办呢?这个问题麻烦一些。幸好,Maven 提供了一些内置属性。${}
代表本 POM 文件所在的目录,所以如果将 JAR 包放到 POM 文件同目录下的其它文件夹(这个文件夹不妨叫 lib),那么这个 JAR 包的路径就可以在该 POM 路径中写成 ${}/lib/
。
其中,组 ID
、工件 ID
、版本号
、JAR 包相对路径
可按需要任意填写。
<project xmlns=...>
<dependencies>
<dependency>
<groupId>组 ID</groupId>
<artifactId>工件 ID</artifactId>
<version>版本号</version>
<scope>system</scope>
<systemPath>${}/JAR 包对本 POM 文件的相对路径</systemPath>
</dependency>
</dependencies>
</project>
在多模块中的情形
当遇到多模块时,这个问题会复杂一些。因为 ${}
代表本 POM 文件所在的目录,所以如果在子 POM 使用这个代码,${}
就会变成子 POM 所在的目录。幸好 Maven 允许 ../
表示上一级目录。所以如果上面的 JAR 包位置不变,而在根模块的下一级的子模块引入依赖时,依赖代码如下。
其中,组 ID
、工件 ID
、版本号
、JAR 包相对路径
可按需要任意填写。
<project xmlns=...>
<dependencies>
<dependency>
<groupId>组 ID</groupId>
<artifactId>工件 ID</artifactId>
<version>版本号</version>
<scope>system</scope>
<systemPath>${}/../JAR 包对根 POM 文件的相对路径</systemPath>
</dependency>
</dependencies>
</project>
【踩坑提醒】
-
只能在叶子模块中使用上述配置,不能在父模块进行此配置。原因是 Maven 依赖会自动发生继承效应。在父模块的依赖继承给子模块时,其
${}
值会发生变化,因此<systemPath/...>
的值会改变。虽然子模块可以重写此依赖,从而可以覆盖父模块的负面效果,但如果子模块很多,维护起来会很麻烦。因此,不要在实际不需要使用此依赖的父模块的<dependencies>
或<dependencyManagement>
中引入该依赖。 -
不要使用
${}
。该 Maven 内置属性在 Maven 2 中才有,Maven 3 中已废除。
将 JAR 包安装到本地 Maven 仓库
决定该 JAR 包以后会长期使用时,可以选择将此 JAR 包安装进行本地 Maven 仓库了。这只需要在命令行输出如下命令即可。
【注意】
-
该命令是一条命令,只不过为了美观而被拆分成了几行。
-
该命令是 Windows CMD 模式下的命令。每行结尾的
^
是 CMD 下用于将一条命令内部换行而不间断。
mvn install:install-file ^
-Dfile=JAR 包本地路径 ^
-DgroupId=组 ID ^
-DartifactId=工件 ID ^
-Dversion=版本号 ^
-Dpackaging=jar