起因

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

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

于是弃用并改用 StartAliyun

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



 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.ramble.clickhouse.ClickhouseApplication</mainClass>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </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-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>  
        <maven.compiler.target>11</maven.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>true</skip>
            </configuration>
           ......
        </plugin>
    </plugins>
</build>

skip什么意思?跳过。

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

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

WhatTheFuck......

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

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

总结

  • 遇事不要慌,心态最重要
  • 不要怕麻烦,在不影响团队和交付物的情况下,应该死磕
  • 平时知识的积累还是需要系统化一些,不可留在皮毛,亦或是参差不齐,应该是由浅入深,结构化,系统化。这样在遇到问题的时候排查思路和方向更靠谱

记录一次WhatTheFuck经历的更多相关文章

  1. 【记录一次坑经历】axios使用x-www-form-urlencoded 服务器报400(错误的请求。 )(后端.Net MVC5 WebApi OAuth,前端Electron-Vue)

    首先放上源码 electron-vue axios 注册 import Vue from 'vue' import axios from 'axios'   axios.defaults.baseUR ...

  2. 记录 SpringBoot 踩坑经历

    1.spring-boot-starter-web 作用 <dependency> <groupId>org.springframework.boot</groupId& ...

  3. C/C++程序员 面试经历总结

    最近在找工作,遇到了一些面试题,很惭愧的是很多都没答上来. 现在把一些问题总结一下,算是记录一下面试的经历吧.以后有空简单地回答一下, 同时也欢迎各位同仁解答,共同学习一下吧!   一.嵌入式C语言面 ...

  4. Linux 2.6内核中新的锁机制--RCU

    转自:http://www.ibm.com/developerworks/cn/linux/l-rcu/ 一. 引言 众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁 ...

  5. 应用程序框架实战十六:DDD分层架构之值对象(介绍篇)

    前面介绍了DDD分层架构的实体,并完成了实体层超类型的开发,同时提供了验证方面的支持.本篇将介绍另一个重要的构造块——值对象,它是聚合中的主要成分. 如果说你已经在使用DDD分层架构,但你却从来没有使 ...

  6. 漫谈JVM

    背景介绍 JVM已经是Java开发的必备技能了,JVM相当于Java的操作系统. JVM,java virtual machine, 即Java虚拟机,是运行java class文件的程序. Java ...

  7. QTP安装连接Oracle数据库

    之前学过一段时间QTP,之后便没用这个笨重的东东,为了以防忘记,再次记录下曾经连接数据库经历了几天才搞好的事情(虽然这个工具可能已经过时,但是国企一般都会使用的) 前提条件: 你已经安装好了QTP / ...

  8. iptables rule

    和H3C中的acl很像,或者就是一会事,这就是不知道底层的缺陷,形式一变,所有的积累都浮云了 参考准确的说copy from http://www.ibm.com/developerworks/cn/ ...

  9. CentOS下 pycharm开发环境搭建之无穷无尽的问题

    在上一篇的环境搭建中,表面上以为已经升级好python,安装好pycharm,并且可以用上了django框架,谁知道,谁知道,又是一断被虐的经历,我都要快恼羞成怒了. 在些记录一下我的经历. 1.首先 ...

  10. Volley(一 )—— 框架简介

    一.引言 虽然网上已经有很多大神.高手都写过了类似的帖子,但作为新人,必须要走模仿的道路,再考虑超越,因此学习大神的笔记,记录自己的理解,是一个菜鸟走向成功的必经之路啊.如签名所言,记录自己摸爬滚打的 ...

随机推荐

  1. redis 简单整理——持久化之AOF[二十]

    前言 简单介绍一下AOF. 正文 AOF(append only file)持久化:以独立日志的方式记录每次写命令, 重启时再重新执行AOF文件中的命令达到恢复数据的目的. AOF的主要作用 是解决了 ...

  2. 面向切面编程AOP[二](java @EnableAspectJAutoProxy 代码原理)

    前言 @EnableAspectJAutoProxy 是启动aop功能的意思,那么里面是什么呢? 正文 @Target({ElementType.TYPE}) @Retention(Retention ...

  3. numpy函数向量化,np.vectorize

    import numpy as np import time def myfunc(a, b): if a>b: return a-b else: return a+b vfunc = np.v ...

  4. 【Oracle】lpad与rpad函数,从左边对字符串使用指定的字符进行填充将1变成000001

    [Oracle]lpad&rpad函数,从左边对字符串使用指定的字符进行填充将1变成000001 lpad与rpad函数 顾名思义,lpad是从左边开始进行填充,rpad是从右边开始进行填充 ...

  5. dubbogo 3.0:牵手 gRPC 走向云原生时代

    作者 | 李志信  于雨来源|阿里巴巴云原生公众号 自从 2011 年 Dubbo 开源之后,被大量中小公司采用,一直是国内最受欢迎的 RPC 框架.2014 年,由于阿里内部组织架构调整,Dubbo ...

  6. 3月2日,阿里云开源 PolarDB 企业级架构将迎来重磅发布

    简介:2022年3月2日,开源 PolarDB 企业级架构将迎来重磅发布!本次发布会将首次公开开源 PolarDB 的总体结构设计和企业级特性,对 PolarDB for PostgreSQL 的存储 ...

  7. Quick BI的可视分析之路

    简介: Quick BI是专为云上用户量身打造的智能数据分析和可视化BI产品,帮助企业快速完成从传统的数据分析到数据云化+分析云化的转变,将企业的业务数据产出后以最快的速度被推送到各组织侧消费使用.本 ...

  8. 阿里云重磅发布业务中台产品 BizWorks,中台发展进入下一个阶段

    ​简介: 业务中台产品BizWorks重磅发布,这可以看作是阿里云在 "做厚中台" 战略上继 "云钉一体"之后的又一个新动作! 10 月 19 日,2021 云 ...

  9. KubeDL 加入 CNCF Sandbox,加速 AI 产业云原生化

    ​简介: 2021 年 6 月 23 日,云原生计算基金会(CNCF)宣布通过全球 TOC 投票接纳 KubeDL 成为 CNCF Sandbox 项目.KubeDL 是阿里开源的基于 Kuberne ...

  10. [GPT] 数据分析工具可以使用机器学习技术来预测未来趋势和提供数据可视化?

      数据分析工具使用机器学习技术来预测未来趋势和提供数据可视化是靠谱的. 机器学习算法可以通过对历史数据的学习来发现数据中的模式和趋势,并利用这些模式和趋势来预测未来的趋势.这种方法已经被广泛应用于许 ...