Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 错误:从cmd运行代码时,包org.apache.log4j不存在_Java_Maven_Cmd_Log4j - Fatal编程技术网

Java 错误:从cmd运行代码时,包org.apache.log4j不存在

Java 错误:从cmd运行代码时,包org.apache.log4j不存在,java,maven,cmd,log4j,Java,Maven,Cmd,Log4j,运行javac Main.java命令时,我得到一个包org.apache.log4j不存在错误 Mainclass public class Main { private static Logger logger = Logger.getLogger(Main.class); public static void main(String[] args) { BasicConfigurator.configure(); logger.info

运行
javac Main.java
命令时,我得到一个
包org.apache.log4j不存在
错误

Main
class

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>
我收到的错误消息是:

假设1(错误):源类中没有发布导入→ 必须增加进口 看起来您的
Main
类中缺少
import
语句。 试试这个:

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而是使用命令行
javac
运行编译。没有maven,就不会自动将依赖项添加到类路径中

如果要从命令行运行 在这种情况下,必须将log4j添加到类路径中。 它将如下所示(从sources目录运行,在默认maven布局中为
\src\main\java

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

我假设您的本地Maven repo位于默认的Windows路径
%userprofile%\.m2
。如果它位于其他部分(或Linux),您必须更改到
log4j-1.2.17.jar
的路径

在这种情况下,类
Main.class
将被编译到与
Main.class
相同的包中

如果你想用maven编译 只需从存放
pom.xml
的目录中运行
mvncile
。 请注意,maven会将类编译到
target
目录中,即编译后的类将位于类似
\target\classes\company\Main.class
的路径中(相对于项目根目录,即
pom.xml
所在的位置)。

假设1(错误):源类中没有发布导入→ 必须增加进口 看起来您的
Main
类中缺少
import
语句。 试试这个:

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而是使用命令行
javac
运行编译。没有maven,您不会自动将依赖项添加到类路径中

如果要从命令行运行 在这种情况下,必须将log4j添加到类路径中。 它将如下所示(从sources目录运行,在默认maven布局中为
\src\main\java

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

我假设您的本地Maven repo位于默认的Windows路径
%userprofile%\.m2
。如果它位于其他部分(或Linux),您必须更改到
log4j-1.2.17.jar
的路径

在这种情况下,类
Main.class
将被编译到与
Main.class
相同的包中

如果你想用maven编译 只需从存放
pom.xml
的目录中运行
mvncile

请注意,maven将把类编译到
target
目录中,即编译后的类将位于类似
\target\classes\company\Main.class
的路径中(相对于项目根目录,其中包含
pom.xml
).

我的类中有导入。好的,对不起,你能把你的项目发布到github吗?@kateswerg我终于明白了你的问题。你不是用maven运行你的项目,而是用cmd
javac
。需要将log4j添加到你的类路径中。我会很快更新答案。我添加了log4j\u HOME C:\Program Files\log4j-1.2.17.jar。压缩到环境变量和相同的目录到路径变量。这没有帮助。@kateswerg我已经更新了答案,请检查并尝试。我的类中有导入。好的,对不起,你能把你的项目发布到github吗?@kateswerg我终于明白了你的问题。你不是用maven运行你的项目,而是用cmd
javac。需要将log4j添加到类路径中。我将很快更新答案。我将log4j_HOME C:\Program Files\log4j-1.2.17.jar.zip添加到环境变量中,并将同一目录添加到路径变量中。这没有帮助。@kateswerg我已经更新了答案,请检查并重试。