【发布时间】: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导入,
结果我无法编译我的简单类,
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