在springboot开发中如果项目比较复杂,我们会想到把项目拆解成多个模块,也就是形成一个多层级模块的maven项目。例如现在我们的项目组成是一个父模块litchi,两个子模块litchi-common和litchi-admin。其中litchi-common模块是一个公共模块,里面定义了一些公共的方法操作,litchi-admin模块是一个应用模块,litchi-admin中定义了对litchi-common的依赖。整个项目非常清晰,构建也很简单,一切都很顺利,在eclipse中也可以正常运行。

litchi的pom

org.springframework.boot

spring-boot-starter-parent

1.5.7.RELEASE

com.color

litchi

0.0.1

pom

litchi

project for Spring Boot

litchi-common

litchi-admin

litchi-common的pom

com.color

litchi

0.0.1

com.color.litchi

litchi-common

1.0.0

litchi-common

jar

litchi-admin的pom

com.color

litchi

0.0.1

jar

com.color.litchi

litchi-admin

litchi-admin

1.0.0

http://maven.apache.org

UTF-8

com.color.litchi

litchi-common

1.0.0

现在需要对litchi-admin进行打包

1、由于litchi-admin对litchi-common的依赖,所以先把litchi-common安装到本地仓库,执行maven命令install,安装成功,本地仓库目录已经出现对应的jar包了

这里需要注意一点,litchi-common的pom中不要定义任何插件,删除build标签,程序会自动调用默认的插件maven-compiler-plugin进行打包


2、对litchi-admin执行package命令,这个时候错误来了,报错信息如下:

Could not resolve dependencies for project com.color.litchi:litchi-admin:jar:1.0.0: Failed to collect dependencies at com.color.litchi:litchi-common:jar:1.0.0: Failed to read artifact descriptor for com.color.litchi:litchi-common:jar:1.0.0: Failure to find com.color:litchi:pom:0.0.1 in http://maven.aliyun.com/nexus/content/groups/public/ was cached in the local repository, resolution will not be reattempted until the update interval of Sinotrans-Repositories has elapsed or updates are forced

报错的原因看起来很清晰,litchi-common加载不成功。明明上一步已经安装到本地仓库了呀,为什么会出现这个问题呢?查了一下资料,各种大神纷纷登场,有说删除litchi-common本地仓库中_remote.repositories文件的,有说使用各种各种的插件的,各种办法都尝试了仍然无法解决。

自己静下来仔细想了一下流程:按理说maven在打包的时候默认会优先从本地仓库查找相应的jar包然后才会去远程仓库查找下载或者更新。从报错来看,打包的时候直接就从远程仓库开始下载,完全无视本地的存在。在确信本地jar没有问题的情况下,看来需要强行让程序从本地加载这个jar包,好了直接上解决方案,修改litchi-admin的pom

1、依赖中增加scope、systemPath标签指定jar的本地路径

2、build标签下增加resources把本地jar打包到生成的jar中

com.color.litchi

litchi-common

1.0.0

system

D:\softWare\repository\com\color\litchi\litchi-common\1.0.0\litchi-common-1.0.0.jar

org.springframework.boot

spring-boot-maven-plugin

D:\softWare\repository\com\color\litchi\litchi-common\1.0.0\

BOOT-INF/lib/

**/*.jar

后记:maven为什么不能直接从本地仓库加载这个jar包的原因仍然不清楚,希望有大神留言说明!