如何显示 Gradle JavaExec 任务的 log4j 输出?

How do I display log4j output for a Gradle JavaExec task?

我想使用 Gradle 任务为 salesforce dataloader 执行 java 命令,这样我们就可以在一个独立的项目中完成数据加载任务。我已将数据加载器安装到我的本地 Maven 存储库中,并按如下方式设置我的 gradle 项目:

build.gradle:

apply plugin: 'groovy'

repositories {
    mavenCentral()
    mavenLocal()
}

dependencies {
    compile gradleApi()
    compile 'com.force:dataloader:42.0.0'
    compile 'org.codehaus.groovy:groovy-all:2.4.7'
}

task generateKey(type: JavaExec) {
    classpath sourceSets.main.runtimeClasspath

    main = 'com.salesforce.dataloader.security.EncryptionUtil'

    args '-g', 'seedText'
}

问题

当我执行 gradle generateKey 时,任务成功完成,但显示了 EncryptionUtil 输出的 none。我怀疑这是因为数据加载器使用 log4j 记录器而不是直接打印到标准输出?我需要做一些进一步的配置吗?

我也试过一个直接调用 EncryptionUtil.main('-g', 'seedText') 的任务,但它也不会显示任何输出,除非我 运行 任务处于 --info 模式。

感谢您的帮助!我感谢反馈和我没有想到的任何选项。我们是一家 gradle 商店,但也许有更好的解决方案。

布拉格。我没有使用 ./gradlew。往前走,没什么可看的。

  1. 为了将 log4j 配置注入到您的 javaexec 任务中,您需要使用以下结构(参见类路径参数):

         //print you classpath fileCollection
         sourceSets.main.runtimeClasspath.each { println it}
    
         def result = javaexec {
                logger.lifecycle "executing cli command PoC"
                classpath sourceSets.main.runtimeClasspath  //inject classpath
                main = "io.github.rockitconsulting.test.rockitizer.cli.RockitizerCLI"
                jvmArgs  = ["-Dapp.home=${config.testProjectDir}"] 
                args = ["create-test","AlexOne"]
         }           
    
  2. 通过添加 log4j.xmllog4j.properties 添加目录它到 build.gradle 中的依赖块,如下所示:

       dependencies {
       runtime files(projectDir)
       compile fileTree(dir: 'lib/ib10', include: '*.jar')
    }