Ошибка Java 9: ​​нет в модуле по исходному пути модуляJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Ошибка Java 9: ​​нет в модуле по исходному пути модуля

Сообщение Anonymous »

Структура проекта

У меня есть проект, написанный на Java 8, и я хочу обновить его до Java 9. Поэтому я разделил классы на 2 отдельных модуля. Модули:
  • org.ggp.base с модулем-info.java в каталоге org.ggp.base/src/main/java. Его сборка была автоматизирована с помощью Gradle до того, как я начал обновление до Java 9. Модуль использует реализацию абстрактного класса, включенную в модуль pl.edu.prz.klopusz.
  • pl.edu.prz.klopusz в каталоге pl.edu.prz.klopusz/dolar-app/src/main/java. Я хочу автоматизировать его сборку с помощью 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


Содержимое файлов модуля-info.java следующее:

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

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

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)


Ошибки

Я получаю следующую ошибку:

< blockquote>
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:
error : нет в модуле по исходному пути модуля
package external.JSON;


или


org.ggp.base/src/main/java/org/ggp/base/validator/OPNFValidator.java:1:
ошибка: отсутствует в модуле по исходному пути модуля
package org.ggp.base.validator;


Что Я хочу

Я хочу избавиться от ошибок и скомпилировать проект. Мне не нужно сохранять структуру каталогов, но когда я собрал все это вместе с двумя файлами модуля-info.java, компилятор пожаловался на несколько модулей. Я могу поручить это IntelliJ IDEA, я не против и попробовал. Но я не знаю, что происходит за кулисами, и как обрабатывать ошибки тоже не знаю(Package is empty: org.ggp.base).

[img]https://i.stack.imgur.com /FmGXL.png[/img]


То, что я уже нашел

Трудно было найти документацию о ключе --module-source-path в команде javac. Этот сайт - это то, что я нашел. Там говорится:

если вы расположите код в своих
модулях так, что вы поместите код модуля во включающий
каталог, названный в честь модуль, путь к источнику модуля становится больше похожим на
простой путь, как в
--module-source-path Users/Me/MyProject/src
или если он находится в нескольких проекты, используйте

--module-source-path
/Users/Me/MyProject/src:/Users/Me/MyOtherProject/src



А для Windows используйте обратную косую черту и точку с запятой, но я все равно использую Linux.

На сайте ошибок OpenJDK также есть комментарий к проблеме с той же ошибкой, что и у меня, но я думаю, что она остается нерешенной.

ОБНОВЛЕНИЕ

-verbose переключатель

Я добавил переключатель -verbose в конце команды. Это часть того, что говорит компилятор:

[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


Итак, я думаю, что это не ошибка пути в ключе --module-source-path (то же самое поведение происходит с *src/main /java, на что указал @StephanHerrmann). Он читает все источники Java, которые должен прочитать. С исходниками в модуле pl.edu.prz.klopusz проблем нет.
Это первые строки org.ggp.base.util.statemachine.MachineState:

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 {
//...
}


Подробнее здесь: https://stackoverflow.com/questions/494 ... ource-path
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»