一个项目下有多个 Spring Boot modules,且有依赖关系,如何打成 jar? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ArthurKing
V2EX    问与答

一个项目下有多个 Spring Boot modules,且有依赖关系,如何打成 jar?

  •  
  •   ArthurKing 2017-11-02 10:19:57 +08:00 16317 次点击
    这是一个创建于 2908 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在的一个项目,架构不知道谁搭的,这个就不吐槽了。
    P 下有 modules(a,b,c,d)。每个 module 都是一个 Spirng Boot 的项目(指的是 a,b,c 都有一个类似结构的类。除类名外,均与以下代码一样
    `
    @SpringBootApplication
    @EnableCaching
    public class XXXBaseApplication {
    }
    `
    )。modules c/d 均有引用 a 的代码,d 项目是主要开发项目,在 IDEA 中可以直接运行 d 项目。
    现在的问题是,我想将 d 项目打成 jar 包。尝试在项目 p 下直接
    `mvn package`,结果 a 报
    `Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.5.4.RELEASE:repackage failed: Unable to find main class -> [Help 1]
    `
    在 a 的 Main 类中加入空的 main 方法(b/c 中也同样加入),a 可正常打包,c 打包失败,提示
    `[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project c: Compilation failure
    [ERROR] c/src/main/java/xx/XX.java:[8,27] 找不到符号
    [ERROR] 符号: 类 BaseEntity
    [ERROR] -> [Help 1]
    `
    其中的 BaseEntity 是 a 中的基类。

    a pom
    ` <parent>
    <groupId>xx</groupId>
    <artifactId>p</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>apollo-login</artifactId>
    <dependencies>
    ...
    </dependencies>
    <build>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
    <fork>true</fork>
    </configuration>
    </plugin>
    </plugins>
    </build>
    `


    c pom


    ` <parent>
    <groupId>xx</groupId>
    <artifactId>p</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>c</artifactId>
    <dependencies>
    <dependency>
    <groupId>xx</groupId>
    <artifactId>a</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    </dependency>
    </dependencies>
    <build>
    <plugins>
    </plugins>
    </build>
    `
    d 的 pom 与 c 类似。
    在 不大动 项目架构的前提下,如何能保证项目正常打包?
    第 1 条附言    2017-11-02 16:11:09 +08:00
    改了下,现在可以正常打 jar 了
    主要改动是父项目 p 和 a 中去掉了 build 节点,这样 a 在编译的时候会打成一个普通的 jar 包,而不是 Spring Boot 的 jar 形式(这种形式的 jar 会导致引用它的项目无法找到依赖)。
    6 条回复    2017-11-04 23:22:04 +08:00
    ArthurKing
        1
    ArthurKing  
    OP
       2017-11-02 11:04:57 +08:00
    顶一下
    junneyang
        2
    junneyang  
       2017-11-02 13:00:02 +08:00
    直接在最上层构建就可以
    可以参考:
    https://github.com/junneyang/xxproject
    ArthurKing
        3
    ArthurKing  
    OP
       2017-11-02 13:36:01 +08:00
    @junneyang #2 巧了,xxproject 我昨天就 clone 了大体看了下,这个项目的 modules 之间应该是没有依赖关系,跟我这个情况还不一样。谢谢
    junneyang
        4
    junneyang  
       2017-11-03 09:42:09 +08:00   1
    module 之间依赖,需要引用对方类或者方法需要 自定义 starter
    被依赖模块需要注册到 spring 中,启动时才会自动注入的
    可以参考: http://blog.csdn.net/liuchuanhong1/article/details/55057135
    ArthurKing
        5
    ArthurKing  
    OP
       2017-11-03 16:16:11 +08:00
    @junneyang #4 感谢
    jack80342
        6
    jack80342  
       2017-11-04 23:22:04 +08:00
    这些天翻译了 Spring Boot 最新的官方文档,欢迎fork,https://www.gitbook.com/book/jack80342/spring-boot/details
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2495 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 05:42 PVG 13:42 LAX 22:42 JFK 01:42
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86