找不到模块:如何使用模块编译 JDK 10 Eclipse Maven 项目?

2023-12-27

以下是我的 pom.xml 的主要部分:

特性:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.build.targetEncoding>UTF-8</project.build.targetEncoding>
    <jdk.release>10</jdk.release>
    <jdk.vendor>oracle</jdk.vendor>
    <maven.compiler.source>1.10</maven.compiler.source>
    <maven.compiler.target>1.10</maven.compiler.target>

    <dependency.asm.version>6.2</dependency.asm.version>
    <dependency.log4j2.version>2.11.0</dependency.log4j2.version>

    <plugin.maven-toolchains.version>1.1</plugin.maven-toolchains.version>
    <plugin.maven-compiler.version>3.7.0</plugin.maven-compiler.version>    
    <plugin.maven-dependency.version>3.1.1</plugin.maven-dependency.version>
    <plugin.maven-jar.version>3.1.0</plugin.maven-jar.version>
</properties>

依赖关系:

<dependencies>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${dependency.log4j2.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${dependency.log4j2.version}</version>
    </dependency>
</dependencies>

plugins:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-toolchains-plugin</artifactId>
        <version>${plugin.maven-toolchains.version}</version>
        <executions>
            <execution>
                <goals>
                    <goal>toolchain</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <toolchains>
                <jdk>
                    <version>${jdk.release}</version>
                    <vendor>${jdk.vendor}</vendor>
                </jdk>
            </toolchains>
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${plugin.maven-compiler.version}</version>
        <configuration>
            <source>${maven.compiler.source}</source>
            <target>${maven.compiler.target}</target>
            <release>${jdk.release}</release>
        </configuration>
        <dependencies>
            <dependency>
                <groupId>org.ow2.asm</groupId>
                <artifactId>asm</artifactId>
                <version>${dependency.asm.version}</version>
            </dependency>
        </dependencies>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>${plugin.maven-dependency.version}</version>
        <executions>
            <execution>
                <id>copy-dependencies</id>
                <phase>package</phase>
                <goals>
                    <goal>copy-dependencies</goal>
                </goals>
                <configuration>
                    <outputDirectory>${project.basedir}/dist/lib/</outputDirectory>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>${plugin.maven-jar.version}</version>
        <configuration>
            <archive>
                <manifest>
                    <addClasspath>true</addClasspath>
                    <classpathPrefix>./lib/</classpathPrefix>
                    <mainClass>com.mycompany.tbe.myproject.Application</mainClass>
                    <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                    <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                </manifest>
            </archive>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
            <outputDirectory>${project.basedir}/dist</outputDirectory>
        </configuration>
    </plugin>       
</plugins>

项目结构是:

project
+
|-- src
|   +
|   |-- main
|   |   +
|   |   |-- java
|   |   |   +
|   |   |   |-- com
|   |   |   |   +
|   |   |   |   |-- mycompany
|   |   |   |   |   +
|   |   |   |   |   |-- tbe
|   |   |   |   |   |   +
|   |   |   |   |   |   |-- myproject
|   |   |   |-- module-info.java
|   |   |-- resources    
|-- pom.xml

The module-info.java包含:

/**
 * @author Tapas Bose
 */
module project {
    exports com.mycompany.tbe.myproject;

    requires log4j.api;
}

当我执行时:mvn clean package它抛出错误,告诉:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project <my-project>: Compilation failure
[ERROR] <path-to-my-project>/src/main/java/module-info.java:[7,15] error: module not found: log4j.api

我也尝试过提供--add-modules论证进入maven-compiler-plugin通过指定配置:

<configuration>
    <compilerArgs>
        <arg>--add-modules</arg>
        <arg>log4j.api</arg>
    </compilerArgs>
</configuration>

但这也不起作用。

几点:

如果我删除module-info.java有用。

The module-info.java由 Eclipse 生成。

The java describe-module揭示了以下内容:

$ jar --file=log4j-api-2.11.0.jar --describe-module
releases: 9

No root module descriptor, specify --release

$ jar --file=log4j-api-2.11.0.jar --describe-module --release 9
releases: 9

org.apache.logging.log4j jar:file:///<path-to-maven-local-repository>/org/apache/logging/log4j/log4j-api/2.11.0/log4j-api-2.11.0.jar/!META-INF/versions/9/module-info.class
exports org.apache.logging.log4j
exports org.apache.logging.log4j.message
exports org.apache.logging.log4j.simple
exports org.apache.logging.log4j.spi
exports org.apache.logging.log4j.status
exports org.apache.logging.log4j.util
requires java.base mandated
uses org.apache.logging.log4j.message.ThreadDumpMessage$ThreadInfoFactory
uses org.apache.logging.log4j.spi.Provider
uses org.apache.logging.log4j.util.PropertySource

因此如果改变module-info.java as:

/**
 * @author Tapas Bose
 */
module project {
    exports com.mycompany.tbe.myproject;

    requires org.apache.logging.log4j;
}

Eclipse Java 编辑器开始在文件中显示编译错误module-info.java:

同样在使用 log4j-api 包的其他 Java 类中:

But mvn clean package在这种情况下可以使用警告消息:

[WARNING] ********************************************************************************************************************
[WARNING] * Required filename-based automodules detected. Please don't publish this project to a public artifact repository! *
[WARNING] ********************************************************************************************************************

我在用着:

  • Eclipse Oxygen.3a 版本 (4.7.3a)
  • 甲骨文JDK 10
  • 阿帕奇Maven 3.5.2

在另一个SO线程中:Spring Boot 模块未找到错误 https://stackoverflow.com/questions/50196952/spring-boot-module-not-found-error它被要求清理 Maven 的本地存储库。我也尝试使用做同样的事情mvn clean dependency:purge-local-repository package,但没有运气。


问题是 log4j-api-2.11.0.jar 是一个多版本 jar,其 module-info.class 位于 META-INF/versions/9/module-info.class 中,eclipse 尚不支持,请参阅https://bugs.eclipse.org/bugs/show_bug.cgi?id=534624 https://bugs.eclipse.org/bugs/show_bug.cgi?id=534624

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

找不到模块:如何使用模块编译 JDK 10 Eclipse Maven 项目? 的相关文章

  • 如果在 addHeader 之前写入正文,HttpServletResponse 会丢失标头吗?

    环境 Java HotSpot TM 64 位服务器 VM 内部版本 16 3 b01 混合模式 tomcat6 当我使用HttpServlet发送html页面时 如下所示 resp getWriter append body body i
  • 像 Google Play 商店一样在垂直 RecyclerView 中动态不同图像水平 RecyclerView

    我一直在关注这个教程 http android pratap blogspot co za 2015 12 horizo ntal recyclerview in vertical html http android pratap blog
  • Android:TelephonyManager 类

    我不明白为什么 API 文档中这么写TelephonyManager类是public 但是当我尝试创建一个实例时 它说它不是公共类 并且无法从包中访问 我看到它也说使用Context getSystemService Context TEL
  • Java - 调整图像大小而不损失质量

    我有 10 000 张照片需要调整大小 因此我有一个 Java 程序来执行此操作 不幸的是 图像的质量损失很大 而且我无法访问未压缩的图像 import java awt Graphics import java awt AlphaComp
  • 在 libgdx 中渲染 box2d

    我有一个使用 FitViewport 的大小为 800x480 的游戏世界 并且最初使用像素渲染 box2d 实体 固定装置 因此所有物理效果都显得浮动且缓慢 查看文档后 我意识到 box2d 使用度量单位 因此我将 box2d 位置和大小
  • 如何在 Java 中使用 HTML 解析器和 Apache Tika 来提取所有 HTML 标签?

    我下载了 tika core 和 tika parser 库 但找不到将 HTML 文档解析为字符串的示例代码 我必须删除网页源的所有 html 标签 我能做些什么 如何使用 Apache Tika 进行编码 您想要 html 文件的纯文本
  • 如何在 QueryDSL 中选择文字

    我目前正在开发一个使用 queryDSL 和 hibernate 的项目 其中它需要一个选择文字 按照发布的示例here https stackoverflow com questions 18691317 querydsl how to
  • java.lang.ClassNotFoundException: org.jboss.logging.Logger

    我有一个奇怪的问题 我有一个JMS https en wiktionary org wiki JMS客户端应用程序和MDB https en wikipedia org wiki Enterprise JavaBeans Message d
  • 将 Maven 控制台与 m2eclipse 一起使用

    Maven 新手在这里 有没有办法在 Eclipse 中打开控制台并在 M2Eclipse 插件上执行 Maven 命令 这是一个非常好的插件 但我环顾四周 没有找到我想要的一些功能 谢谢 如果你想运行特定的maven插件 你可以这样做 g
  • Jersey 和 Spring 中的全局异常处理?

    我正在使用 Jersey 和 Spring 3 2 以及 Open CMIS 开发 RESTful Web 服务 我没有使用 Spring 的 MVC 模式 它只是 Spring IOC 和 Jersey SpringServlet 控制器
  • IntelliJ - 无效源版本:17

    我已经在 IntelliJ 中使用 Gradle 创建了一个使用 Java 17 的新 Java 项目 运行我的应用程序时出现错误Cause error invalid source release 17 我的设置 我已经安装了openjd
  • SQlite 获取最近的位置(带有纬度和经度)

    我的 SQLite 数据库中存储有纬度和经度的数据 我想获取距我输入的参数最近的位置 例如我当前的位置 纬度 经度等 我知道这在 MySQL 中是可能的 并且我已经做了相当多的研究 SQLite 需要一个自定义外部函数来实现半正弦公式 计算
  • gwt 文本框添加更改处理程序

    我有一个从设计师那里收到的文本框 但是我在 GWT 中编写了操作 问题是文本框为空 但是当通过按下按钮用值填充文本框时 将显示警报框 通知值已更改 但没有成功 帮助我 TextBox zip1 null function onModuleL
  • WLS12c 和 OEPE 的部署错误 Weld-001408

    我在 OEPE 中创建了以下项目 weld001408 Java EE 企业应用程序项目 weld 001408 utility Java EE Utility Project 属于耳焊001408 weld001408web Web 动态
  • 将一个整数从 C 客户端发送到 Java 服务器

    我使用此代码将一个整数从我的 Java 客户端发送到我的 Java 服务器 int n rand nextInt 50 1 DataOutputStream dos new DataOutputStream socket getOutput
  • 对于双核手机,availableProcessors() 返回 1

    我最近购买了一部 Moto Atrix 2 手机 当我尝试查看手机中的处理器规格时 Runtime getRuntime availableProcessors 返回 1 proc cpuinfo 也仅包含有关处理器 0 的信息 出于好奇
  • java mysql 准备好的语句

    我正在尝试使用 java 向数据库中进行简单的插入 它告诉我我的 sql 语法已关闭 但是 当我复制打印出来的字符串并将其放入 phpmyadmin 中的 sql 命令中时 它会正确执行该命令 并且我似乎无法弄清楚 java 中的字符串查询
  • Android - 从渲染线程内结束活动

    下午好 我不熟悉 android 中的活动生命周期 并且一直在尽可能地阅读 但我不知道如何以良好的方式解决以下问题 我有一个使用 GLSurfaceView 的活动来在屏幕上绘制各种内容 在这个 GLSurfaceView 的渲染线程中 我
  • Volley 在第一次调用方法时返回 null

    我正在尝试使用 volley 从服务器检索数据 但是当我第一次调用此方法时 我收到服务器的响应 但该方法返回 null 如果我第二次调用它 我会得到最后的响应 public String retrieveDataFromServer Str
  • 将 SQL 数据中的一行映射到 Java 对象

    我有一个 Java 类 其实例字段 以及匹配的 setter 方法 与 SQL 数据库表的列名相匹配 我想优雅地从表中获取一行 到 ResultSet 中 并将其映射到此类的实例 例如 我有一个 Student 类 其中包含实例字段 FNA

随机推荐

  • 将非 Copy 变量移入异步闭包:捕获的变量无法转义“FnMut”闭包主体

    我想得到clokwerk https crates io crates clokwerk安排异步函数每 X 秒运行一次 The docs https docs rs clokwerk 0 4 0 rc1 clokwerk struct As
  • UIWebView 在关闭全屏模式后被清除

    我有一个 UIWebView 它在 viewDidLoad 上加载 html 字符串 它检测用户是否单击链接并显示模式视图 但是当我关闭模式视图时 UIWebView 的 html 已经消失了 如果我使用 FormSheet 模态样式 内容
  • 从列表创建列表而不嵌套

    假设我有一个清单 x lt list mtcars iris cars 现在假设我想将另一个数据集添加到列表中 在末尾加一很容易 x 4 lt df 但是 假设我想在开头添加一个元素 或者假设我想将两个列表合并为一个列表 我不能做这样的事情
  • SVN 更新到 head 与同步到存储库有什么区别?

    当我在 Eclipse 中右键单击我的项目时 我看到两个选项与存储库同步并更新到 head 我不明白它们之间有什么区别 区别如下 更新到 HEAD会做svn update http svnbook red bean com en 1 7 s
  • 使用 Flask-Uploads 拒绝超过一定数量的文件?

    Flask 推荐使用 Flask Uploads 模块来处理上传 我想拒绝任何超过一定大小的文件 有一些解决方案 来自文档 https pythonhosted org Flask Uploads 此外 您还可以使用 patch reque
  • 有没有办法不通过点击来关闭antd下拉菜单?

    我正在尝试实现具有搜索功能的 Antd 下拉菜单 并希望在单击外部时关闭下拉菜单 但在我的代码中 即使我单击搜索框 也会在单击外部时切换下拉列表的打开和关闭 不需要 我希望只有在搜索框中输入了一些字符时才打开下拉菜单 如果搜索框中没有字符或
  • JSON 是一种语言吗?如果不是,它会如何分类?

    考虑到JSON JavaScript 对象表示法 is JSON它本身是一种语言 还是仅在另一种语言的上下文中定义 我所说的语言是指可能使用 JSON 来传输 接收数据的编程语言 有趣的是XML尚未图灵完备 但已经language以它的名义
  • 在.net4中加载LuaInterface

    我正在开发一个 C 应用程序 我想使用它的优秀功能Lua接口 http luaforge net projects luainterface 但是 当我运行应用程序时 当我尝试使用 LuaInterface 执行某些操作时 会出现此异常 混
  • Excel 工作表在条件格式后损坏

    我正在使用 phpexcel 生成 Excel 工作表 当使用条件格式 搜索文本或其一部分 时 在尝试打开生成的工作表时收到验证错误 与数字完美配合 与文本配合则较差 这是我的代码 conditional formatting objCon
  • MS Access 中的静态随机数

    我正在使用以下公式尝试创建静态随机数 Random Number Format Int 99999999 11111111 1 Rnd Numbers 11111111 然而 它返回一个不同的非静态随机数 有什么建议么 您可以否定提供给Rn
  • HTML IE 条件语句:不适用于 Chrome/Firefox

    我的 html 文档中有以下内容 i am IE i am not ie 在 IE 中查看时 它正确显示 我是 IE 在 Chrome Firefox 中查看时 它错误地显示 i am IE i am not ie 而不是 i am not
  • JSF 中 GET 参数的 UTF-8 编码

    我在 JSF 中有一个搜索表单 它是使用 RichFaces 4 自动完成组件以及以下 JSF 2 页面和 Java bean 实现的 我使用 Tomcat 6 和 7 来运行该应用程序
  • 使用 mysql、php 和 pdo 选择不区分大小写

    我试图从 mysql 表中选择一些数据 但我无法使Where 比较不区分大小写 我尝试使用 LOWER wildcard GET q query SELECT id name departamento FROM gestionDoc car
  • 如何通过索引数组重新排列数组?

    给定一个数组arr和一个索引数组ind 我想重新排列arr in place满足给定的指标 例如 var arr A B C D E F var ind 4 0 5 2 1 3 rearrange arr ind console log a
  • NSStringDrawingUsesDeviceMetrics 标志是什么意思以及我们如何使用它?

    这个问题与我的评论有关我们如何测量 Cocoa 中文本的可见边界 https stackoverflow com questions 11766189 how do we measure visible bounds of text in
  • JAX RS 球衣架构验证

    如何为 JAX RS RESTFul 服务配置模式验证 我们使用 XSD 来定义模型 并使用 JAXB 来生成 java 模型 这就是它自动完成的方式ReXSL http www rexsl com 注意突出显示的方法 简而言之 您需要使用
  • Winforms usercontrol 现象:突然所有项目都消失了!

    我有一个winform用户控件有几个项目 文本框 按钮 现在我面临着现象 所有物品都突然消失了 在VS 2010设计器视图 文档大纲 尽管在控件设计器文件中 设计师 cs 文本框 按钮 仍然被定义 也没有编译错误 当我运行应用程序时 项目仍
  • jquery遍历$.get(url, function(data){ 的html结果

    我想知道遍历此函数返回的数据的正确语法是什么 get url function data alert data data find table 或类似的不起作用 返回的 html 数据如下所示 从 django 模板解析 div class
  • Nginx 文件描述符限制

    如何增加 nginx 中的文件描述符限制 有几种方法可以增加文件描述符 Edit etc security limits conf并为 nginx 用户设置 nofile 软硬限制 设置 ULIMIT 于 etc default nginx
  • 找不到模块:如何使用模块编译 JDK 10 Eclipse Maven 项目?

    以下是我的 pom xml 的主要部分 特性