问题标签 [module-path]

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 回答
1625 浏览

java - 有没有办法修改模块路径和程序化 JShell 实例的添加模块?

我试图通过我使用JShell API创建的 JShell 实例在运行时运行一些 Java 代码。为了演示我的问题,我将分享我的简单代码。

使用我当前的设置,我有一个名为lib的目录,其中包含 MySQL Java 驱动程序:mysql-connector-java-5.1.35.jar

通过命令工具启动 JShell 并将所需的模块添加为:

然后加载mysql驱动程序对我有用:


我创建了一个类似的 Java 9 模块module-info.java

src/example/loadmysql/Runner.java为:

构建/打包后:


很明显,即使example.loadmysql模块需要 mysql 连接器,创建的 JShell 实例也不需要。所以它找不到类。

关于如何以编程方式将模块添加到 JShell 实例的任何想法,因此它像直接 JShell 编码示例一样工作?

更新- 我已经弄清楚如何设置模块路径:

但这还不够。我仍然以某种方式添加了所需的模块。

0 投票
1 回答
4149 浏览

java - Java 9 自动模块依赖无法解析/找不到模块

我正在尝试将一些遗留应用程序迁移到新的 Java 9 模块系统,以加强其封装。

我从外向内开始,假设外围的类具有最少的外部依赖性。

正如你所料,我已经声明了一个非常开放的模块:

这会立即破坏整个项目(在所有类中),突然每个外部依赖项的导入都不再解决(导致超过 1k Java 问题):

导入 com.otherexample 无法解析

导入org.springframework无法解析

等等

同一个项目中的本地包com.example.price仍然有效 - 就像java.util等一样。

所有外部依赖项都由 Maven 管理。在(Eclipse 项目)构建路径中,我仍然可以将它们视为“类路径”依赖项——但只有“模块路径”中的 JRE 系统库。

这两个概念可以共存吗?目前似乎module-info.java在项目中的任何地方都有一个,所有类路径依赖项都停止工作?

我确实读过有关使用自动模块的信息,这似乎暗示您可以通过将它们包含在您的模块路径中来使用旧版/非模块化 jar,然后通过它们的文件名引用它们。他们使用示例:

我找不到太多其他信息,但这似乎与 Eclipse 在自动生成 module-info.java 时使用的约定相匹配,例如:

变成:

但是,这仍然会导致 Eclipse 报告 Java 错误:

spring.core 无法解析为模块

马文报告:

...并且项目中具有外部依赖关系的每个类仍然被破坏。

0 投票
1 回答
1000 浏览

java - java 9和maven的Eclipse问题

我安装了版本:Oxygen.1a Release (4.7.1a) Build id: 20171005-1200支持 Java 9。

在 eclipse.ini 上建议配置

我已经开发了 java 9(java 9 模块化)代码项目来测试依赖注入作为来自 Eclipse 的纯 Java 项目,但是当我集成 Maven 从 Eclipse 运行我时,我系统地得到以下错误

启动层初始化时出错java.lang.module.FindException: Module com.my.module.hello.test not found

唯一的解决方案是添加 VM 参数

在此处输入图像描述

实际上,如果将我在加载期间可以看到的详细参数添加到 Vm 参数

... [0.694s][info][class,load] java.lang.NamedPackage 源:jrt:/java.base [0.697s][info][class,load] com.my.module.hello.MyHello 源: file:/C:/Users/212442540/workspace-training/my-module-prj/my-module/target/classes/ [0.698s][info][class,load] java.lang.module.ModuleDescriptor$$ Lambda$24/2114889273 来源:java.lang.module.ModuleDescriptor ...

当我删除“--module-path”参数时,这条线消失了。

注意:Eclipse 在编译或编辑过程中能够正常工作。看到完成等等..

在此处输入图像描述

我也在我的项目中添加了 modpath 依赖项

强制依赖项目配置

我在项目配置中手动添加了依赖项 在此处输入图像描述

因此,Eclipse 似乎能够编译 java 9 模块,但如果与 maven 集成,则无法运行模块。

强制依赖 Configratin Run 我还手动添加了依赖关系 图 1在此处输入图像描述

但日食继续删除它们。

前:

手动

图 2

运行 eclipse 后恢复:

保存后 图 3

如果与 maven 集成,eclipse 似乎会系统地重置配置。

0 投票
1 回答
5200 浏览

java - 如何在模块路径中添加几个 jar?

我有以下情况:

模块地址:

模块人:

我正在使用 Maven 构建它们,因此每个模块都有自己的目标目录和 jar 文件。

我正在尝试运行具有这样的主类的模块 Person

但我得到的许可被拒绝。如何设置包含多个模块的模块路径?

0 投票
0 回答
820 浏览

gradle - 在 Java 9 模块路径和类路径之间拆分 Gradle 依赖项:自动模块

我按照关于构建 Java 9 模块的 Gradle 指南开始了一个简单的基于 Java 9 的库项目。特别是我按照指南中的建议手动设置我的模块路径,如下所示:

请注意,这只是将我的整个类路径(由 Gradle 从我的依赖关系图中确定)转移到模块路径上。

除了一个简单的问题外,一切都很好。我的一些依赖项(例如 org.jetbrains.kotlin:kotlin-stdlib-1.2.10)不是真正的 Java 9 模块,因为它们缺少module-info.class. 将它们粘贴在类路径模块路径上很好,因为现在java它们转换为所谓的自动模块

出现问题是因为即使是自动模块,如果它在我的模块路径上,我需要在的项目模块的requires指令中引用它。但是因为我选择了 Java 编译器,所以会生成以下警告:-Xlint:alljavac

这个警告对我来说是站不住脚的,因为我也跟着-Werror javac旗子滚动,所以它使我的构建失败。

所以似乎我需要将自动模块推送到我的类路径中,并且只在模块路径上保留“真正的”模块依赖关系......

是否有任何通用或半通用方式(不与依赖项名称耦合)在编译器类路径及其模块路径之间拆分我的依赖项?

0 投票
2 回答
3820 浏览

java - java 9 未命名模块在调试时从两者中读取包 [X](使用 IntelliJ)

在我的项目中,我有一个使用多个 3rd 方库的包。让我们看一下依赖树:

到目前为止,编译和运行工作正常。

但是当我开始使用 IntelliJ 进行调试时,我会得到一个包含 100 多个错误的列表,例如:

由于新的 Java 9 模块限制,这似乎是一个错误。但是这里怎么处理呢?

org.opensaml 都是 wss4j-ws-security-common 2.2.1 的一部分(这是最后一个版本,于 2018 年 1 月发布)。opensaml.saml.api 和 opensaml.saml.impl 是 3.3.0 版本,并且都使用相同版本的 org.opensaml.saml.config。所以???

为什么“mvn compile”通过了,但是用 IntelliJ 调试却失败了?

0 投票
2 回答
7926 浏览

java - Java 9 错误:不在模块源路径上的模块中

项目结构

我有一个用 Java 8 编写的项目,我想将它更新到 Java 9。所以我将这些类分成 2 个单独的模块。模块:

  • org.ggp.basemodule-info.java在目录中org.ggp.base/src/main/java。在我开始更新到 Java 9 之前,它的构建是使用 Gradle 自动完成的。该模块使用 module.xml 中包含的抽象类实现pl.edu.prz.klopusz
  • pl.edu.prz.klopusz在目录中pl.edu.prz.klopusz/dolar-app/src/main/java。我想使用 Maven 自动化它的构建。该模块需要org.ggp.base模块。

文件树如下所示:

文件内容module-info.java如下:

org.ggp.base/src/main/java/module-info.java pl.edu.prz.klopusz/dolar-app/src/main/java/module-info.java

汇编

我尝试使用以下命令编译项目:

错误

我收到以下错误:

org.ggp.base/src/main/java/module-info.java:1:

模块 org.ggp.base {

包内的类还有 99 个其他错误org.ggp.base,每个都像:

org.ggp.base/src/main/java/external/JSON/JSONObject.java:1:

包外部.JSON;

或者

org.ggp.base/src/main/java/org/ggp/base/validator/OPNFValidator.java:1:

包 org.ggp.base.validator;

我想要的是

我想摆脱错误并编译项目。我不必保留目录结构,但是当我将它们放在一起时,有 2 个module-info.java文件,编译器抱怨多个模块。我可以通过 IntelliJ IDEA 来完成,我不介意,我试过了。但我不知道幕后发生了什么,我也不知道如何处理错误(Package is empty: org.ggp.base)。

包为空:org.ggp.base

我已经找到的

很难找到有关--module-source-path切换javac命令的文档。这个网站是我找到的。它说:

如果您在模块中安排代码,以便将模块的代码放在以模块命名的封闭目录中,则模块源路径变得更像是一个简单路径,如或者如果它在多个项目中,请使用

对于 Windows,使用反斜杠和分号,但无论如何我都在使用 Linux。

OpenJDK bugs site 上的问题也有评论,与我的错误相同,但我想它仍未解决。

更新

-verbose转变

-verbose在命令末尾添加了开关。这是编译器所说的一部分:

所以,我认为这不是--module-source-pathswitch 路径的错误(*src/main/java@StephanHerrmann 指出了同样的行为)。它读取它应该读取的所有 java 源代码。pl.edu.prz.klopusz模块中的源没有问题。这些是第一行org.ggp.base.util.statemachine.MachineState

0 投票
1 回答
1043 浏览

java - 在 javac (JDK 9) 中混合 --class-path 和 --module-path

我试图关注这个问题,但它对我不起作用。我想编译 1 个模块(不需要任何其他模块或 jar)以及使用该模块并将位于未命名模块中的其他类。

运行此命令后,我得到“包 org.... 不存在”。但是这个包的 jar 在 lib 目录中

lib - 包含我的库-jar 的目录

modules - 此文件夹包含带有 module-info.java 的模块“simpleModule”

@classes.txt - 要编译的所有类列表(包括模块化和非模块化)。操作系统 - Windows

当我从 simpleModule 中删除 module-info.java 时,一切都编译得很好。

0 投票
1 回答
1883 浏览

java - intellij java-9 build path-模块路径设置

我知道 intellij 支持 java9,并且我知道如何通过将库添加到构建路径来在 intellij 上设置类路径。

但是它在 java 9 中是如何工作的,intellij 中是否有模块路径部分?

如果 java 9 在模块路径上找不到类,我认为它会使用类路径。那么在intellij设置上应该同时存在类路径和模块路径吗?

最后一个问题,当我向库(java8 jar)添加一个 jar 时,它是一个未命名的模块还是什么时候是一个自动模块?

0 投票
2 回答
3672 浏览

python - Python:没有名为 xxx 的模块

我的 Raspberry Pi 上出现以下错误,我一无所获:

我自己的 Python 脚本从另一个名为 BlackBean.py 的模块调用一个函数,该模块又导入名为“netaddr”和“configparser”的其他模块。问题是我似乎无法克服导入错误,它告诉我“没有名为 netaddr 的模块,或者如果我注释掉该导入,那么它也会在没有名为 configparser 的模块的情况下出错。所以我知道这是一个路径问题,但我只是似乎无法修复它!

Blackbean.Py 脚本的开头是这样的:

BlackBean.py 文件位于我的项目 SkyHD 文件夹中,位于 /home/pi/SkyHD。“netaddr”和“configparser”文件和文件夹由 pip 安装在 /home/pi/.local/lib/python2.7(和 python3.5)/site-package 文件夹中。

sys.path 在其列表中有上述文件夹,我还编辑了 .bashrc 并添加了 PYTHONPATH=${PYTHONPATH}:/home/pi/.local/lib/python2.7/site-package:/home/pi/.local /lib/python3.5/site-package:/home/pi/SkyHD:../ 但这些都不起作用。我想这一定是一些基本的东西,但我就是无法解决!帮助!

此外,还有更多信息,当我第一次安装所有文件并运行我的程序时,一切正常,它发现文件没问题,只有当我重新启动时它才找不到文件。