【问题标题】:module-info.java does not work with lombok in Java 9module-info.java 不适用于 Java 9 中的 lombok
【发布时间】:2017-11-23 16:59:00
【问题描述】:

在将项目迁移到 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;
}

在 root 的包中我有 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: 变量标题未在默认构造函数中初始化。最后编译器显示此错误 Error:(8, 23) java: constructor Story in class com.test.model.Story cannot be applied to given types;必需:未找到参数:java.lang.String 原因:实际参数列表和形式参数列表的长度不同,并且此错误:(10, 26) java:变量标题未在默认构造函数中初始化
  • 这就是问题所缺少的。您如何构建项目以及构建时遇到什么错误。也许添加堆栈跟踪。
  • @nullpointer 我尝试在 IDE 中启动它,但失败了。我提供的项目示例
  • 我不知道 lombak 是否支持 JDK 9,这里有一个很长的问题跟踪它:github.com/rzwitserloot/lombok/issues/985
  • 这可能最终成为stackoverflow.com/questions/41520511/… 的副本。尽管问题描述还保留了一些其他方面。

标签: java-9 lombok java-module module-info


【解决方案1】:

只需如下配置您的模块:

module moduleName {
    requires static lombok;
}

【讨论】:

  • 对于像我这样使用带有 Maven 和 Java 9+ 模块系统的 Lombok 的人的一些额外解释:您可能已经转到 getting started with Maven 页面,但您还需要遵循 javac 说明(这就是这个答案所解释的)。
【解决方案2】:

我已经完成了一些修复 lombok-with-JDK9 问题的工作,尤其是当您实际模块化代码时(与仅使用 JDK9 中的 javac 编译 java8 样式代码相比,这已经工作了一段时间)。

您能否在https://projectlombok.org/download-edge 上发布最新的边缘版本?谢谢!

【讨论】:

  • 现在我指出需要龙目岛;在 modul-info.java 文件中,代码已编译,但我收到下一个:“启动层 java.lang.module.ResolutionException 初始化期间发生错误:模块 lombok 未读取导出 org.mapstruct.ap 的模块。斯皮”。在 maven 编译期间,它发誓“无法在项目上执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile):编译失败”
  • projectlombok.org/edge-releases 根本不起作用。任何父亲提示如何解决龙目岛和模块的问题?
  • 我不确定您从哪里获得该 URL,但它不是正确的 URL。试试看:projectlombok.org/download-edge
【解决方案3】:

您可以在提供的范围内包含依赖项以启用构建,而无需将工件附加到库

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

【讨论】:

    猜你喜欢
    • 2018-02-14
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 2018-02-05
    • 2018-07-22
    • 2020-05-16
    • 1970-01-01
    相关资源
    最近更新 更多