Как отобразить вывод log4j для задачи Gradle JavaExec?

Я хотел бы использовать задачи Gradle для выполнения команд Java для загрузчика данных salesforce, чтобы у нас могли быть задачи загрузки данных в автономном проекте. Я установил загрузчик данных в локальный репозиторий 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. Я подозреваю, что это потому, что dataloader использует log4j logger и не печатает напрямую в стандартный формат? Есть ли какая-то дополнительная настройка, которую мне нужно сделать?

Я также попробовал задачу, которая вызывает EncryptionUtil.main('-g', 'seedText') напрямую, но это также не будет показывать никакого вывода, если я не запущу задачу в режиме --info.

Спасибо за вашу помощь! Я ценю обратную связь и любые варианты, о которых я не думаю. Мы магазин, но, возможно, есть лучшее решение.

1 ответ

Решение

Blargh. Я не использовал ./gradlew, Двигайся, здесь нечего видеть.

  1. Чтобы внедрить конфигурацию log4j в вашу задачу javaexec, вам необходимо использовать следующую структуру (см. Параметр classpath):

         //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.xml или log4j.properties в путь к классам среды выполнения, добавив его в блок зависимостей в build.gradle следующим образом:

       dependencies {
       runtime files(projectDir)
       compile fileTree(dir: 'lib/ib10', include: '*.jar')
    }
    
Другие вопросы по тегам