在上一篇文章中,本地jar包引用使用了${project.basedir}变量,但是在使用maven clean命令的时候却报了一个错误。
Maven建议不要使用systemPath来引用项目目录内的文件,因为这会导致依赖解析问题,尤其是在项目被其他项目依赖时。systemPath是一个绝对路径,其他项目无法通过这个路径找到该jar包。
Maven强烈建议修复这个问题,因为它可能会影响到项目构建的稳定性。未来的Maven版本可能不再支持使用systemPath指向项目内部文件。
解决办法
将本地依赖项作为一个模块添加到项目中,通过以下步骤实现:
第一步:创建一个新的Maven模块
首先,在父项目(即my-project)中创建一个新的子项目来包含该依赖项。假设将子项目命名为webp-imageio-core-module。
1)更新父项目的pom.xml
在父项目的pom.xml文件中,添加新的模块:
<module>webp-imageio-core-module</module>
<!-- 其他模块 -->
2)创建新模块
在项目根目录(my-project)下,创建一个新的目录webp-imageio-core-module,并在其中创建一个pom.xml文件,内容如下:
<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.cloudfish</groupId>
<artifactId>webp-imageio-core-module</artifactId>
<version>0.1.0</version>
<packaging>jar</packaging>
<dependencies>
<!-- 添加该模块需要的其他依赖项 -->
</dependencies>
3)将Jar文件添加到模块中
将webp-imageio-core-0.1.0.jar文件放到webp-imageio-core-module的src/main/resources目录下。
4)更新子模块的pom.xml
在webp-imageio-core-module的pom.xml文件中,添加如下配置,以确保该jar文件被包含在构建输出中:
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>webp-imageio-core-0.1.0.jar</include>
</includes>
</resource>
</resources>
第二步:在主项目中添加模块依赖
在父项目(例如my-project)的pom.xml文件中,添加对新模块的依赖:
<dependency>
<groupId>com.cloudfish</groupId>
<artifactId>webp-imageio-core-module</artifactId>
<version>0.1.0</version>
</dependency>
<!-- 其他依赖项 -->
第三步:构建项目
在项目根目录下,运行以下命令来构建整个项目:
mvn clean install
这样,webp-imageio-core-0.1.0.jar会作为webp-imageio-core-module模块的一部分被包含在构建输出中,并且可以作为父项目的依赖项使用。
如果经常处理这样的本地依赖,可以考虑将其部署到一个私有Maven仓库(例如Nexus或Artifactory),这样可以更加方便地管理依赖项,避免将第三方jar文件直接包含在项目源代码中。
最后总结
上面的解决办法,其实就是把本地依赖作为一个子项目来管理。有完美主义、强迫症、容不得一丁点报错的可以用起来。
生产环境也搭建私有Maven仓库,这个有点不现实。而且本地依赖只有那么几个,并不是太多,如果是独立的项目更不需要了。
领取专属 10元无门槛券
私享最新 技术干货