【问题标题】:Gradle fails to load org.apache.logging.log4j dependencies properlyGradle 无法正确加载 org.apache.logging.log4j 依赖项
【发布时间】:2018-12-01 14:44:53
【问题描述】:

我遇到了一个问题,即 gradle 以某种方式无法使 org.apache.logging.log4j 依赖于应用程序。

下面是我的 gradle.build 文件,

plugins {
    id 'java'
    id 'war'
}

group 'com.hf'
version '1.0'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
    jcenter()
}

compileJava {
    options.compilerArgs += ["-proc:none"]
}

dependencies {
    compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.11.0'
    compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.11.0'
    compile group: 'org.apache.logging.log4j', name: 'log4j-jcl', version: '2.11.0'

    providedCompile 'org.hibernate:hibernate-core:5.3.7.Final'
    providedCompile 'javax.servlet:javax.servlet-api:3.0.1'

    testCompile group: 'junit', name: 'junit', version: '4.12'
}

这看起来很简单。我有 -proc:none 因为似乎存在一些弃用的问题。无论 proc:none 是否存在于 gradle 文件中,问题仍然存在。 gradle.build 的输出如下...

> Task :compileJava UP-TO-DATE
> Task :processResources UP-TO-DATE
> Task :classes UP-TO-DATE
> Task :war UP-TO-DATE
> Task :assemble UP-TO-DATE
> Task :compileTestJava NO-SOURCE
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
> Task :test NO-SOURCE
> Task :check UP-TO-DATE
> Task :build UP-TO-DATE

BUILD SUCCESSFUL in 6s
3 actionable tasks: 3 up-to-date

依赖文件也存在于缓存目录中, C:\Users\MY_USER_NAME.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j

包含以下目录: log4j log4j-api log4j-bom log4j-core log4j-jcl log4j-to-slf4j

所有这些都嵌套了各自的 log4j jar。

问题是eclipse无法识别log4j导入,

enter image description here

结果我无法编译我的简单类,

package com.hf.config;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;


/**
 * The Config class reduces the amount of magic strings in the application via the
 * getProperty method. It has a static string CONFIG_FILE indicating the path to the config file
 * which must be set manually
 * @version 1.0
 */
public class AppConfig
{
    static Logger log = LogManager.getLogger(AppConfig.class.getName());
    private static final String CONFIG_FILE = "./app_config.txt";

    /**
     * Gets a property from the CONFIG_FILE corresponding to propertyName
     * @param propertyName
     * @return a string value corresponding to propertyName
     */
    public static String getProperty(String propertyName)
    {
        Properties prop = new Properties();

        try(InputStream inStream = AppConfig.class.getClassLoader().getResourceAsStream(CONFIG_FILE))
        {
            if(inStream == null)
            {
                log.error("config error: did not find file '" + CONFIG_FILE + "', failed to load property " + propertyName);
                return null;
            }

            prop.load(inStream);
            return prop.getProperty(propertyName);
        } catch(IOException e)
        {   e.printStackTrace();            
        }

        log.error("config error: received property request '" + propertyName + "' which does not have a corresponding value in " + CONFIG_FILE);
        return propertyName;
    }
}

我对 gradle 很陌生,它是我们在工作中使用的东西,所以我试图将它作为我个人项目的依赖管理器合并,以便更熟悉它。可悲的是,我现在花了两天时间试图找到解决此问题的方法,并希望有更多知识或经验的人可以帮助我解决此问题。感谢您的帮助。

【问题讨论】:

    标签: java gradle dependencies log4j


    【解决方案1】:

    我通过从 Eclipse 中删除项目然后重新导入它来解决我的问题。这似乎刷新了所有错误的设置,一切正常。

    我最初感到沮丧的是安装 IntelliJ IDE。当我将项目导入 IntelliJ 时,一切正常 >___<.>

    这给了我从 Eclipse 中删除项目并重新导入它的想法,这也解决了该 IDE 中的问题。我只能猜测 gradle 或 eclipse 在某种程度上没有更新项目的状态。

    虽然我很高兴能通过这个,但我也很生气。希望这对以后遇到类似问题的人有所帮助。

    【讨论】:

      猜你喜欢
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      相关资源
      最近更新 更多