问题标签 [unnamed-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 投票
2 回答
3541 浏览

java - Java 9 中创建了多少个未命名的模块?

我试图了解 JPMS 是如何工作的。

这里

类路径还没有完全消失。类路径上的所有 JAR(模块化或非模块化)和类都将包含在未命名模块中。与自动模块类似,它导出所有包并读取所有其他模块。但它显然没有名字。因此,命名的应用程序模块不能要求和读取它。未命名的模块反过来可以访问所有其他模块。

请注意...on the classpath will be contained in the Unnamed Module。模块是单数的。

这里

为了兼容性,类路径上的所有代码都打包为一个特殊的未命名模块,没有隐藏的包和对整个 JDK 的完全访问权限。

再次unnamed module。模块是单数的。

我是否理解在 JPMS 中总是只有一个未命名的模块?这是否意味着在 Java9 之前开发且未针对 Java9 更新的应用程序将作为一个未命名的模块加载?

0 投票
1 回答
9866 浏览

java - Java 9 迁移问题 - 包 com.mymodule 在未命名的模块中声明,模块“newmodule”不读取它

我创建了一个具有以下结构的多模块项目

现在我想使用 Util.java,它是模块化模块 newmodule 中的非模块化代码。我已经在 newmodule 中声明了以下内容

项目编译正常,但 Intellij 显示未找到模块,并且包 com.mymodule 在未命名模块中声明,模块“newmodule”不读取它。

如何解决这个问题?

还有一个问题,如果我什至不模块化遗留模块,所有旧的非模块化代码是否默认变成java 9中的自动模块?

0 投票
1 回答
574 浏览

java - 如何让类路径上的 java 类访问属于模块路径上的模块的类

我正在尝试关于谁可以访问和什么的各种访问规则,我在模块系统文档的状态中看到了这个声明,

未命名的模块读取所有其他模块。因此,从类路径加载的任何类型的代码都可以访问所有其他可读模块的导出类型,默认情况下,这些模块将包括所有命名的内置平台模块。

因此,我编写了以下代码以使用以下结构对其进行测试:

基本上,

  1. moduleAmodA.A调用非模块化类的方法automod.Fooautomod.Foo被包装成automod.jar并放在module-path. moduleA 的 module-info 有requires automod;子句。正如预期的那样,这工作正常。

  2. automod.Foo调用nonmodular.Junk类上的方法。nonmodular.Junk被包装成nonmodular.jar并穿上classpath。正如预期的那样,这工作正常。

  3. nonmodular.Junk调用 moduleX 上的方法modX.XmodX.X被打包成moduleX.jar. 就是这一步有问题。如果我将 moduleX.jar 放在类路径上,但如果我将 moduleX.jar 放在模块路径上,它就可以工作。(moduleX 的模块信息确实有exports modX;子句。)

换句话说,以下命令有效:

使用以下输出:

但以下命令不起作用:

这是输出:

知道为什么吗?从类路径加载的任何类都应该能够访问模块导出的任何类。

0 投票
2 回答
149 浏览

java - 如何在非模块化应用程序中使用模块化 jar?

在不同的地方我看到了以下信息:未命名模块中的类被允许读取模块路径上的导出包。

在目录 src/calculators 我有 module-info.java 文件:

在目录 src/calculators/calculators 我有 InterestCalculator.java 文件:

我已经使用以下命令编译了模块:

然后我用以下命令打包了编译模块:

现在我的非模块化应用程序有以下类(在同一个目录中):

当我尝试使用带有命令的模块编译我的应用程序时:

我得到了错误:

为什么?应用程序类不应该能够读取导出的包吗?我在这里做错了什么?

0 投票
0 回答
51 浏览

java - Java Jigsaw 使未命名模块消耗导出的包不起作用

我是模块的初学者。我正在阅读@Nicolai Parlog 的 Java 模块系统的好书,并且我自己也做了一些简单的编码。

我有一个易于掌握的可重现示例。

我有一个像这样的简单课程。

使用这样的 module-info.java。

它看起来像这样。

源码包

我可以这样编译。

成功,它正在创建正确的目录

编译包

我可以毫无问题地运行它。

后来我创建了一个这样的Java文件。

如您所见,这是一个非常简单的类,它正在扩展

这是 John 模块中导出包中的类。

只要我了解自动模块以及 unamedmodule 就可以访问导出的包。如果我在这里错了,请指出我。

后来我尝试了这个命令。

我收到:

但是我将 --module-path 设置为我认为编译器正在识别但无法允许访问的输出?我知道这很简单,但对我来说很重要。就像模块不允许访问模块中的导出包一样。

如果将标志放入 -classpath 它可以工作,但我想将 John 作为一个模块来处理。

将所有内容视为类路径的工作代码

我指的是错误的方法?如何使用/使用未命名模块中的导出包。

我在用着

它看起来像这样。首先

开始

感谢@JohannesKuhn,我的代码现在可以工作了,我错过了标志

现在我的命令看起来像这样。

汇编

0 投票
1 回答
231 浏览

java - 编译模块时,将非模块化 jars 添加到 -classpath 并将模块化 jars 添加到 --module-path 有什么价值?

我已经看到,在一个项目中module-info.javamaven将模块化 jars(包含module-info.class或清单属性Automatic-Module-Name)添加--module-path-classpath.

规范指出:

[...] 但是,这并不意味着命名模块中的代码可以访问未命名模块中的类型。实际上,命名模块甚至不能声明对未命名模块的依赖。这种限制是故意的[...]

据我所知,来自类路径的非模块化 jar 的包被添加到未命名的模块中。

由于不允许模块化项目源访问未命名模块的类型,在上述情况下添加任何 jar 的目的是什么?-classpath

0 投票
0 回答
75 浏览

java - Java 模块层:从未命名的模块访问自定义 ModuleLayer 中的类

我们有一个包含多个模块层的插件系统:

PluginLoader引导层内的模块在运行时为每个模块实例化一个自ModuleLayer定义.ModuleModuleLayer::defineModulesWithOneLoader

我们现在有一组非模块化插件,需要访问自定义层内的模块化插件。它们将在自定义层被实例化后加载。如何做到这一点?

简单地将它们放在类路径上是行不通的,因为模块化类将被第二次加载,而不是使用模块化插件中的(已经加载的)类。

我们的下一个尝试是创建一个虚拟插件并将其最后加载到一个层中,该层具有所有其他层(因此是模块化插件)作为父层。似乎无法将 URL 添加到该defineModulesWithOneLoader方法生成的类加载器。相反,我们创建了一个自定义 URLClassLoader 作为此类加载器的父级,并通过URLClassLoader::addURL.

这适用于非模块化插件类。然而,如果一个已经加载在一个模块化插件中的类被这样一个类引用,它也会尝试用我们的自定义加载类URLClassLoader(失败,因为父级是null)而不是模块的内部类加载器,它委托到父层。有没有办法将我们的非模块化插件的类加载到类加载器的未命名模块中,该模块的行为类似于 JPMS 的默认类加载器(首先搜索父层),但仍将类加载到非模块化 JAR 中,如果它们是在父层中找不到?

可以通过使用自动模块来解决这个问题,但我们现在想避免这种情况,因为它会导致我们目前没有资源进行的一系列其他必要的更改(例如解析拆分包)。

0 投票
1 回答
798 浏览

java - 使用 gradle 依赖于 Java 9 Module System 库中的遗留 jar

问题

你如何创建一个java库jar:

  • 是java模块(有module-info
  • 有一个依赖的遗留(非模块)jar。(如commons-exec)?

依赖项是一个实现细节 - 不应导出。

来源

具有以下build.gradle(使用gradle-6.8):

以及以下内容module-info.java

错误

我收到以下编译错误:

如果我不包括requires commons.exec,则错误变为:

commons.exec模块名称?

运行jar --file=commons-exec-1.3.jar --describe-module 确实输出:

所以commons.exec看起来像一个有效的模块名称commons-exec-1.3.jar。Intelij Idea 似乎同意并在module-info.java. 虽然它在构建时失败。

0 投票
1 回答
31 浏览

python - 在 Python 数据框中命名未命名列时出错

使用此代码命名数据框中的第一列: df1 = df1.rename(columns={'Unnamed:0' : 'time'}, inplace=True) 这给了我 NoneType 对象。

我尝试删除inplace=True ,但它只是像原来的一样返回数据框。列名没有更新。