Lombok 的@ToString導致的Maven編譯錯誤
大多數後端元件共享一些作為 maven 依賴項使用的公共程式碼。幾天來,這個公共庫的構建因編譯錯誤而間歇性失敗——這是您幾乎從未見過的,因為編譯(與測試相反)本質上是確定性的。
構建失敗,出現以下 2 個錯誤:
17:42:56 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project distributed-lock-api: Compilation failure: 17:42:56 [ERROR] ~/jenkins/workspace/iplan-common-PL/distributed-lock-api/src/main/java/com/att/distributedlock/DistributedLockResponse.java:[10,1] package org.springframework.lang does not exist 17:42:56 [ERROR] ~/jenkins/workspace/iplan-common-PL/distributed-lock-api/src/main/java/com/att/distributedlock/DistributedLockStatusResponse.java:[12,1] package org.springframework.lang does not exist |
使用:./mvnw clean compile -pl distributed-lock-api -am。如果你不熟悉 maven: 這個命令是僅在分散式鎖 API模組(編譯失敗)及其依賴項上執行clean & compile。
這時編譯器抱怨的缺失包 ( org.springframework.lang ) 不在原始碼中,我懷疑Lombok,
因為它的註釋處理器在 java 編譯器處理檔案之前修改了原始碼。我選擇了 2 個有問題的檔案之一併開始進行更改——首先我將 Lombok 的@ToString註釋向下移動了幾行,並看到報告的錯誤行相應地移動。然後我刪除了@ToString註釋,錯誤就消失了。
在這一點上,我不太明白為什麼 Lombok 的@ToString會導致這個錯誤,但至少我有一個可行的解決方案 : 使用 IDE 生成 toString 方法並完成它。
這個問題仍然困擾著我,所以我深入研究了。我知道 Lombok 有一個配置系統,可以讓您在原始碼中新增諸如org.springframework.lang.NonNull等註釋。事實上,我們在組的主要應用程式中使用了這種配置。它需要新增帶有諸如lombok.addNullAnnotations = spring 之類的指令的lombok.config檔案。但是我搜尋了該檔案(通常放置在專案根目錄中),它不存在。但在使用Jenkins構建時lombok.config有可能在 Jenkins 工作區的父目錄之一,這時因為lombok檢視父目錄以獲取更多配置檔案lombok.config。
完全解決辦法是:在公共lib 根目錄中放置了一個lombok.config檔案,其中包含一個指令以停止lombok搜尋父目錄以獲取進一步的配置。
相關文章
- 升級Xcode10導致的編譯錯誤XCode編譯
- Lombok編譯器Maven外掛Lombok編譯Maven
- path_provider 編譯錯誤指導IDE編譯
- [譯] RxJS: 避免因濫用 switchMap 而導致錯誤JS
- 又見想當然導致的誤譯
- flutter庫【path_provider】編譯錯誤指導FlutterIDE編譯
- ipvs編譯錯誤編譯
- Maven建立專案遇到導包錯誤:Maven
- Maven編譯elasticsearch-analysis-ik報錯Maven編譯Elasticsearch
- 【爬坑】.Net編譯環境導致的問題編譯
- opencv 編譯常見錯誤OpenCV編譯
- Ubuntu上的pycrypto給出了編譯器錯誤Ubuntu編譯
- Docker環境編譯時的錯誤記錄Docker編譯
- 12.2.0.1bug導致的Failed to register in OCRLOCAL group.錯誤AI
- IDEA報錯java: 編譯失敗: 內部 java 編譯器錯誤IdeaJava編譯
- lombok編譯遇到“找不到符號的問題”Lombok編譯符號
- C++編譯錯誤的正確查詢方式C++編譯
- PHP編譯安裝時常見錯誤解決辦法,php編譯常見錯誤PHP編譯
- PostgreSQL DBA(29) - Backup&Recovery#2(日期格式導致的錯誤)SQL
- Session物件改變請求頭值導致的401錯誤Session物件
- 動態建立 @ViewChild 導致執行時錯誤的原因分析View
- 記錄一次homestead意外關閉導致的錯誤
- maven 混合編譯 java/scala 程式碼報錯(qbit)Maven編譯Java
- AndroidStudio之NDK常見編譯錯誤Android編譯
- Include檔案易犯編譯錯誤編譯
- Idea編譯錯誤解決辦法Idea編譯
- Apache Solr錯誤預設配置導致的RCE(CVE-2019-12409)ApacheSolr
- laravel Route RESTful 因路由先後順序導致的解析錯誤LaravelREST路由
- ORA-04031錯誤導致當機案例分析
- Android編譯通過,執行編譯錯誤問題總結Android編譯
- stm8系列--載入別人的工程編譯錯誤編譯
- xcode6編譯錯誤,提示Expected a typeXCode編譯
- 【譯】Gradle 的依賴關係處理不當,可能導致你編譯異常Gradle編譯
- vim 編輯報錯導致無法正常退出和編輯
- 解決 PBootCMS 中因資料庫名稱錯誤導致的“執行 SQL 發生錯誤!錯誤:no such table: ay_config”問題boot資料庫SQL
- PHP編譯configure時常見錯誤,和PHP7.1.4 編譯安裝PHP編譯
- 利用Windbg分析Magicodes.IE一次錯誤編寫導致記憶體劇增記憶體
- 精讀《手寫 SQL 編譯器 - 錯誤提示》SQL編譯