当前位置: 首页 > 知识库问答 >
问题:

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

章琛
2023-03-14

我有一个用Java8写的项目,我想把它更新到Java9。所以我把这些类分成了两个独立的模块。模块:

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

文件树类似于:

.
├── org.ggp.base/
│   ├── build.gradle
│   └── src/
│       └── main/
│           ├── java/
│           │   ├── external/
│           │   │   └── JSON/
│           │   │       ├── JSONArray.java
│           │   │       └── JSONObject.java
│           │   ├── META-INF/
│           │   │   └── MANIFEST.MF
│           │   ├── module-info.java
│           │   └── org/
│           │       └── ggp/
│           │           └── base/
│           │               └── util/
│           │                   ├── statemachine/
│           │                   │   ├── MachineState.java
│           │                   │   └── StateMachine.java
│           │                   └── symbol/
│           └── resources/
│               └── org/
│                   └── ggp/
│                       └── base/
└── pl.edu.prz.klopusz/
    └── dolar-app/
        └── src/
            └── main/
                └── java/
                    ├── module-info.java
                    └── pl/
                        └── edu/
                            └── prz/
                                └── klopusz/
                                    └── utilities/
                                        └── decorators
                                          └──StateMachineDecorator.java
module org.ggp.base {
    requires guava;
    requires reflections;
    requires jdk.httpserver;

    uses org.ggp.base.util.statemachine.StateMachine;

    exports org.ggp.base;
}
module pl.edu.prz.klopusz {
    requires org.ggp.base;

    provides org.ggp.base.util.statemachine.StateMachine
        with pl.edu.prz.klopusz.utilities.decorators.StateMachineDecorator;
}
javac -d out \
  --module-source-path org.ggp.base/src/main/java:pl.edu.prz.klopusz/dolar-app/src/main/java \
  $(find org.ggp.base/src/main/java -name *.java) \
  $(find pl.edu.prz.klopusz/dolar-app/src/main/java -name *.java)
error: module not found on module source path
error: not in a module on the module source path

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

error: not in a module on the module source path

我想去掉错误,编译这个项目。我不必保留目录结构,但是当我用2个module-info.java文件将其放在一起时,编译器会抱怨有多个模块。我可以通过IntelliJ的想法来完成,我不介意,我试过了。但是我不知道幕后发生了什么,也不知道如何处理错误(包为空:org.ggp.base)。

--module-source-path Users/Me/MyProject/src
    --module-source-path 
        /Users/Me/MyProject/src:/Users/Me/MyOtherProject/src
[parsing started SimpleFileObject[/home/sensitive/org.ggp.base/src/main/java/module-info.java]]
[parsing started SimpleFileObject[/home/sensitive/org.ggp.base/src/main/java/org/ggp/base/util/statemachine/MachineState.java]]
[parsing started SimpleFileObject[/home/sensitive/pl.edu.prz.klopusz/dolar-app/src/main/java/module-info.java]]
[parsing started SimpleFileObject[/home/sensitive/pl.edu.prz.klopusz/dolar-app/src/main/java/pl/edu/prz/klopusz/utilities/decorators/StateMachineDecorator.java]]
org.ggp.base/src/main/java/org/ggp/base/util/statemachine/MachineState.java:1: error: not in a module on the module source path
package org.ggp.base.util.statemachine;
^
[loading /modules/jdk.httpserver/module-info.class]
[loading /modules/java.base/module-info.class]
[total 263ms]
100 errors
package org.ggp.base.util.statemachine;

import org.ggp.base.util.gdl.grammar.GdlSentence;

import java.util.HashSet;
import java.util.Set;

public class MachineState {
    //...
}

共有1个答案

程举
2023-03-14

根据JEP261,--module-source-path选项(用于在“多模块模式”中编译)必须指向一个目录,该目录为每个包含的模块保留一个子目录,其中的目录名必须等于模块名。

为了适应源不直接包含在模块目录中的布局,该选项支持这样的模式,即标记*可用于表示路径的任何部分中的模块名称,例如“./*/src/main/java/”中,该模式将在./my.mod1/src/main/java/module-info.java中找到模块my.mod1等。

JEP261没有提到*在模式中的位置可能发生的任何对比,但显然Javac不喜欢以*开头的模式。这可能是故意的,也可能不是故意的。

 类似资料:
  • 问题内容: 我有一个模块foo,包含util.py和bar.py。 我想将其导入IDLE或python会话中。我该怎么办? 我找不到关于如何在当前目录或默认python PATH中导入模块的文档。经过尝试后, 我能得到的最接近的是 这给了我在Windows 7上拒绝的权限。 问题答案: 一种方法是简单地修改路径: 请注意,这要求foo为python包,即包含一个文件。如果您不想修改,也可以修改环境

  • 问题内容: 我意识到,当我对node.js模块(带有-g标志)进行全局安装时,除非编写了整个路径,否则无法使用该模块。 我的意思是,如果模块已全局安装,则无法使用: 我必须写: 我如何对节点说必须在正确的路径中寻找模块? 谢谢。 问题答案: 总的来说,我建议让npm为您提供路径并按照上面的说明进行设置:

  • 我正面临一个烦人的问题。下面是历史: 我们使用的是(测试环境)并且部署工作正常 我做了一个部署,但没有奏效。我们的解决方案至少需要V12.1.2,因此我卸载了12.1.1并安装了 在安装新版本之前,我完全删除了文件夹,并从头创建了 我在静默模式下安装了WebLogic12.1.3,并创建了我的测试域。域中只有管理服务器和一个独立的托管服务器(没有群集,没有大量托管服务器) 我进行了部署,但Webl

  • 主要内容:模块系统特征,创建模块Java 9是一种称为模块的新型编程组件。模块是一个自我描述的代码和数据集合,并有一个名称来标识它。 模块系统特征 使用模块组件,Java 9中增加了以下增强功能 - 引入了一个新的可选阶段,即链接时间。这个阶段介于编译时间和运行时间之间。 在此阶段,可以组合和优化一组模块,使用jlink工具制作自定义运行时映像。 javac,jlink和java有额外的选项来指定模块路径,它们进一步定位模块的定

  • 食氧;视窗7;JDK 9决赛从9日开始,21日结束;JUnit4.12和现有的应用程序。作为起点,可以编译、执行应用程序,并且所有JUnit测试都显示为绿色。现在我们使用eclipse生成文件模块信息。JAVA结果是: 但有一个错误:junit无法解析为模块。问题是:如何告诉文件junit没有定义任何模块,应该在兼容模式下运行?

  • 我正在Linux Mint 16上使用python 2.7。我面临一个错误,如果我从程序启动器运行IDE(在Spyder和Pycharm上尝试过)(例如,从Alt F2的提示符或桌面上的图标快捷方式),模块不会加载,我会得到以下错误 但是,如果我从命令行运行程序,模块加载正确,程序运行正常。我只有一个安装每个IDE。这两个实例的sys.path输出如下: Pycharm从快捷方式运行的sys.pa