Eclipse Photon + Maven + Log4j2 (ошибка при получении Модуль log4j.api не найден, требуется для xxx) - PullRequest
0 голосов
/ 29 июня 2018

Я скачал eclipse photon и попытался запустить очень простой пример с log4j2. Вот моя конфигурация

Структура проекта

Project Structure

Вот скриншот пути к модулю

Module Path screen shot

pom.xml

<properties>

    <java-version>10</java-version>

    <!-- Unit testing -->
    <junit.version>4.12</junit.version>
    <junit-jupiter-engine.version>5.2.0</junit-jupiter-engine.version>
    <junit-platform-runner.version>1.2.0</junit-platform-runner.version>

    <!-- Logging -->
    <log4j.version>2.11.0</log4j.version>
    <slf4j-api.verion>1.7.25</slf4j-api.verion>
    <jboss-logging.version>3.3.2.Final</jboss-logging.version>

    <maven-compiler-plugin.version>3.7.0</maven-compiler-plugin.version>
    <maven-surefire-plugin.version>2.21.0</maven-surefire-plugin.version>
    <exec-maven-plugin.version>1.6.0</exec-maven-plugin.version>
    <maven-failsafe-plugin.version>2.21.0</maven-failsafe-plugin.version>
    <maven-javadoc-plugin.version>3.0.0</maven-javadoc-plugin.version>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

</properties>

<dependencies>

    <!-- Unit Testing  -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>${junit-jupiter-engine.version}</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-runner</artifactId>
        <version>${junit-platform-runner.version}</version>
        <scope>test</scope>
    </dependency>

    <!-- Logging-->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4j.version}</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j.version}</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-jcl</artifactId>
        <version>${log4j.version}</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>${log4j.version}</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-jul</artifactId>
        <version>${log4j.version}</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j-api.verion}</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.jboss.logging</groupId>
        <artifactId>jboss-logging</artifactId>
        <version>${jboss-logging.version}</version>
        <scope>runtime</scope>
    </dependency>

</dependencies>

<build>
    <finalName>${project.artifactId}</finalName>
    <pluginManagement>
        <plugins>

            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>org.apache.maven.plugins</groupId>
                                    <artifactId>maven-enforcer-plugin</artifactId>
                                    <versionRange>[1.0.0,)</versionRange>
                                    <goals>
                                        <goal>enforce</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore />
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>

    <plugins>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven-compiler-plugin.version}</version>
            <configuration>
                <source>${java-version}</source>
                <target>${java-version}</target>
                <compilerArgument>-Xlint:all</compilerArgument>
                <showWarnings>true</showWarnings>
                <showDeprecation>true</showDeprecation>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>${maven-failsafe-plugin.version}</version>
            <executions>
                <execution>
                    <id>integration-test</id>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>${maven-javadoc-plugin.version}</version>
            <configuration>
                <additionalparam>-Xdoclint:none</additionalparam>
            </configuration>
        </plugin>
    </plugins>
</build>

Основной класс

package pk.training.basit;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Welcome {

    private static final Logger logger = LogManager.getLogger();

    public static void main(String[] args) {
        logger.info("Welcome to the Module System.");

        // Print the module name of the Welcome class
        Class<Welcome> cls = Welcome.class;
        Module mod = cls.getModule();
        String moduleName = mod.getName();
        System.out.format("Module Name: %s%n", moduleName);
    }
}

модуль-информация

module pk.training.basit {
    exports pk.training.basit;
    requires log4j.api;
}

Но когда я запускаю проект, я получаю сообщение об ошибке

Error occurred during initialization of boot layer
java.lang.module.FindException: Module log4j.api not found, required by pk.training.basit

Почему я получаю эту ошибку? Зависимости находятся в пути модуля.

Если я удаляю log4j2 из кода, а затем запускаю код со следующей информацией о модуле:

module pk.training.basit {
    exports pk.training.basit;
}

Тогда код работает нормально.

Так что, я что-то не так делаю, или это проблема maven eclipse, которая не может найти сторонние зависимости?

Спасибо

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

У меня точно такая же проблема.

Начиная с версии 2.10.0, Log4j API - это модуль Java (с модулем-info.java)

при наборе org.apache.logging.log4j eclipse предлагает мне дополнить его ядром. для основного плагина приложения log4j2. это ничего не меняет к проблеме

пока единственное решение - сломать модульность, удалив log4j-api из module-info.

если я сохраню log4j.api в модуле-info, я также получу это сообщение при импорте:

The package org.apache.logging.log4j is accessible from more than one module: log4j.api, org.apache.logging.log4j.core

и класс, который я ищу для импорта, отсутствует в log4j.core

0 голосов
/ 05 июля 2018

Неверное имя модуля API log4j, показанного выше (log4j.api). Имя модуля для Log4j API - org.apache.logging.log4j.

...