web-dev-qa-db-fra.com

Utilisation de SLF avec les modules Java9

J'ai mis en place un petit projet de test en utilisant des modules Java 9. La structure ressemble à ceci:

.
├── build.gradle
└── src
    ├── main
    │   └── Java
    │       ├── module-info.Java
    │       └── slfTest
    │           └── Main.Java
    └── test
        └── Java
            └── slfTest
                └── MainTest.Java

(N'hésitez pas à cloner et à regarder vous-même: git clone https://github.com/michas2/slfTest.git)

Les classes Main et Main Test enregistrent uniquement une sortie simple:

    Logger logger = LoggerFactory.getLogger(Main.class);
    logger.info("Hello World");

gradle run fonctionne comme prévu, mais gradle test donne une exception ClassCastException.

    $ gradle run -q
    [main] INFO slfTest.Main - Hello World
    $ gradle test -q
    Java.lang.ClassCastException: org.slf4j.simple/org.slf4j.simple.SimpleLoggerFactory cannot be cast to org.gradle.internal.logging.slf4j.OutputEventListenerBackedLoggerContext
            at org.gradle.internal.logging.slf4j.Slf4jLoggingConfigurer.configure(Slf4jLoggingConfigurer.Java:42)
            at org.gradle.internal.logging.config.LoggingSystemAdapter.startCapture(LoggingSystemAdapter.Java:54)
            at org.gradle.internal.logging.services.DefaultLoggingManager$StartableLoggingSystem.start(DefaultLoggingManager.Java:297)
            at org.gradle.internal.logging.services.DefaultLoggingManager.start(DefaultLoggingManager.Java:73)
            at org.gradle.internal.logging.services.DefaultLoggingManager.start(DefaultLoggingManager.Java:37)
            at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.Java:83)
            at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.Java:64)
            at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.Java:62)
            at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.Java:67)

En supprimant le module Java 9, les choses fonctionnent à nouveau. Par conséquent, je suppose qu'il y a un problème d'accès au module. - Quelle est la bonne façon de le réparer?


Le contenu de module-info.Java est:

module slfTest {
    requires  org.slf4j;
    exports slfTest;
}

Lorsque gradle exécute les tests, gradle essaie d'injecter son propre serveur de journalisation. - Je suppose que c’est la partie où certains problèmes d’accès au module se posent.

17
michas
1
Akhil Jain