ошибка: пакет org.apache.log4j не существует при запуске кода из cmd - PullRequest
1 голос
/ 27 июня 2019

При выполнении команды javac Main.java появляется ошибка package org.apache.log4j does not exist.

Main класс

public class Main {

    private static Logger logger = Logger.getLogger(Main.class);

    public static void main(String[] args) {
        BasicConfigurator.configure();

        logger.info("in Main class");
    }
}

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>groupId</groupId>
    <artifactId>example</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</project>

log4j.properties

log4j.rootCategory=debug,console
log4j.logger.com.demo.package=debug,console
log4j.additivity.com.demo.package=false

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.immediateFlush=true
log4j.appender.console.encoding=UTF-8

log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%d [%t] %-5p %c - %m%n

Я получаю сообщение об ошибке:

enter image description here

1 Ответ

0 голосов
/ 27 июня 2019

Допущение 1 (неверно): нет импорта в исходном классе → импорт должен быть добавлен

Похоже, что вам не хватает import операторов в вашем Main классе.Попробуйте это:

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;

public class Main {

    private static Logger logger = Logger.getLogger(Main.class);

    public static void main(String[] args) {
        BasicConfigurator.configure();

        logger.info("in Main class");
    }
} 

Реальная проблема (после того, как я исправил отображение изображения в посте)

Вы запускаете компиляцию не с maven buth с командной строкой javac.Без maven у вас не будет зависимостей, автоматически добавляемых в ваш путь к классам.

Если вы хотите запускать из командной строки

В этом случае вам нужно добавить log4j в ваш путь к классам.Это будет выглядеть так (работает из каталога исходников, который <project_root>\src\main\java в макете по умолчанию maven:

javac company/Main.java -cp %userprofile%\.m2\repository\log4j\log4j\1.2.17\log4j-1.2.17.jar

Я предполагаю, что ваше локальное хранилище Maven находится по умолчанию в пути Windows %userprofile%\.m2. Если он находится в какой-либо другой части (или Linux), вам нужно изменить путь на ваш log4j-1.2.17.jar.

В этом случае класс Main.class будет скомпилирован в тот же пакет, гдеMain.class is.

Если вы хотите скомпилировать с maven

Просто запустите mvn compile из каталога, где находится ваш pom.xml. Обратите внимание, что maven скомпилирует классы в targetкаталог, т. е. ваш скомпилированный класс будет иметь путь, подобный \target\classes\company\Main.class (относительно корня вашего проекта, где находится pom.xml).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...