Java 9中module-info.java与lombok不兼容。

7

我在将我们的项目迁移到Java 9时遇到了问题。

在我更新为Java 9之后,尝试运行项目时,我遇到了编译器错误:-

Error:(6, 1) java: package javax.annotation is not visible 
(package javax.annotation is declared in module java.xml.ws.annotation, which is not in the module graph) 

但我找到了解决方法。 我添加了lombok.config文件。

然后,在向项目添加module-info.java文件后,编译器再次显示错误。

Error:(10, 26) java: variable title not initialized in the default constructor

项目示例:

我们有一个名为 Store 的实体:

@AllArgsConstructor
@Getter
public class Story {
    private final String title;
}

在根目录的包中,我有一个内容为module-info.java的文件,其内容如下:

module javanine {
    requires lombok;
}

在root的项目中,我有一个包含以下内容的 lombok.config 文件:

lombok.addJavaxGeneratedAnnotation = false
lombok.anyConstructor.suppressConstructorProperties = true

config.stopBubbling = true

在代码中的某个地方我调用它:

public static void main(String[] args) {
    Story story = new Story("how as");
    System.out.println(story.getTitle());
}

你好 @nullpointer,我甚至无法构建项目。 错误:(10,26)java: 在默认构造函数中未初始化变量标题。 最终编译器显示以下错误: 错误:(8,23)java:com.test.model.Story类中的构造函数Story无法应用于给定类型; 所需:无参数 找到:java.lang.String 原因:实际和形式参数列表的长度不同以及错误:(10,26)java: 在默认构造函数中未初始化变量标题。 - Andrey
这就是问题所在。你如何构建项目,构建时出现了什么错误。也许可以添加堆栈跟踪信息。 - Naman
@nullpointer 我尝试在IDE中启动它,但失败了。我提供的项目示例。 - Andrey
1
我不知道Lombok是否支持JDK 9,这里有一个漫长的问题跟踪:https://github.com/rzwitserloot/lombok/issues/985 - Alan Bateman
1
这可能最终会成为https://dev59.com/FVgR5IYBdhLWcg3wRLmD的重复。虽然问题描述还有其他方面需要解决。 - Naman
@Andrey:我同意nullpointer的看法,你的问题似乎完全基于Lombok。正如Alan和这个答案所述,查看Java 9支持的Lombok问题以了解如何使其工作,特别是这个评论。 - Nicolai Parlog
3个回答

11

只需按照以下方式配置您的模块:

module moduleName {
    requires static lombok;
}


1
对于像我这样使用Maven和Java 9+模块系统的人,需要一些额外的解释:您可能已经访问了Maven入门页面,但您还需要遵循javac指令(这就是本答案所解释的内容)。 - Captain Man

4

我已经开始解决lombok与JDK9相关的问题,特别是当你实际模块化你的代码时(而不只是使用来自JDK9的javac编译Java8风格代码,这已经可以运行一段时间了)。

能否在https://projectlombok.org/download-edge下载最新版本并试用?谢谢!


2
现在当我在modul-info.java文件中指定requires lombok;时,代码会被编译,但我会收到以下错误信息:"Error occurred during initialization of boot layer java.lang.module.ResolutionException: Module lombok does not read a module that exports org.mapstruct.ap.spi"。在Maven编译期间,它会报错"Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile) on project some: Compilation failure"。 - Andrey
https://projectlombok.org/edge-releases 完全不工作。有没有更多关于如何解决 Lombok 和模块的问题的提示? - tomasz-mer
我不确定你从哪里得到那个URL,但它不是正确的URL。请尝试:https://projectlombok.org/download-edge - rzwitserloot

3

你可以将依赖项包含在提供的范围内,以启用构建,而不必将构件附加到库中。

   <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-processor</artifactId>
            <version>1.3.0.Final</version>
        </dependency>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接