Java 11和Spring Boot错误:this_class应该是module-info

3

我创建了一个简单的Spring Boot应用程序,现在想将其迁移到更新的JDK版本。我的计划是使用jlink并将其作为完整的软件包分发。但是,在使用Maven编译时,会出现以下错误:

this_class应该是module-info

如果我删除module-info文件,它可以正常工作(并按预期生成自包含的jar文件)。我是否还遗漏了其他内容?

module-info.java:

module operations {
requires static lombok;

requires commons.beanutils;
requires opencsv;
requires commons.net;
requires spring.data.mongodb;
requires spring.data.commons;
requires java.validation;
requires org.mongodb.bson;
requires spring.web;
requires spring.context;
requires spring.core;
requires spring.boot;

requires spring.beans;
requires org.apache.logging.log4j;
requires spring.context.support;
requires java.mail;
requires thymeleaf;
requires org.apache.commons.lang3;
requires com.fasterxml.jackson.core;
requires com.fasterxml.jackson.databind;
requires java.annotation;
requires org.apache.commons.collections4;
requires spring.boot.autoconfigure;
requires java.ws.rs;
requires spring.security.core;
requires spring.messaging;
requires spring.websocket;
requires java.management;
requires spring.security.web;
requires org.apache.tomcat.embed.core;
requires spring.security.config;
requires java.security.sasl;

exports com.testapp.operations;

项目结构:

src/main/java/
          ...module-info.java
          .../com/testapp/operations/(all classes)
pom.xml

你什么时候可以看到那个错误?在哪个命令执行时? - Naman
感谢您的回复,当执行mvn clean package时我已经明白了。 - user2463653
有没有可能有人将常规类重命名为module-info.class? - Alan Bateman
1个回答

0
问题似乎出在某些依赖项上,这些依赖项会阻止模块正确编译。在我的情况下,问题出在类路径(Maven 依赖项)上的 cglib 库:
    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>3.2.5</version>
    </dependency>

在我的情况下,解决方案是将库更新到最新版本3.3.0。
    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>3.3.0</version>
    </dependency>

找出有问题的库最好的方法是逐个注释掉依赖项,然后在每个操作之后运行构建。一旦代码正确编译,就能确定出有问题的库。尝试更新它,或者如果没有更新可用,则排除它。
如果排除不是一个选项,可能的解决方案是将使用该库的代码提取到单独的模块中。这个新模块可以作为自动模块编译(无需module-info.java)。

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