将log4j添加到build.gradle

wqsoz72f  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(201)

尝试在我的Eclipse中创建简单的Gradle Java项目。我使用的是LOG4J库,因此我的build.gradle看起来:

plugins {
    // Apply the java-library plugin to add support for Java Library
    id 'java-library'
}

repositories {
    // Use jcenter for resolving dependencies.
    // You can declare any Maven/Ivy/file repository here.
    jcenter()
}

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

    // This dependency is exported to consumers, that is to say found on their compile classpath.
    api 'org.apache.commons:commons-math3:3.6.1'

    // This dependency is used internally, and not exposed to consumers on their own compile classpath.
    implementation 'com.google.guava:guava:28.2-jre'

    // Use JUnit test framework
    testImplementation 'junit:junit:4.12'
}

我在这个文件中添加了两行,我希望这两行允许下载log4j库:

compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.13.3'
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.13.3'

但看起来这没有帮助,因为如果我用gradle构建项目,我会有编译错误。

The compile configuration has been deprecated for dependency declaration. This will fail with an error in Gradle 7.0. Please use the implementation or api configuration instead. Consult the upgrading guide for further information: https://docs.gradle.org/6.3/userguide/upgrading_version_5.html#dependencies_should_no_longer_be_declared_using_the_compile_and_runtime_configurations
        at build_d9ael385qeshfiepcaw3797hi$_run_closure2.doCall(/home/a/Documents/workspace-sts/l4j/build.gradle:21)
        (Run with --stacktrace to get the full stack trace of this deprecation warning.)

> Task :compileJava FAILED

我想我是用过时的方式声明了log4j(我从log4j手册中摘录了这些行)。但是如何在build.gradle中声明log4j,以便在我的项目中使用它们呢?
生成命令:

./gradlew build --refresh-dependencies --warning-mode all

我的主要课程是:

package l4j;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class aa {

    static Logger logger = Logger.getLogger(Log4jPropertiesConfigurationExample.class);
    public static void main(String[] args)
    {
        //PropertiesConfigurator is used to configure logger from properties file
        PropertyConfigurator.configure("log4j.properties");

        //Log in console in and log file
        logger.debug("Log4j appender configuration is successful !!");
    }

}
mnemlml8

mnemlml81#

如果您偶然发现了这个答案,请在复制和粘贴之前检查log4j-core的非易受攻击版本。
在编写本文时,2.16.0是唯一一个不受JNDI查找攻击的版本,而JNDI查找攻击非常容易被利用。您可以获得有关此CVE Report的更多数据。以及受this Apache security disclosure page上不同安全漏洞影响的所有版本的详细信息。
1.x版本应该是安全的,但可能会受到其他攻击depending on version的攻击。它也将于2015年8月5日结束使用,使用它可能是一个坏主意。
也就是说,在现代Gradle上,应该使用“dependencies”部分中的“implementation”来拉入此依赖关系。
例如:
implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.16.0'``implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.16.0'
“短期”替代方案:
implementation 'org.apache.logging.log4j:log4j-core:2.16.0'
较新的版本可以是found here

xeufq47z

xeufq47z2#

我想我是以过时的方式声明了log4j(我从log4j手册中摘录了这些行)。
仅仅因为手册/文档说用一种方法并不一定意味着它是准确的或正确的。文档可能是在compile配置还没有被弃用的时候写的。随着implementationapi配置的引入,没有必要使用compile配置。
只需将compile切换为实现,弃用警告就会消失。

implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.16.0'
implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.16.0'

相关问题