【问题标题】:Compiling Java program in terminal causes log error在终端中编译 Java 程序导致日志错误
【发布时间】:2020-09-21 20:02:05
【问题描述】:

我正在尝试在终端中编译一个 Java 程序:

包含所有导入的长版本:

javac -classpath bin:$OSPL_HOME/jar/dcpssaj5.jar:$OSPL_HOME/jar/dcpssaj5-sources.jar:$OSPL_HOME/jar/dcpssaj-osgi-bundle.jar:$OSPL_HOME/jar/dcpssaj-sources.jar:$OSPL_HOME/jar/dcpssaj.jar:$OSPL_HOME/jar/osplconf.jar:$OSPL_HOME/jar/tooling_common.jar:$OSPL_HOME/jar/dcpsprotobuf.jar:$OSPL_HOME/jar/cmdataadapter.jar:$OSPL_HOME/jar/cmapi.jar:$OSPL_HOME/jar/ddsface.jar:Libraries/httpclient-4.5.12.jar:Libraries/jersey-client-1.19.4.jar:Libraries/jersey-client-1.19.jar:Libraries/jersey-core-1.19.4.jar:Libraries/json-simple-1.1.1.jar:Libraries/json-simple-3.1.0.jar:Libraries/jsr311-api-1.1.1.jar:Libraries/mqtt-client-0.0.6.jar:Libraries/paho-mqtt-client-1.13.0.jar -sourcepath src/ src/afarcloud/Main/afarcloud_main.java

没有所有的导入:

javac -classpath bin:(jar_files) -sourcepath src/ src/afarcloud/Main/afarcloud_main.java

我添加了我认为所有必需的 jar,但是当我尝试在我的 Ubuntu 计算机上运行代码时,我收到以下与记录器相关的错误:

src/afarcloud/Log/UtilLog.java:3: error: package org.apache.log4j does not exist
import org.apache.log4j.Logger;
                       ^
src/afarcloud/Log/UtilLog.java:7: error: cannot find symbol
    private static Logger log = Logger.getLogger(UtilLog.class);
                   ^
  symbol:   class Logger
  location: class UtilLog
src/afarcloud/Log/UtilLog.java:7: error: cannot find symbol
    private static Logger log = Logger.getLogger(UtilLog.class);
                                ^
  symbol:   variable Logger
  location: class UtilLog
src/afarcloud/Log/UtilLog.java:10: error: cannot find symbol
        log = Logger.getLogger(clase);
              ^
  symbol:   variable Logger
  location: class UtilLog
4 errors

让我困惑的是 src/afarcloud 下没有名为“Log”的文件夹,所以我很困惑如何继续……非常感谢任何帮助,谢谢。

【问题讨论】:

    标签: java ubuntu logging terminal compiler-errors


    【解决方案1】:

    您应该使用通配符*指定目录的所有jar,而不是单独提及目录的jar文件,例如

    javac -d bin -cp .:$OSPL_HOME/jar/*:Libraries/*:lib/* -sourcepath src src/afarcloud/Main/afarcloud_main.java
    

    在哪里

    1. -d bin 指定了编译类的存放目录。
    2. .-cp-classpath 在类路径中包含当前目录。
    3. : 指定在类路径中使用多个位置的分隔符。
    4. $OSPL_HOME/jar/* 指定目录$OSPL_HOME/jar 中的所有文件。或者,您可以使用 $OSPL_HOME/jar/*.jar 仅指定 jar 文件。

    注意:确保您还在命令中指定apache-logging-log4j.jar 的位置,因为错误表明您错过了包含此 jar。

    【讨论】:

      【解决方案2】:

      看起来您缺少导入语句。综上所述,无法找到所有 Logger 对象,也无法创建任何新实例。

      尝试使用import org.apache.log4j.Logger;

      或通过 CLI 导入。 https://logging.apache.org/log4j/2.x/download.html

      【讨论】:

      • 您好,谢谢。我怀疑是这样,但是我不确定在哪里放置 import 语句,因为我对 Java 不是很熟悉。据我所知,我必须将导入语句放在我无法找到的src/afarcloud/Log/UtilLog.java 中。你知道我必须把它放在哪里吗,或者从提供的信息中可能无法说出来?
      • 这不是您需要的位置。通常,在您使用“记录器”的类中需要导入语句。我猜 /Log/UtilLog.java 是自动创建的,因为您尝试使用“Logger”类。这就是为什么你通常使用像 maven 或 gradle 这样的依赖管理器。你熟悉这个话题吗?
      • 我明白了,这是有道理的。由于我自己没有编写代码并且代码很多,因此尝试找出在哪里添加导入似乎是徒劳的。我不熟悉这个话题,不,因为我以前从未使用过 Java,但是在花了很长时间试图找到解决方案之后,我听说了 Maven。我想我得试试看。谢谢。
      【解决方案3】:

      您缺少对 org.apache.log4j 的 JAR 依赖。

      当然,这个 JAR 可以有更多的依赖关系。这可能是无休止的游戏。也许您可以使用 Maven 和 mavenized 项目,它们会为您处理依赖关系树。

      【讨论】:

      • 嗯,我明白了。我希望我可以避免涉及所有这些,因为 Java 只是我项目的一小部分,但这可能是一个好主意。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2018-02-06
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多