qq_16237125 2021-11-12 15:48 采纳率: 60%
浏览 85
已结题

maven 项目打包成可执行jar包的时候 报错 cannot find symbol

MAVEN 工程A 依赖 MAVEN 工程B

工程B 已经install在本地Maven repo 中了,eclipse 没有报错,是能够找到工程B的class 文件,但是打包的时候就报错
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project service-provider: Compilation failure: Compilation failure:
[ERROR] /xxxxx/oservice/service-provider/src/main/java/com/xxx/service/provider/SchoolServiceImpl.java:[15,17] cannot find symbol
[ERROR] symbol: class SchoolMapper
[ERROR] location: class zzz.xxx.service.provider.SchoolServiceImpl
[ERROR] /services/microservice/xxx-service-provider/src/main/java/com/xxx/service/provider/SchoolServiceImpl.java:[18,16] cannot find symbol

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <createDependencyReducedPom>false</createDependencyReducedPom>
                </configuration>
                
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.greatschools.service.provider.App</mainClass>
                                </transformer>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/spring.handlers</resource>
                                </transformer>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/spring.schemas</resource>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

  • 写回答

3条回答 默认 最新

  • qq_16237125 2021-11-12 20:55
    关注

    原因分析:
    spring-boot-maven-plugin打包出来的jar是不可依赖的

    我们现在整合后的maven项目有一个parent工程,打包类型为pom,下面多个spring-boot工程作为它的module,分别为base和moduleA,moduleB。假如moduleA依赖于base。如果你在base中使用了spring-boot-maven-plugin的默认配置build,或者在parent工程中使用spring-boot-maven-plugin的默认配置build。那么在clean package的时候会发现moduleA找不到base中的类。原因就是默认打包出来的jar是不可依赖的。

    解决方案:

        官方告诉我们,你如果不想移代码,好吧,我这样来给你解决,给你打两个jar包,一个用来直接执行,一个用来依赖。于是,你需要指定一个属性classifier,这个属性为可执行jar包的名字后缀。比如我设置<classifier>exec</classifier>,原项目名为Vehicle-business。那么会得到两个jar:Vehicle-business.jar和Vehicle-bussiness-exec.jar
    
         官方文档位置:84.5 Use a Spring Boot application as a dependency
    
         总结:回到聚合maven上,如果你在parent工程中使用了spring-boot-maven-plugin作为builder,那么你的依赖module一定要用解决方案二来设置。否则你不在parent工程中用spring-boot-maven-plugin作为builder,而在需要打包的module上使用。
    

    一般parent工程的maven插件配置如下:

    org.springframework.boot spring-boot-maven-plugin <source />1.8 1.8 repackage 被依赖的maven子模块的maven插件配置如下(其余maven子模块就不需要配置): org.springframework.boot spring-boot-maven-plugin exec

    ————————————————
    版权声明:本文为CSDN博主「DamonREN」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/DamonREN/article/details/85091900

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月20日
  • 已采纳回答 11月12日
  • 修改了问题 11月12日
  • 创建了问题 11月12日

悬赏问题

  • ¥15 如何删除这个虚拟音频
  • ¥50 hyper默认的default switch
  • ¥15 网站打不开,提示502 Bad Gateway
  • ¥20 基于MATLAB的绝热压缩空气储能系统代码咨询
  • ¥15 R语言建立随机森林模型出现的问题
  • ¥15 中级微观经济学,生产可能性边界问题
  • ¥15 TCP传输时不同网卡传输用时差异过大
  • ¥15 请各位看看我写的属于什么算法,或者有更正确的写法?
  • ¥15 html5 qrcode 扫描器
  • ¥15 爬取网页信息并保存需要完整代码