springboot多模块项目如何打包

kimi-001 2020-11-18 10:28:13
我有三个springboot模块,不存在父模块,A引用B模块,C引用A模块,idea和eclipse都是可以启动成功,开发也是没问题的;
三个模块的parent都是
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>

C模块的打包插件
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.yun.web.Application</mainClass>
<includeSystemScope>true</includeSystemScope>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
其它没有什么特殊配置;
框架相关的配置文件如application.yml、mybaties等都在C模块;
由于springboot自带的打包插件spring-boot-maven-plugin打的是可执行的jar,无法被引用;
所以,我把A、B模块的打包插件换成了普通maven的打包插件maven-compiler-plugin,
C模块是springbooot打可执行包插件spring-boot-maven-plugin;
先执行B模块的install安装到本地仓,再执行A模块的install安装到本地仓,再执行C模块的package,打包成功;
java -jar启动报错,错误信息是C模块下的mybaties配置<typeAliases>,扫描A模块的包,没有生效;
个人感觉C模块的配置文件,没有对A、B模块生成的jar生效,但是不知道三个模块怎么建立关系
...全文
3617 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
kimi-001 2020-11-20
  • 打赏
  • 举报
回复
按照你说的这种打包方式,启动异常 Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'cms.CmsAllergicWord'. Cause: java.lang.ClassNotFoundException: Cannot find class: cms.CmsAllergicWord mapper.xml中 resultType="cms.CmsAllergicWord" parameterType="cms.CmsAllergicWord" 这个实体类上添加了注解@Alias("cms.CmsAllergicWord") 但是idea启动是没有异常的
kimi-001 2020-11-20
  • 打赏
  • 举报
回复
引用 10 楼 symbol_amy 的回复:
在顶层project的pom文件中声明各个子模块,如: <modules> <module>A</module> <module>B</module> <module>C</module> </modules> 然后分别在各个子模块的pom文件中添加对应的依赖,最后在顶层使用maven打包
按照你说的这种打包方式,启动异常 Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'cms.CmsAllergicWord'. Cause: java.lang.ClassNotFoundException: Cannot find class: cms.CmsAllergicWord mapper.xml中 resultType="cms.CmsAllergicWord" parameterType="cms.CmsAllergicWord" 这个实体类上添加了注解@Alias("cms.CmsAllergicWord") 但是idea启动是没有异常的
qkniit 2020-11-20
  • 打赏
  • 举报
回复
要有主模块的概念
kimi-001 2020-11-20
  • 打赏
  • 举报
回复
引用 12 楼 icoolno1 的回复:
引用 9 楼 java_Rafa 的回复:
[quote=引用 8 楼 icoolno1 的回复:][quote=引用 7 楼 java_Rafa 的回复:][quote=引用 6 楼 icoolno1 的回复:][quote=引用 5 楼 java_Rafa 的回复:][quote=引用 3 楼 icoolno1 的回复:]命令行,mvn package
打包是没问题的,感觉我打包插件配置的不对,没有让三个模块之间建立联系


不太明白你的意思。这是我的项目引用与打包结果,一切正常,配置没那么复杂,普通包默认就是maven-compile插件,SpringBoot需要特别指定一下:

[/quote]
要是A/B模块的jar与C模块没有联系,这样没问题,我那些mybaties扫描根包的配置都在C模块的resource下,这些配置不对A/B模块起作用,这个您能明白吗[/quote]

把C加到A、B的依赖项里不就行了。[/quote]
A引用B模块,A模块中加入了B的依赖,C引用A模块,C中加入了A模块的依赖[/quote]

Spring是对整个ClassPath扫描的,确定C的包里有A吗?[/quote]那配置文件会对lib下的jar生效吗,比如mybaties的alias别名标签的包扫描,A模块的bean加了alias注解,但是扫描的包配置在C模块下的mybaties-config下
kimi-001 2020-11-20
  • 打赏
  • 举报
回复
引用 13 楼 icoolno1 的回复:
用解压软件打开,BOOT-INF\lib目录下边。
非常确定,如果没有,C模块打包的时候就会报错找不到A、B的
鸡窝里的毛 2020-11-19
  • 打赏
  • 举报
回复
引用 7 楼 java_Rafa 的回复:
引用 6 楼 icoolno1 的回复:
[quote=引用 5 楼 java_Rafa 的回复:][quote=引用 3 楼 icoolno1 的回复:]命令行,mvn package
打包是没问题的,感觉我打包插件配置的不对,没有让三个模块之间建立联系


不太明白你的意思。这是我的项目引用与打包结果,一切正常,配置没那么复杂,普通包默认就是maven-compile插件,SpringBoot需要特别指定一下:

[/quote]
要是A/B模块的jar与C模块没有联系,这样没问题,我那些mybaties扫描根包的配置都在C模块的resource下,这些配置不对A/B模块起作用,这个您能明白吗[/quote]

把C加到A、B的依赖项里不就行了。
kimi-001 2020-11-19
  • 打赏
  • 举报
回复
引用 6 楼 icoolno1 的回复:
引用 5 楼 java_Rafa 的回复:
[quote=引用 3 楼 icoolno1 的回复:]命令行,mvn package
打包是没问题的,感觉我打包插件配置的不对,没有让三个模块之间建立联系
不太明白你的意思。这是我的项目引用与打包结果,一切正常,配置没那么复杂,普通包默认就是maven-compile插件,SpringBoot需要特别指定一下: [/quote] 要是A/B模块的jar与C模块没有联系,这样没问题,我那些mybaties扫描根包的配置都在C模块的resource下,这些配置不对A/B模块起作用,这个您能明白吗
鸡窝里的毛 2020-11-19
  • 打赏
  • 举报
回复
引用 5 楼 java_Rafa 的回复:
引用 3 楼 icoolno1 的回复:
命令行,mvn package
打包是没问题的,感觉我打包插件配置的不对,没有让三个模块之间建立联系


不太明白你的意思。这是我的项目引用与打包结果,一切正常,配置没那么复杂,普通包默认就是maven-compile插件,SpringBoot需要特别指定一下:

kimi-001 2020-11-19
  • 打赏
  • 举报
回复
引用 3 楼 icoolno1 的回复:
命令行,mvn package
打包是没问题的,感觉我打包插件配置的不对,没有让三个模块之间建立联系
kimi-001 2020-11-19
  • 打赏
  • 举报
回复
引用 2 楼 KeepSayingNo 的回复:
你这个应该在project的根目录的target里面只生成一个jar包,打开这个jar包,可以看到A和B都在其lib目录下
A/B是在C的jar的lib下,但是C模块的配置文件没有对A、B模块打的jar生效是为什么?
鸡窝里的毛 2020-11-19
  • 打赏
  • 举报
回复
用解压软件打开,BOOT-INF\lib目录下边。
鸡窝里的毛 2020-11-19
  • 打赏
  • 举报
回复
引用 9 楼 java_Rafa 的回复:
引用 8 楼 icoolno1 的回复:
[quote=引用 7 楼 java_Rafa 的回复:][quote=引用 6 楼 icoolno1 的回复:][quote=引用 5 楼 java_Rafa 的回复:][quote=引用 3 楼 icoolno1 的回复:]命令行,mvn package
打包是没问题的,感觉我打包插件配置的不对,没有让三个模块之间建立联系


不太明白你的意思。这是我的项目引用与打包结果,一切正常,配置没那么复杂,普通包默认就是maven-compile插件,SpringBoot需要特别指定一下:

[/quote]
要是A/B模块的jar与C模块没有联系,这样没问题,我那些mybaties扫描根包的配置都在C模块的resource下,这些配置不对A/B模块起作用,这个您能明白吗[/quote]

把C加到A、B的依赖项里不就行了。[/quote]
A引用B模块,A模块中加入了B的依赖,C引用A模块,C中加入了A模块的依赖[/quote]

Spring是对整个ClassPath扫描的,确定C的包里有A吗?
kimi-001 2020-11-19
  • 打赏
  • 举报
回复
我这个不存在父子模块,都是各个模块使用自己的依赖pom文件,C模块是入口模块,也是最后打可执行jar的模块
symbol_amy 2020-11-19
  • 打赏
  • 举报
回复
在顶层project的pom文件中声明各个子模块,如: <modules> <module>A</module> <module>B</module> <module>C</module> </modules> 然后分别在各个子模块的pom文件中添加对应的依赖,最后在顶层使用maven打包
kimi-001 2020-11-19
  • 打赏
  • 举报
回复
引用 8 楼 icoolno1 的回复:
引用 7 楼 java_Rafa 的回复:
[quote=引用 6 楼 icoolno1 的回复:][quote=引用 5 楼 java_Rafa 的回复:][quote=引用 3 楼 icoolno1 的回复:]命令行,mvn package
打包是没问题的,感觉我打包插件配置的不对,没有让三个模块之间建立联系
不太明白你的意思。这是我的项目引用与打包结果,一切正常,配置没那么复杂,普通包默认就是maven-compile插件,SpringBoot需要特别指定一下: [/quote] 要是A/B模块的jar与C模块没有联系,这样没问题,我那些mybaties扫描根包的配置都在C模块的resource下,这些配置不对A/B模块起作用,这个您能明白吗[/quote] 把C加到A、B的依赖项里不就行了。[/quote] A引用B模块,A模块中加入了B的依赖,C引用A模块,C中加入了A模块的依赖
鸡窝里的毛 2020-11-18
  • 打赏
  • 举报
回复
命令行,mvn package
KeepSayingNo 2020-11-18
  • 打赏
  • 举报
回复
你这个应该在project的根目录的target里面只生成一个jar包,打开这个jar包,可以看到A和B都在其lib目录下
临世驻年 2020-11-18
  • 打赏
  • 举报
回复
不知道,google一下

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧