java - Java 10 上的 maven lombok 插件:在 maven 中找不到注释
问题描述
我知道 IDE 不理解 lombok 的问题。但是现在,在一个新项目中,我遇到了相反的问题:Idea 确实理解它,但 maven 不理解。
当我将 lombok 插件添加到 maven 并运行全新安装时,lombok 插件无法转换类,因为它声称包 lombok 不存在。
这是我的 pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>henkk</artifactId>
<groupId>de.newcron</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>henkk-chat-api</artifactId>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.18.0.0</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>delombok</goal>
</goals>
<configuration>
<addOutputDirectory>false</addOutputDirectory>
<sourceDirectory>src/main/java</sourceDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
(来自父 pom 的注释:语言级别是 java 10,源编码 utf-8,我在多模块构建中使用拼图模块)
我得到的错误是这样的。我尝试将 org.projectlombok:lombik 的范围设置为编译或提供,结果没有任何差异
如果有人知道如何解决这个问题,我将非常感激?
[INFO] ---------------------< de.newcron:henkk-chat-api >----------------------
[INFO] Building henkk-chat-api 1.0.0-SNAPSHOT [2/4]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ henkk-chat-api ---
[INFO]
[INFO] --- lombok-maven-plugin:1.18.0.0:delombok (default) @ henkk-chat-api ---
[WARNING] Unable to detect tools.jar; java.home is /usr/lib/jvm/java-11-openjdk-amd64
/home/matthias/dev/henkk/henkk-chat-api/src/main/java/module-info.java:3: error: module not found: lombok
requires lombok;
^
/home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/MessageReceivedEvent.java:4: error: package lombok does not exist
import lombok.AllArgsConstructor;
^
/home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/MessageReceivedEvent.java:5: error: package lombok does not exist
import lombok.ToString;
^
/home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/MessageReceivedEvent.java:7: error: cannot find symbol
@AllArgsConstructor
^
symbol: class AllArgsConstructor
/home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/MessageReceivedEvent.java:8: error: cannot find symbol
@ToString
^
symbol: class ToString
/home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/simple/SimpleChatIdentity.java:6: error: cannot find symbol
@AllArgsConstructor
^
symbol: class AllArgsConstructor
/home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/simple/SimpleChatIdentity.java:7: error: cannot find symbol
@EqualsAndHashCode
^
symbol: class EqualsAndHashCode
/home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/simple/SimpleChatIdentity.java:8: error: cannot find symbol
@ToString
^
symbol: class ToString
/home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/simple/SimpleChatIdentity.java:4: error: package lombok does not exist
import lombok.*;
^
/home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/simple/SimpleChatMessage.java:5: error: package lombok does not exist
import lombok.AllArgsConstructor;
^
/home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/simple/SimpleChatMessage.java:6: error: package lombok does not exist
import lombok.EqualsAndHashCode;
^
/home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/simple/SimpleChatMessage.java:7: error: package lombok does not exist
import lombok.NonNull;
^
/home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/simple/SimpleChatMessage.java:8: error: package lombok does not exist
import lombok.ToString;
^
/home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/simple/SimpleChatMessage.java:10: error: cannot find symbol
@AllArgsConstructor
^
symbol: class AllArgsConstructor
/home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/simple/SimpleChatMessage.java:11: error: cannot find symbol
@EqualsAndHashCode
^
symbol: class EqualsAndHashCode
/home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/simple/SimpleChatMessage.java:12: error: cannot find symbol
@ToString
^
symbol: class ToString
/home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/simple/SimpleChatIdentity.java:10: error: cannot find symbol
@NonNull
^
symbol: class NonNull
location: class SimpleChatIdentity
/home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/simple/SimpleChatMessage.java:14: error: cannot find symbol
@NonNull
^
symbol: class NonNull
location: class SimpleChatMessage
/home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/simple/SimpleChatMessage.java:16: error: cannot find symbol
@NonNull
^
symbol: class NonNull
location: class SimpleChatMessage
[INFO] Delombok complete.
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ henkk-chat-api ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ henkk-chat-api ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 8 source files to /home/matthias/dev/henkk/henkk-chat-api/target/classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/MessageReceivedEvent.java:[10,32] variable sender not initialized in the default constructor
[ERROR] /home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/MessageReceivedEvent.java:[11,31] variable message not initialized in the default constructor
[INFO] 2 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] henkk 1.0.0-SNAPSHOT ............................... SUCCESS [ 0.991 s]
[INFO] henkk-chat-api ..................................... FAILURE [ 1.135 s]
[INFO] henkk-application .................................. SKIPPED
[INFO] henkk-chat-stdin 1.0.0-SNAPSHOT .................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.277 s
[INFO] Finished at: 2018-08-29T18:12:12+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project henkk-chat-api: Compilation failure: Compilation failure:
[ERROR] /home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/MessageReceivedEvent.java:[10,32] variable sender not initialized in the default constructor
[ERROR] /home/matthias/dev/henkk/henkk-chat-api/src/main/java/de/newcron/henkk/chat/api/MessageReceivedEvent.java:[11,31] variable message not initialized in the default constructor
[ERROR] -> [Help 1]
解决方案
将配置更新为以下内容可能有助于解决问题:-
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.18.0.0</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>delombok</goal>
</goals>
<configuration>
<encoding>UTF-8</encoding>
<addOutputDirectory>false</addOutputDirectory>
<sourceDirectory>src/main/java</sourceDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
我试了一下,使用该命令生成的目标文件mvn clean install
具有如下的delomboked代码:-
虽然在生成之后,我在 IDE 中看到一条消息,上面写着“module-info.java 已经存在于模块中”。
推荐阅读
- python - 使用 json.loads (python) 解析 csv 中的 Json 列(分号)
- android - Android 创建 UI 覆盖元素以显示离线网络状态
- components - Next.js SPA:保留页眉/导航和页脚内容,next 路由器的动态内容问题
- r - 如何在 quanteda 令牌对象中找到令牌的位置?
- c# - bot框架c#下载文件团队不工作
- node.js - Nightwatchjs 测试在 `before` 钩子完成之前运行
- cassandra - cassandra 不适合更新?
- c - 如何在 C 中打印 UTF-8 字符串
- python - Minimalmodbus 响应出现不当,不会更新
- mongodb - 如何在 mongo db 中获得无限评论和回复循环