问题标签 [java-module]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
15834 浏览

java - Java 9 + maven + junit:测试代码是否需要自己的 module-info.java 以及放在哪里?

假设我有一个使用 Maven 3 和 junit 的 Java 项目。有src/main/javasrc/test/java目录分别包含主要来源和测试来源(一切都是标准的)。

现在我想将项目迁移到 Java 9。src/main/java内容代表 Java 9 模块;看起来大约是com/acme/project/module-info.java这样的:

如果测试代码需要module-info.java它自己怎么办?例如,添加对仅用于测试而不是生产代码的某些模块的依赖。在这种情况下,我不得不module-info.javasrc/test/java/com/acme/project/模块一个不同的名称。这样 Maven 似乎将主源和测试源视为不同的模块,所以我必须将包从主模块导出到测试模块,并要求测试模块中的包,如下所示:

主模块(在src/main/java/com/acme/project):

测试模块(在src/test/java/com/acme/project):

这产生

因为一个包定义在两个模块中。所以现在我必须在主模块和测试模块中有不同的项目,这很不方便。

我觉得我走错了路,一切都开始变得很丑陋。我如何module-info.java在测试代码中拥有自己的,或者require没有它我如何实现相同的效果(等)?

0 投票
3 回答
5392 浏览

java - 列出 jar 文件中的模块

我已经创建了一个我很确定是模块化的 jar 文件。但如果可能的话,我想仔细检查一下。给定一个 jar 文件,有没有办法确定编译器会在其中找到哪些模块?

0 投票
1 回答
661 浏览

java - 如何检查一个 jar 是否是 Multi-Release

将其与我最初的问题分开,假设这足够通用。我如何在使用工件之前检查它是否是多版本 jar。

我知道它可以手动查看上述属性的 jarMANIFEST.MF内部,但是是否有可用的命令行选项?META-INF

也许我错过了一些已经存在的其他名称,或者对非常明显的东西视而不见。jar但是我尝试在和 工具中寻找这样的选项,但java没有成功。

0 投票
7 回答
71371 浏览

java - org.springframework.cglib.core.ReflectUtils 的非法反射访问 $1

我的 JDK 9+181 Spring Boot 2.0.0.BUILD-SNAPSHOT CLI 应用程序在启动时显示此警告:

这是一个控制台应用程序,所以我需要禁用此警告——我该怎么做?

注意:这个问题问的是如何禁用Spring触发的这个警告的具体问题;它不是JDK9的副本:发生了非法反射访问操作。org.python.core.PySystemState处理不同库中的类似症状。

0 投票
1 回答
802 浏览

java - 如何解决名称不符合 java 9 模块系统的 maven 依赖项?

我正在尝试使用使用依赖项的 maven 在 java 9 中构建一个演示项目:

但是,当我运行 jar 工具来确定要在项目的 module-info.java 中使用的自动模块名称时,我收到以下错误:

似乎自动模块算法无法为这个 jar 提供一个有效的 java 名称。如果不添加正确的要求,我会收到 spark mllib 中的软件包丢失的编译错误,例如:

在添加官方保留模块名称或它自己的模块信息之前,我是否可以在我的项目中使用此依赖项?

0 投票
1 回答
75 浏览

java - 如何在导出的 API 中声明内部方法?

此问题与(但不重复)为什么泄漏内部类型的公共 API 的编译不会失败?

如何定义只能从内部类访问的枚举方法?

具体来说:

  • 用户需要能够将enum值传递给 API 的其他部分。
  • 根据enum用户传递的值,内部类需要调用不同的操作。
  • 为了确保每个enum值都映射到一个操作,我们在enum.

影响:

  • enum必须public和导出。
  • 内部类必须驻留在单独的包中,enum以防止它们被导出。
  • enum方法必须public供内部类调用。

我能想到的阻止用户调用该public方法的唯一方法是让它引用非导出的类型。例如:

不幸的是,当我这样做时,编译器会抱怨导出的 API 引用了非导出的类型。有一个更好的方法吗?

0 投票
2 回答
8667 浏览

java - 如何在 Java9 模块中使用 3rd 方库?

我有一些使用不是 Java9 模块的 3rd 方库的 java9 模块,只是一个简单的实用程序 jar。

但是,编译器抱怨它无法从我的实用程序中找到包。

我应该怎么做module-info.java才能使用我的 3rd 方库?

0 投票
2 回答
3215 浏览

java - java应用程序不能与java9和eclipse一起使用

我正在尝试按照以下步骤创建 Java9 的 HelloWorld 模块。

  1. 文件>新建>Java 项目 com.hello 项目说明

  2. 右键单击项目(即 com.hello)>新建>源文件夹>输入源文件夹名称(.e. com.hello

  3. 右键单击源文件夹(即 com.hello)>新建>包>输入名称(与源文件夹名称相同,即 com.hello)
  4. 右键单击源文件夹(即 com.hello)>新建>文件>输入文件名(模块的 java9 标准文件名,即 module-info.java)

    /li>
  5. 右键单击Package(即com.hello)>新建>输入类名(即HelloWorld)

    /li>

右键单击HelloWorld>Run As>Java Application它抛出

启动层初始化时出错

java.lang.module.FindException:未找到模块 com.hello

我的项目目录结构 项目目录图片

PS:尝试此解决方案后,我的项目结构如下所示

解决方案项目结构

注意:我还注意到一件事。保存更改后。日食(氧气)抛出

构建过程中发生错误。在项目“com.hello”上运行构建器“Java Builder”时出错。未知常量池类型 19

0 投票
3 回答
12067 浏览

java - 什么是自动模块?

在 stackoverflow 上多次提到自动模块,但我找不到自动模块的完整、简洁和自给自足的定义。

那么,什么是自动模块?它是否导出所有包?它会打开所有包裹吗?它是否读取所有其他模块?

0 投票
0 回答
968 浏览

java - Spring Boot 中的 Java 9 拆分包错误

当我在 SpringBoot 代码中引入 java 9 模块时,我得到了大量的“拆分包”错误。它们无处不在,例如:

我已经尝试了很多不同的版本,包括1.5.3.RELEASE,2.0.0.M52.0.0.BUILD-SNAPSHOT.

当 maven 获取所有依赖项并将它们添加为模块路径上的“自动模块”时,问题似乎出现了。许多依赖项都有重复的包,这在 java 9 中是不允许的。一个糟糕的依赖项的例子就是spring.aop:5.0.1.BUILD-SNAPSHOT很明显 packages org.aopalliance.aop

是 SpringBoot 定义了所有依赖项。我什至尝试使用 spring initializr 中的 vanilla 项目,只添加:

此外,我添加了一个 module-info.java 以使演示代码符合 java 9:

这不编译。

问题: 有没有人有一个 SpringBoot 项目的工作示例,其中代码组织在 java 9 模块中?