¿Por qué mi servicio Java9 módulo no funciona?

Pengfei Zhang:
---------------------------------------------
package org.zpf.service;
public interface Services {
    void test();
}
module org.zpf.service.Services {
    exports org.zpf.service;
}
---------------------------------------------
package org.zpf.impl;
import org.zpf.service.Services;

public class Impl implements Services {
@Override
public void test() {
    System.out.println("Impl-1");
 }
}

module org.zpf.impl.Impl {
    requires org.zpf.service.Services;
    provides org.zpf.service.Services with org.zpf.impl.Impl;
}
----------------------------------------------
public class Demo {
   public static void main(String[] args) {
      ServiceLoader.load(Services.class).forEach(Services::test);
   }
}

module org.zpf.demo.Demo {
    requires org.zpf.service.Services;
    uses org.zpf.service.Services;
}

Estoy funcionando con este código con IntelliJ IDEA, pero parece que el submódulo no es running.The siguiente es la salida del programa:

/Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home/bin/java "-javaagent:/Applications/IntelliJ IDEA 2018.3.app/Contents/lib/idea_rt.jar=61434:/Applications/IntelliJ IDEA 2018.3.app/Contents/bin" -Dfile.encoding=UTF-8 -p /Users/tubetrue01/IDEA/Test/Demo/target/classes:/Users/tubetrue01/IDEA/Test/Services/target/classes -m org.zpf.demo.Demo/org.zpf.demo.Demo

Process finished with exit code 0
también:

Todo lo que necesita hacer es asegurarse de que el módulo

module org.zpf.impl  // fixing the name from that of question

está presente en el modulepath . Ejecutar el comando como compartida por usted desde la línea de comandos con una adición a la senda delimplmódulo funciona simplemente como se esperaba.

.../jdk-11.jdk/Contents/Home/bin/java -p .../Desktop/modular/out/production/demo:.../Desktop/modular/out/production/modular:.../Desktop/modular/out/production/impl -m org.zpf.demo.Demo/org.zpf.demo.Demo

imprime la salida expted

Impl-1

En su línea de comandos (formato sólo para facilitar la lectura)

-p /Users/tubetrue01/IDEA/Test/Demo/target/classes:
   /Users/tubetrue01/IDEA/Test/Services/target/classes

debe ser modificado para algo así como

-p /Users/tubetrue01/IDEA/Test/Demo/target/classes:
   /Users/tubetrue01/IDEA/Test/Services/target/classes:
   /Users/tubetrue01/IDEA/Test/Impl/target/classes

Con IntelliJ IDEA , puede hacer lo mismo con los siguientes pasos:

  1. Estructura del proyecto> Módulos
  2. Seleccione el Demomódulo> Navegar a Dependencias
  3. Añadir la dependencia [Fin de modal (Izquierda + )]> Módulo de dependencia
  4. Seleccionar Implmódulo y Aplicar.
  5. Ejecutar su Democlase ahora.

Supongo que te gusta

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