首页 > 解决方案 > java 11和spring boot错误:this_class应该是module-info

问题描述

我创建了一个简单的 Spring Boot 应用程序,并且正在尝试将其移至较新的 jdk 版本。我的计划是使用 jlink 并将其作为一个完整的包分发。但我收到了这个错误:

this_class 应该是模块信息

当我尝试用 maven 编译它时。如果我删除模块信息,它会起作用(并且它会按预期生成自包含的 jar)。我还缺少其他东西吗?

模块信息.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

标签: javaspring-bootmavenjava-11java-module

解决方案


问题似乎在于某些依赖项,这会阻止模块正确编译。在我的情况下,问题出cglib在类路径上的库(maven依赖):

    <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)。


推荐阅读