Automático no módulos que se encuentran en Eclipse 2018-12 cuando se abre el proyecto

user27772:

Quiero cambiar de JDK de Oracle 8 a 11 utilizando JDK abierto Eclipse 2018-12. Tengo la siguiente situación:

En mi área de trabajo de Eclipse Tengo un proyecto llamado principal experto ejemplo con algún experto en dependencias my_dependency_1, my_dependency_2 que también están experta en proyectos en el mismo espacio de trabajo. Actualmente, sólo ejemplo es modular (y por lo tanto contiene una module-info.java ). Los otros proyectos no son modulares y están incluidas en el pom.xml así como requeridos módulos (automáticos) en el module-info.java de ejemplo . Reconocí el siguiente:

Cuando cierro los proyectos de Eclipse en mi espacio de trabajo, salvo ejemplo , todos los .jars (no modular) de dependencia sean incluidos correctamente desde el repositorio .m2 en el módulo de la ruta en forma de módulos automáticos y mi ejemplo de proyecto funciona muy bien. Puedo verificar esto mirando Ejecutar configuraciones> Argumentos> Mostrar la línea de comandos .

Por el contrario, cuando abro los proyectos con mis dependencias en mi espacio de trabajo, así, obtener las dependencias no incluidos en el módulo de la ruta y así el ejemplo del proyecto no se ejecuta (lo que resulta en un error durante la inicialización de la capa de arranque, java.lang .module.FindException: Módulo my_dependency_1, ... no lo encuentra, requerida por ejemplo ).

Mi pregunta es: ¿Es necesario para convertir todo my_dependencies_1, ... de no modular a dependencias modulares si quiero abrir y trabajar con ellos, junto con mi modular ejemplo proyecto en mi espacio de trabajo, o hay alguna opción que me permite mantener trabajar incluso con los proyectos de dependencia no modulares? Estoy en busca de una solución simple y limpia y no para un "Hack" con añadiendo manualmente materia enrrollada de los argumentos de inicio. Si esto no es posible yo preferiría tomar algún tiempo para convertir cada dependencia en uno modular con el inconveniente de que no son utilizables en otros proyectos más aún escrito para Java 8.

Gracias por la aclaración :)

Aquí es un ejemplo básico para la demostración:

pom.xml (de proyecto ejemplo )

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>example</artifactId>
  <version>1.0-SNAPSHOT</version>

  <dependencies>
    <dependency>
      <groupId>com.example</groupId>
      <artifactId>mydependency</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
  </dependencies>
</project>

Example.java (de proyecto ejemplo )

package example;
import mydependency.MyDependency;

public class Example {
    public static void main(String[] args) { 
        MyDependency.run();
    }
}

module-info.java (de proyecto ejemplo )

open module example {
    requires mydependency;
}

pom.xml (proyecto de mydependency )

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>mydependency</artifactId>
  <version>1.0-SNAPSHOT</version>
</project>

MyDependency.java (proyecto de mydependency )

package mydependency;
public class MyDependency {
    public static void run() {
        System.out.println("run");
    }
}

Línea de comandos cuando se ejecuta si el proyecto está cerrado (funciona correctamente) :

C:\me\jdk-11.0.1\bin\javaw.exe
-Dfile.encoding=UTF-8
-p "C:\me\workspace\example\target\classes;C:\me\.m2\repository\com\example\mydependency\1.0-SNAPSHOT\mydependency-1.0-SNAPSHOT.jar"
-m example/example.Example

Línea de comandos cuando se ejecuta si se abre proyecto (objetivo / clases de mydependency falta) :

C:\me\jdk-11.0.1\bin\javaw.exe
-Dfile.encoding=UTF-8
-p "C:\me\workspace\example\target\classes"
-m example/example.Example
Stephan Herrmann:

Un proyecto de origen no puede posiblemente ser un módulo automático, porque el nombre de un módulo automático se deriva del nombre de archivo jar.

Lo que necesita es:

  • mvn install en cada dependencia
  • Maven > Disable Workspace Resolution en cada proyecto que depende de un módulo automático (menú contextual del Explorador de paquetes)

ediciones:

  • Alternativamente, en lugar de desactivar resolución espacio de trabajo, todos los proyectos que contienen módulos automáticos se pueden cerrar.
  • Las personas afectadas por este mes de mayo campeón Eclipse Bug 543925 , donde una cooperación entre M2e y JDT podría ir más allá de lo especificado por JPMS: M2e podría decir JDT lo que será el nombre automática de módulo, si un determinado proyecto podría acceder desde ella de archivo JAR. Detrás de las escenas en ejecución de ese programa requeriría entonces a ignorar la resolución de espacio de trabajo, de manera que la JVM encuentra el archivo JAR necesario.

Supongo que te gusta

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