Error de Java 9: no está en un módulo en la ruta de origen del módulo
Tengo un proyecto escrito en Java 8 y quiero actualizarlo a Java 9. Así que separé las clases en 2 módulos separados. Módulos:
org.ggp.base
conmodule-info.java
en el directorioorg.ggp.base/src/main/java
. Su compilación se automatizó con Gradle antes de comenzar la actualización a Java 9. El módulo usa una implementación de clase abstracta incluida enpl.edu.prz.klopusz
módulo.pl.edu.prz.klopusz
en el directoriopl.edu.prz.klopusz/dolar-app/src/main/java
. Quiero automatizar su construcción usando Maven. El módulo requiereorg.ggp.base
módulo.El árbol de archivos se ve así:
.
├── 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
Los contenidos demodule-info.java
archivos es el siguiente:
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.javamodule pl.edu.prz.klopusz {
requires org.ggp.base;
provides org.ggp.base.util.statemachine.StateMachine
with pl.edu.prz.klopusz.utilities.decorators.StateMachineDecorator;
}
CompilacionIntento compilar el proyecto, usando el siguiente comando:
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)
ErroresObtuve el siguiente error:
org.ggp.base / src / main / java / module-info.java: 1:
error: module not found on module source pathmódulo org.ggp.base {
Y otros 99 errores para las clases dentroorg.ggp.base
paquete, cada uno es como:
org.ggp.base / src / main / java / external / JSON / JSONObject.java: 1:
error: not in a module on the module source pathpaquete externo.JSON;
o
org.ggp.base / src / main / java / org / ggp / base / validator / OPNFValidator.java: 1:
error: not in a module on the module source pathpaquete org.ggp.base.validator;Lo que quiero
Quiero deshacerme de los errores y compilar el proyecto. No tengo que preservar la estructura del directorio, pero cuando lo pongo todo junto, con 2module-info.java
archivos, el compilador se quejó de múltiples módulos. Lo puedo hacer por IntelliJ IDEA, no me importa y lo intenté. Pero no sé qué está sucediendo detrás de escena, y tampoco sé cómo manejar los errores (Package is empty: org.ggp.base
)
Fue difícil encontrar una documentación sobre--module-source-path
cambiar enjavac
mando.Este sitio es lo que encontré. Dice:
--module-source-path Users/Me/MyProject/srco si está en múltiples proyectos, use
--module-source-path /Users/Me/MyProject/src:/Users/Me/MyOtherProject/src
Y para Windows, use barras invertidas y punto y coma, pero de todos modos estoy usando Linux.
También hay un comentario sobre un problema.en el sitio de errores OpenJDK, con el mismo error que el mío, pero supongo que sigue sin resolverse.
ACTUALIZAR
-verbose
cambiaryo añadí-verbose
cambiar al final del comando. Eso es parte de lo que dice el compilador:
[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
Entonces, creo que esto no es culpa del camino en--module-source-path
cambiar (el mismo comportamiento ocurre con*src/main/java
señalado por @StephanHerrmann). Lee todas las fuentes de Java que debería leer. No hay problema con las fuentes en elpl.edu.prz.klopusz
módulo. Estas son las primeras líneas deorg.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 {
//...
}