Java 9 error: not in a module on the module source path
我有一个用Java 8编写的项目,我想将其更新为Java9。因此,我将类分为2个单独的模块。模组:
-
目录
org.ggp.base/src/main/java 中的org.ggp.base 和module-info.java 。在开始更新Java 9之前,它的构建是通过Gradle自动化的。该模块使用pl.edu.prz.klopusz 模块中包含的抽象类实现。 -
目录
pl.edu.prz.klopusz/dolar-app/src/main/java 中的pl.edu.prz.klopusz 。我想使用Maven自动化其构建。该模块需要org.ggp.base 模块。
文件树如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | . ├── 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 |
org.ggp.base / src / main / java / module-info.java
1 2 3 4 5 6 7 8 9 | module org.ggp.base { requires guava; requires reflections; requires jdk.httpserver; uses org.ggp.base.util.statemachine.StateMachine; exports org.ggp.base; } |
pl.edu.prz.klopusz / dolar-app / src / main / java / module-info.java
1 2 3 4 5 6 | module pl.edu.prz.klopusz { requires org.ggp.base; provides org.ggp.base.util.statemachine.StateMachine with pl.edu.prz.klopusz.utilities.decorators.StateMachineDecorator; } |
汇编
我尝试使用以下命令来编译项目:
1 2 3 4 | 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) |
失误
我收到以下错误:
org.ggp.base/src/main/java/module-info.java:1:
1 error: module not found on module source pathmodule org.ggp.base {
和
org.ggp.base/src/main/java/external/JSON/JSONObject.java:1:
1 error: not in a module on the module source pathpackage external.JSON;
或
org.ggp.base/src/main/java/org/ggp/base/validator/OPNFValidator.java:1:
1 error: not in a module on the module source pathpackage org.ggp.base.validator;
我想要的是
我想摆脱错误并编译项目。我不必保留目录结构,但是当我将它们全部组合在一起并带有2个
我已经发现的
很难在
if you arrange the code in your
modules such that you put the code for a module in an enclosing
directory named for the module, the module source path becomes more like
a simple path, as in
1 --module-source-path Users/Me/MyProject/srcor if it is in multiple projects, use
1
2 --module-source-path
/Users/Me/MyProject/src:/Users/Me/MyOtherProject/src
对于Windows,请使用反斜杠和分号,但无论如何我都在使用Linux。
OpenJDK错误站点上也有关于该问题的评论,与我的错误相同,但我想它仍然没有解决。
更新
我在命令末尾添加了
1 2 3 4 5 6 7 8 9 10 11 | [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 |
因此,我认为这不是
这些是
的第一行
1 2 3 4 5 6 7 8 9 10 | 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 { //... } |
根据JEP 261,
要适应源代码未直接包含在模块目录中的布局,该选项支持以下模式:令牌
JEP 261没有提到任何可能出现模式
稍有关联,我可能会补充说,在先前的讨论中,我获悉JEP 261包含过时的信息,但我的问题是在JEP完成后是否以及在何处维护此规范,这一问题没有答案。 javac手动输入不是为
之类的选项提供足够详细信息的地方。
出于完整性考虑,完整的
1 | javac -d out --module-source-path"./*/src/main/java/" $(find . -name"*.java") |
基于来自OpenJDK的官方教程(如下所示略微修改的目录结构)和OpenJDK版本" 11.0.1",上述命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | . ├── com.greetings │ └── src │ └── main │ └── java │ ├── com │ │ └── greetings │ │ └── Main.java │ └── module-info.java ├── org.astro │ └── src │ └── main │ └── java │ ├── module-info.java │ └── org │ └── astro │ └── World.java ├── out │ ├── classes │ │ ├── com.greetings │ │ │ ├── com │ │ │ │ └── greetings │ │ │ │ └── Main.class │ │ │ └── module-info.class │ │ └── org.astro │ │ ├── module-info.class │ │ └── org │ │ └── astro │ │ └── World.class │ └── lib │ ├── com.greetings.jar │ └── org.astro@1.0.jar |