maven 多模块 相互依赖 打jar包流程及注意事项

9 篇文章 0 订阅
1 篇文章 0 订阅
  1. 创建maven多模块项目,编写代码,添加子模块相互依赖;
  2. 举例来说,父项目为cloud-maven-learn,子项目为learn-server(springcloud 的服务治理和服务发现项目,集成eureka),learn-product(springcloud业务模块项目,产品项目,集成ribbon和feign),learn-user(springcloud业务模块项目,用户项目,集成ribbon和feign);
  3. 可以使用如下代码添加子模块之间的依赖:
<dependency>
    <groupId>com.jianxin</groupId>
    <artifactId>learn-user</artifactId>
    <version>${project.version}</version>
</dependency>
  1. 打包,首先打包learn-server项目,因为此项目为服务治理项目,其他项目打包时会TESTS,测试运行,会向该项目注册;
  2. 打包时,learn-server的pom中添加如下build依赖:
<packaging>jar</packaging>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
  1. maven窗口—clean—package,即可在target中找到打好的jar包。可以在cmd窗口中,使用java -jar learn-server.jar来运行项目。
  2. 然后打learn-product和learn-user项目为可运行的jar包,因为learn-product依赖learn-user项目,所以在打learn-product包之前,需要先将learn-user项目安装到本地maven仓库中。具体步骤为:
    7.1 在父项目cloud-maven-learn中clean,清理所有项目中的编译文件;
    7.2 在父项目cloud-maven-learn的pom中添加如下打包插件,并通过modules将子项目组织起来:
<modules>
    <!-- 服务发现和治理模块 -->
    <module>learn-server</module>
    <!-- 产品服务模块 -->
    <module>learn-product</module>
    <!-- 用户服务模块 -->
    <module>learn-user</module>
</modules>
    
<build>
    <plugins>
        <!-- maven 编译插件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven.compiler.plugin.version}</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
            </configuration>
        </plugin>
    </plugins>
</build>

7.3 注销learn-user项目中spring-boot-maven-plugin打包插件:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

7.4 点击learn-user的maven窗口的install,安装成功即可,并查看本地maven仓库是否有了learn-user相应的jar包;
7.5 如果learn-user安装install正常,点击learn-product项目maven窗口的package,进行打包,注意此时learn-product项目的pom中需要有spring-boot-maven-plugin的打包插件,此时learn-product项目打包成功,其jar包内部含有learn-user的jar包依赖。
8. 如果需要将learn-user项目打包为可执行jar包,需要在learn-user项目的pom中添加spring-boot-maven-plugin的插件依赖,然后clean—package,即可获得可运行的jar包。如果lean-user依赖于其他项目(如learn-product),在lean-user打包时,需要按第7点,先把被依赖项目(如learn-product)的spring-boot-maven-plugin的插件进行注销,install到本地仓库,lean-user再去package才可以。
9. 总结一下:
9.1 maven多模块项目打包,需要在父项目中添加:

<build>
    <plugins>
        <!-- maven 编译插件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven.compiler.plugin.version}</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
            </configuration>
        </plugin>
    </plugins>
</build> 

9.2 子项目如果没有依赖,添加如下插件,进行clean—package:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

9.3 子项目之间有依赖,需要先把被依赖项目注销掉spring-boot-maven-plugin,install安装到本地maven仓库,然后依赖的项目进行clean —package;被依赖项目本身打可运行jar包,需要添加spring-boot-maven-plugin插件才可以。
10. 项目示例见:https://gitee.com/manongfaner/cloud-maven-learn
2021.10.09 续
11. 如果报错为 IllegalState Found multiple @SpringBoot… 类似信息,理解为,依赖模块中,有多个@SpringbootApplication ,解决方式有:可以把@SpringBootTest 注解类注销掉,再重新install。
12. 如果报错为:Could not find artifact com.xxx.xxx:父项目名:pom:1.0-SNAPSHOT ,也就是没有发现父模块的jar包,可以在右侧maven窗口—》父模块项目—》Lifecycle—>clean---->install ,也就是安装父模块。
13. 安装父模块过程中如果报错为,无法找到符号,无法找到包com.xxx.xxx.service等类似的报错,在使用了feign的前提下,考虑feign对打包的影响,可以将feign依赖模块中的service接口类,转义到其他模块中,如果common模块(common模块依赖feign即可)。
14. 再次clean—》install,即可成功安装父模块 (父项目名称)。
15. 安装成功父模块后,再重新尝试安装子模块,如gateway模块,即可,安装过程中,参考以上第7点添加maven编译插件和注销相关插件。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值