記錄一次WhatTheFuck經歷

Naylor發表於2024-05-27

起因

很早之前就一直在維護一個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 ,這個不喜歡用。

總結

  • 遇事不要慌,心態最重要
  • 不要怕麻煩,在不影響團隊和交付物的情況下,應該死磕
  • 平時知識的積累還是需要系統化一些,不可留在皮毛,亦或是參差不齊,應該是由淺入深,結構化,系統化。這樣在遇到問題的時候排查思路和方向更靠譜

相關文章