Eclipse no puede encontrar el módulo incluso se proporciona explícitamente la ruta del módulo

Vesontio:

He creado un módulo com.company.epque se encuentra en la carpeta de origen com.company.ep. (Sí, me he retirado srcde la trayectoria de la estructura y borrado!) Dentro de la carpeta de origen, tengo un par de paquetes como los siguientes:

com.company.ep    <--- root source folder
    com.company.ep.main    <--- package 1
    com.company.ep.model   <--- package 2
    com.company.ep.view    <--- package 3
    // ... more packages
    module-info.java

La clase principal se encuentra en el paquete com.company.ep.main.Main. En mi module-info.java, He configurado las dependencias:

module com.company.ep {
    exports com.company.ep.main;
    exports com.company.ep.model;
    exports com.company.ep.view;
    // ... more exports
    requires javafx.controls;
    requires javafx.graphics;
}

Cuando traté de lanzar mi programa, eclipse me dijo que:

Error occurred during initialization of boot layer
java.lang.module.FindException: Module javafx.controls not found, required by com.company.ep

Por lo tanto, traté de ejecutarlo en el símbolo del sistema:

java -p d:\Applications\openjfx-sdk-11\lib;bin -m com.company.ep/com.company.ep.main.Main

bines la carpeta de salida del eclipse, y funcionó .

Por lo tanto, fui a Properties → Run/Debug Settings → Main → Show Command Line, mostró:

D:\Applications\openjdk-11.0.1\bin\javaw.exe -Dfile.encoding=UTF-8 -p "D:\Development\Eclipse-Workspace\MyProject\bin" -classpath "D:\Applications\openjfx-sdk-11\lib\javafx.base.jar;D:\Applications\openjfx-sdk-11\lib\javafx.controls.jar;D:\Applications\openjfx-sdk-11\lib\javafx.fxml.jar;D:\Applications\openjfx-sdk-11\lib\javafx.graphics.jar;D:\Applications\openjfx-sdk-11\lib\javafx.media.jar;D:\Applications\openjfx-sdk-11\lib\javafx.swing.jar;D:\Applications\openjfx-sdk-11\lib\javafx.web.jar;D:\Applications\openjfx-sdk-11\lib\javafx-swt.jar" -m com.company.ep/com.company.ep.main.Main

He creado una biblioteca de usuario con todos los JAR añadido, y se añade a la biblioteca del proyecto ModulePath .

Luego he tratado de establecer la ruta de forma explícita en el módulo VM argumentsen Run/Debug Settings: -p D:\Applications\openjfx-sdk-11\lib, me sigue sin suerte.

Mis preguntas son:

  • ¿Por qué javaw.exe?
  • ¿Por qué classpath? A medida que se añade mi biblioteca como una entrada ruta_módulo.
  • Cómo configurar las dependencias del módulo en eclipse.

No estoy seguro de si he configurado Eclipse correctamente, o si es probable que sea un problema de OpenJDK, ya que trabajó cuando trabajaba en otro equipo con Oracle Java SE instalado.

¡Gracias!

José Pereda :

La explicación de por qué Eclipse falla en el funcionamiento de su proyecto modular se puede encontrar en los documentos OpenJFX para Eclipse (IDE modulares de la sección).

Como ya se mencionó:

Al ser un proyecto modular, y desde ya añadimos la biblioteca JavaFX SDK para el módulo de la ruta, no hay necesidad de añadir ningún argumento de VM.

Sin embargo, si se ejecuta en Eclipse obtendrá el error mencionado:

Un error ocurrió durante la inicialización de java.lang.module.FindException capa de arranque: javafx.graphics módulo no encontraron, requerido por hellofx

¿Por qué es fallando ??

Como se explica en la documentación:

Esta excepción se debe a que la tarea ant Eclipse anula el ruta_módulo

¿¿Como sucedió esto??

Comprobación de la línea de comandos aplicado ( Show Command Linedesde Ejecutar configuraciones ...), se puede averiguar por qué:

$JAVA_HOME/bin/java -Dfile.encoding=UTF-8 \
    -p bin/hellofx \
    -classpath $PATH_TO_FX \
    -m hellofx/org.openjfx.MainApp 

Si lo copia y lo pega y lo ejecuta en un terminal, se producirá un error, por supuesto, con el mismo mensaje. La razón es que Eclipse no añade la biblioteca JavaFX a la ruta del módulo.

Si la tarea genera los argumentos equivocados, vamos a tratar de solucionarlo mediante la adición de nuestros propios argumentos de VM mediante la edición de configuraciones de ejecución ... y sumando -p $PATH_TO_FX:bin/hellofx.

Pero si lo ejecuta, se producirá un error de nuevo.

Let cheque de por qué, con el Show Command Linede Ejecutar configuraciones ...

$JAVA_HOME/bin/java -Dfile.encoding=UTF-8 \
    -p $PATH_TO_FX:bin/hellofx \
    -p bin/hellofx \
    -classpath $PATH_TO_FX \
    -m hellofx/org.openjfx.MainApp 

Como se puede ver, argumentos de VM del usuario se añaden antes de los argumentos de la tarea de hormigas por defecto, por lo que hay dos -p( --module-path) opciones, y el primero de ellos (uno de los usuarios con los tarros de JavaFX) se sustituye con la segunda (sólo el módulo del proyecto ), por lo que, de nuevo, los frascos JavaFX no se añaden a la ruta del módulo, y por lo tanto se obtiene el error.

Entonces, ¿cómo podemos solucionarlo ??

Como se ha mencionado en la documentación vinculada, el arreglo posible es:

Para evitar este problema, haga clic en Ejecutar -> Ejecutar configuraciones ... -> Java Application -> Dependencias, seleccione Dependencias Override ... y añadir -p /path-to/javafx-sdk-11/lib:bin/hellofx, y pulse Ignorar.

Con esta solución, se puede ver que funciona, y se puede comprobar la línea de comandos:

$JAVA_HOME/bin/java -Dfile.encoding=UTF-8 \
    -p $PATH_TO_FX:bin/hellofx \
    -p bin/hellofx \
    -classpath $PATH_TO_FX \
    -p /path-to/javafx-sdk-11/lib:bin/hellofx \
    -m hellofx/org.openjfx.MainApp 

Básicamente estamos añadiendo de nuevo la opción de ruta del módulo "derecho", después de todos los fracasados.

Mientras que ahora el proyecto se ejecuta, la solución no es, obviamente, muy agradable.

Aquí se puede encontrar una muestra que se refiere a la documentación OpenJFX.

EDITAR

Sobre la base de los comentarios @kleopatra, otra solución para hacer que funcione es la siguiente:

Por alguna razón, el JavaFX11 biblioteca (que contiene frascos modulares) no se analiza y Eclipse no incluye esos frascos en su -popción, pero en la ruta de clase:

$JAVA_HOME/bin/java -Dfile.encoding=UTF-8 \
    -p bin/hellofx \
    -classpath $PATH_TO_FX \
    ...

Pero, si usted agrega esos frascos directamente a la ruta del módulo, lo hará añadirlos, y esto va a funcionar muy bien:

$JAVA_HOME/bin/java -Dfile.encoding=UTF-8 \
    -p bin/hellofx:$PATH_TO_FX/javafx.base.jar:...:$PATH_TO_FX/javafx.controls \
    ...

Eclipse ruta_módulo

Entonces, con esto no hay más necesidad de anular las dependencias.

EDIT 2

Como @mipa señala en un comentario, hubo un error presentado en este tema, y que ya ha sido resuelto. Lo he probado con Eclipse 2018-12 M2 Identificación (4.10.0M2) Cuerpo: 20181108 hasta 1653, y funciona con la JavaFX11biblioteca sólo (como debe ser):

$JAVA_HOME/bin/java -Dfile.encoding=UTF-8 \
    -p bin/hellofx:$PATH_TO_FX/javafx.base.jar:... \
    -m hellofx/org.openjfx.MainApp 

Eclipse 4.10

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=173756&siteId=1
Recomendado
Clasificación