• 记录一次WhatTheFuck经历


    起因

    很早之前就一直在维护一个git仓库,平时调研什么组件就会在里面新建一个springboot的工程用来编写示例代码。

    最一开始使用的是SpringInitializr,后来网站更新之后,只能生成JDK17+的工程,WhatTheFuck?近期刚从8切换到11.

    于是弃用并改用 StartAliyun

    今天调研ClickHouse,生成的工程pom-build是这个样子的 :

    
    
     <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.pluginsgroupId>
                    <artifactId>maven-compiler-pluginartifactId>
                    <version>3.8.1version>
                    <configuration>
                        <source>11source>
                        <target>11target>
                        <encoding>UTF-8encoding>
                    configuration>
                plugin>
                <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                    <version>${spring-boot.version}version>
                    <configuration>
                        <mainClass>com.ramble.clickhouse.ClickhouseApplicationmainClass>
                        <skip>trueskip>
                    configuration>
                    <executions>
                        <execution>
                            <id>repackageid>
                            <goals>
                                <goal>repackagegoal>
                            goals>
                        execution>
                    executions>
                plugin>
            plugins>
        build>
    
    
    
    

    然后发现打的jar只有7KB,WhatTheFuck!我需要它能生成可以正常运行的jar。

    后面就是围绕怎么让maven输出jar展开了。

    使用Spring-boot-maven-plugin打包

    思虑片刻,想起来了,之前遇到过这样的问题,原因是用maven-compiler-plugin打包就不行,需要用Spring-boot-maven-plugin,于是删除了 maven-compiler-plugin 所在的plugin节点。

    新问题出现了:

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project clickhouse: Compilation failure: Compilation failure: 
    [ERROR] 不再支持源选项 5。请使用 6 或更高版本。
    [ERROR] 不再支持目标选项 1.5。请使用 1.6 或更高版本。
    
    

    WhatTheFuck!!!怎么还1.5了,那里冒出来的,明明在StartAliyun选中的是11。

    解决1.5问题

    可以肯定的是打包的时候找到的JDK版本是1.5,而预期的是11,预期和实际不一致,所以是设置的问题。

    按照经验来说这时候该检查 IDEA SETTINGSProjectStructure了,检查的结果是这两个位置确实是1.5。

    好消息是报错的直接原因找到了,坏消息是根本原因还没有找到。

    在看一下报错log,发现了这一句话:

    Failed to execute goal......

    也就是说它找的是全局级别的设置,而不是我项目中设置的,那这个全局是在哪里呢?难道是maven的settings.xml?

    同时将去掉的maven-compiler-plugin恢复回来package又正常了。这里基本可以确认 goal 就是指 Maven 的settings.xml了, 因为maven-compiler-plugin中设置了JDK。

    那问题太似乎简单了,在settings.xml中设置一下不就行了,代码如下:

    
    <profile>
        <properties>
            <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
            <maven.compiler.source>11maven.compiler.source>  
            <maven.compiler.target>11maven.compiler.target>  
        properties>
    profile>
    
    
    

    满心欢喜的试一波,哎哟,package不报错了。

    然而,生成的jar还是7KB。。。。。。 WhatTheFuck.....

    先稳一波,虽然通过设置全局解决了,但是也仅解决了当下的问题,万一明天再搞个JDK22的项目,不还是会预期和实际不一致???

    既然全局的settings.xml中设置jdk生效,那工程中设置一样生效,因为依稀记得好好好几年前撸MAVEN的时候工程中的配置会覆盖全局的,于是在pom中的properties下添加上述配置,果然好使。

    skip

    后面的故事就是:

    • 反复观看package-log
    • 反复检验生成的代码
    • baidu&google
    • chatGPT
    • ......

    最终,当我把这个工程的pom和其他正常的工程pom做对比的时候,发现多了一个skip=true的配置

    
    <build>
        <plugins>
            <plugin>
                ......
                <configuration>
                    ......
                    <skip>trueskip>
                configuration>
               ......
            plugin>
        plugins>
    build>
    
    
    

    skip什么意思?跳过。

    你要跳过什么?反正你是跳过了!跳过了就7KB了!!!

    精准搜索了一下,这里的跳过是:跳过打包

    WhatTheFuck......

    注释这个之后,问题确实解决了,好了,天晴了,雨停了......

    可是,为什么StartAliyun默认要Skip=true呢?着实想不明白,不行我还得找找其他的 Initializr ,这个不喜欢用。

    总结

    • 遇事不要慌,心态最重要
    • 不要怕麻烦,在不影响团队和交付物的情况下,应该死磕
    • 平时知识的积累还是需要系统化一些,不可留在皮毛,亦或是参差不齐,应该是由浅入深,结构化,系统化。这样在遇到问题的时候排查思路和方向更靠谱
  • 相关阅读:
    深度学习之基于Pytorch服装图像分类识别系统
    odoo 开发入门教程系列-准备一些操作(Action)?
    【若依vue框架学习】1.获取验证码/登录提交loginFrom获得认证token
    IPWorks Encrypt Delphi强加密的一整套组件
    LV.12 D18 中断处理 学习笔记
    风尚云网学习-前端页面敏感数据脱敏星号展示
    Prompt之美:如何设计提示词让大模型变“聪明”
    TCP_IP协议
    SpringCloud之RocketMQ3
    SA实战 ·《SpringCloud Alibaba实战》第03章-微服务介绍
  • 原文地址:https://www.cnblogs.com/Naylor/p/18215001