问题标签 [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 投票
3 回答
8215 浏览

spring - java 9模块从A和B读取包X

我正在尝试将 spring boot 与 java 9 和 gradle 一起使用。我无法运行我的简单代码,出现以下错误:-

我的依赖文件和 module-info.java 文件非常简单。

有人可以帮忙吗?

谢谢,

阿马尔

0 投票
2 回答
1069 浏览

java - JDK9 中的预定义模块是什么,或者我需要哪个模块来修复依赖问题?

JDK9(可能)会引入一个模块系统。作为其中的一部分,Java 类库将被模块化。

当类未找到时,这可能会导致异常,因为它们位于尚未指定为依赖项的模块中。

使用模块系统将创建哪些模块,它们各自的内容是什么?

或者换一种说法:给定一个未加载的类,我如何找到合适的模块作为依赖项包含在内?

0 投票
2 回答
462 浏览

classpath - Java 9 模块:自动模块可以产生更大(完整)的项目吗?

我猜自动模块:

http://openjdk.java.net/projects/jigsaw/spec/sotms/#automatic-modules

意味着需要第 3 方 jar 的项目的每个模块都必须将该 jar 打包到它自己的模块化 jar中。如果是这样的话,一个大型的多模块应用程序最终会不会比它的基于类路径的 Java 8 应用程序更大?我正在考虑所有几乎无处不在的 apache 库和其他常见的开源依赖项。

我在未来获得胜利;所有这些 3rd 方库本身都是模块化的,因此只需要分发最小的配置。但是,在短期内,如果没有类路径,那里不会有一些非常庞大的模块化 jar 吗?还是我错过了什么?

0 投票
1 回答
1193 浏览

java - java 9:在 module-info.java 中我是否必须再次提及已经在源中导入的包((根据需要)

使用 java 9 模块,如果我在我的代码中使用 java.xml...
1)我将使用 import 语句导入 xml 包...
2)如果我没有在模块声明中提到这个包是必需的我的模块...
- 我的模块的编译会工作.. ??
我猜......不......并且提到module-info.java需要xml包......它可能会起作用。
所以..我想知道的是...这不是冗余...每个导入包都是隐含的...必需的。(除非我需要更好地理解模块)

有没有办法提到模块声明中需要所有导入的包,否则在 module-info.java 中提到的可能是一个很长的列表?

0 投票
1 回答
1780 浏览

java - 为什么不允许导出整个模块?

在 Java 9 的模块声明中,有两种结构:

Whereexports授予编译时访问,而opens允许运行时访问,作为反射和资源。

opens有一个宽大处理exports,您可以将整个模块定义为打开,结果与显式打开每个包相同:

但是没有类似的结构

我的问题:为什么会这样;已做出哪些决定允许一次打开整个模块但不允许导出?

0 投票
1 回答
3809 浏览

java - 无法在 IntelliJ IDEA 2017.2.1 中使用 --patch-module 编译 Java 9 模块

我正在尝试熟悉 Java 9 模块以及如何在 IntelliJ 中定义它们。除其他外,我想使用--patch-module编译器/JVM 标志解决拆分包问题,但我不知道如何使其在 IntelliJ 中工作。

我正在使用 IntelliJ IDEA 2017.2.1 Build #IC 172.3544.35 和 Java HotSpot(TM) 64 位服务器 VM(构建 9+180,混合模式)。

这是我的源文件MyImmutableList.java

它属于我的com.effjava.collect模块module-info.java

为了编译我的模块,我使用=> => =>--patch-module在 IntelliJ 中指定了标志,如此处所述SettingsBuild,Execution,DeplyomentCompilerShared build process VM options

编译失败,因为编译器无法RegularImmutableList从 guava 库中找到超类。

IntelliJ 提供的建议是将requiresguava 库的指令添加到模块描述符中,这当然不起作用,因为编译器随后正确地抱怨了拆分包问题:

错误:java:模块 guava 从 com.effjava.collect 和 guava 读取包 com.google.common.collect

在进一步调查中,我注意到构建过程发出与--patch-module标志相关的警告:

错误:异常构建过程终止:“C:\Program Files\Java\jdk-9\bin\java”-Xmx700m -Djava.awt.headless=true

... 很多东西 ...

警告:未知模块:com.effjava.collect 指定给--patch-module

... 更多东西 ...

顺便说一句,我不知道如何获取编译器警告。我没有将它们隐藏在 IntelliJ 的消息窗口中,但我看不到它们。作为一种解决方法,我只是指定了虚假的编译器标志并让构建过程崩溃,以便它在其崩溃报告中发出警告。

无论如何,构建过程抱怨 - 在构建模块时 - 有问题的模块不存在,因此无法通过--patch-module. 这个抱怨没有任何意义,因为我确实通过在命令行级别手动键入javac和命令成功地编译和构建了我的模块:jar

如何告诉 IntelliJ 的构建过程我想要修补我的模块?

0 投票
1 回答
91 浏览

java - 在 java 9 中创建模块项目的问题

我正在尝试按照教程在 Windows 10 中使用 java 命令设置一个基本的 java 项目。这些文件是

C:\Users\Talon\Desktop\java intellij\01j9\src\com.me.mymodule\module-info.java C:\Users\Talon\Desktop\java intellij\01j9\src\com.me.mymodule\com\me\mymodule\Main.java

和一个空文件夹C:\Users\Talon\Desktop\java intellij\01j9\mods\com.me.mymodule

模块信息.java

主.java

将“cd”C:\Users\Talon\Desktop\java intellij\01j9> 输入我应该输入的命令后

但它是为 machintosh os 编写的,所以在 Windows 中我试过了

在这两个我都有javac: no source files。路径错误还是我应该输入不同的命令?

0 投票
3 回答
3225 浏览

java - What's the purpose of 'uses' directive in Java 9?

Java's ServiceLoader class is now officially baked into the Java language. Instead of looking for providers in META-INF/services you can now use the

What I fail to understand is, the use of uses in the service loading module declaration:

Quoting from The State of the Module System

The module system could identify uses of services by scanning the class files in module artifacts for invocations of the ServiceLoader::load methods, but that would be both slow and unreliable. That a module uses a particular service is a fundamental aspect of that module’s definition, so for both efficiency and clarity we express that in the module’s declaration with a uses clause:

Why is it fundamental for the module system to know uses of a particular service, especially how will this introduce efficiency? Aren't services loaded lazily? Why can't the service loader just look for providers on the fly?

0 投票
1 回答
304 浏览

java - 在没有拆分包的情况下实现(编译时)插件架构

过去的一个问题中,我问如何设计一个系统:

  • 一个类包含一个或多个可选方法。
  • 可选方法由在编译时可能存在或不存在的插件实现。
  • 如果用户调用一个相关插件在编译时不存在的方法,他们将得到一个编译时错误。

我提供了一种适用于 Java 8 的可能解决方案。

不幸的是,这个解决方案依赖于 Java 9 模块系统不允许的拆分包(两个模块导出同一个包)的使用。

这如何在 Java 9 中实现?

0 投票
0 回答
734 浏览

java - Java 9 服务提供者和 Groovy 扩展模块

在 java 9 项目中,我想 require vertx.web,这是为 module 提供的自动名称io.vertx:vertx-web:3.4.2。只有在运行时,我收到以下错误。

似乎 vertx-web 使用了Groovy Extension Modules。这就是文件META-INF/services/org.codehaus.groovy.runtime.ExtensionModule存在的原因。Java9 错误地读取此文件以进行服务加载

有什么方法可以忽略此服务文件,因为它是依赖项,我无法更改它?