gpt4 book ai didi

java - 为什么 Log4j 中只有这个 Java import 语句有效,而另一个则无效?

转载 作者:行者123 更新时间:2023-11-30 03:31:04 24 4
gpt4 key购买 nike

我很好奇 Java 导入是如何工作的。例如,我刚刚运行了这个示例 log4j 代码,但它没有编译:

import org.apache.log4j.Logger;

import java.io.*;
import java.sql.SQLException;
import java.util.*;



public class log4jExample{
/* Get actual class name to be printed on */
static Logger log = Logger.getLogger(
log4jExample.class.getName());

public static void main(String[] args)
throws IOException,SQLException{

log.debug("Hello this is an debug message");
log.info("Hello this is an info message");
}
}

它给出了这个错误:

3 errors found:
File: C:\Users\adel\Desktop\various_topics\new_Java_Code\log4jExample.java [line: 1]
Error: package org.apache.log4j does not exist
File: C:\Users\adel\Desktop\various_topics\new_Java_Code\log4jExample.java [line: 13]
Error: cannot find symbol
symbol: class Logger
location: class log4jExample
File: C:\Users\adel\Desktop\various_topics\new_Java_Code\log4jExample.java [line: 13]
Error: cannot find symbol
symbol: variable Logger
location: class log4jExample

但是后来我有另一个类,它有这样的导入:

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

public class HelloWorldLog4J {

这个效果很好。我只是好奇,Java 实际上在哪里找到这些导入的库?谢谢

最佳答案

import 语句是一项功能,允许您在源代码中使用类型(和/或其成员)的简单名称,而不是其完全限定名称。例如,隐式

import java.lang.*;

添加到所有java编译单元(.java源文件)中允许您编写

String variable = "";

而不是

java.lang.String variable = "";

当您编译源代码时,编译器需要能够识别您使用的类型,以便判断您是否正确使用它们。典型javac compiler有以下 -cp 选项

-cp path or -classpath path

Specify where to find user class files, and (optionally) annotation processors and source files. This class path overrides the user class path in the CLASSPATH environment variable. If neither CLASSPATH, -cp nor -classpath is specified, the user class path consists of the current directory. See Setting the Class Path for more details.

此选项允许您指定任何已编译的 .class 文件(提取的或在库存档中,例如:.jar)的位置。

当您编译代码时(可能是通过 IDE 或构建工具),实际执行的内容类似于

javac -cp "/some/folder/with/classes:log4j2.jar" com/example/log4jExample.java

换句话说,它指的是包含所有日志记录类的 log4j2 库。您收到编译错误,因为您的类路径不包含名为 org.apache.log4j.Logger 的类,因此编译器无法验证您尝试执行的操作。在您的第二次尝试中,类路径确实包含一个名为 org.apache.logging.log4j.LogManager 的类(以及其他类)。<小时/>

org.apache.log4j.Logger 是 log4j 1 的一部分。它不是 log4j 2 的一部分。

关于java - 为什么 Log4j 中只有这个 Java import 语句有效,而另一个则无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29023040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com