Конфигурация Gradle не работает для двух групп конфигурационных файлов и зависимостей

1

Я создаю проект Java для проверки производительности log4j и logback. Тест-коды для этих 2-утилиты одинаковы с помощью slf4j:

package com.boco.logb;

import java.util.concurrent.TimeUnit;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LoggerOneThread {
    public static final long TOTAL_TIMES = 4000 * 1000;
    private static final Logger logger = LoggerFactory
            .getLogger(LoggerOneThread.class);

    public static void main(String[] args) {
        long start = System.nanoTime();
        for (int i = 1; i < TOTAL_TIMES; i++) {
            logger.debug("This is a test message. This is another test message.");
        }
        long estimatedTime = TimeUnit.NANOSECONDS.toSeconds(System.nanoTime()
                - start);
        System.out.println("Write " + TOTAL_TIMES + " logs takes time "
                + estimatedTime + " s.");
    }
}

Когда я добавляю log4j.properties и соответствующие файлы jar ('log4j: log4j: 1.2.17' и 'org.slf4j: slf4j-log4j12: 1.7.7') в путь к классам, эта программа будет генерировать журналы log4j. Файл log4j.properties:

log4j.rootLogger = DEBUG, FILE

log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=log4j.log
log4j.appender.FILE.Append=true
log4j.appender.FILE.MaxFileSize=50MB
log4j.appender.FILE.MaxBackupIndex=10
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{MM-dd HH:mm:ss.SSS} [%t] %p %c - %m%n

Если в classpath добавлен logback.xml и соответствующие jars ('ch.qos.logback: logback-classic: 1.1.2', 'ch.qos.logback: logback-core: 1.1.2'), он будет производить журналы журналов. Файл logback.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logback.log</file>

    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>logback.log.%i</fileNamePattern>
      <minIndex>1</minIndex>
      <maxIndex>11</maxIndex>
    </rollingPolicy>

    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>50MB</maxFileSize>
    </triggeringPolicy>

    <encoder>
      <pattern>%date{MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
    </encoder>
  </appender>

  <root level="DEBUG">
    <appender-ref ref="FILE" />
  </root>

</configuration>

Я попытался построить эти 2 конфигурации с Gradle, поэтому я могу запускать их соответственно:

gradle run log4j
gradle run logback

мой файл build.gradle:

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'application'

sourceSets {
    log4j {
        java {
            srcDir 'src'
        }
        resources {
            srcDir 'res/log4j'
        }
        output.dir 'build/classes/log4j'
    }

    logback {
        java {
            srcDir 'src'
        }
        resources {
            srcDir 'res/logback'
        }
        output.dir 'build/classes/logback'
    }
}

mainClassName = "com.boco.logb.LoggerOneThread"

sourceCompatibility = 1.6
version = '1.0'
repositories {
    mavenCentral()
}

dependencies {
    log4jCompile 'log4j:log4j:1.2.17', 'org.slf4j:slf4j-log4j12:1.7.7'
    log4jRuntime 'log4j:log4j:1.2.17', 'org.slf4j:slf4j-log4j12:1.7.7'
    logbackCompile 'ch.qos.logback:logback-classic:1.1.2', 'ch.qos.logback:logback-core:1.1.2'
    logbackRuntime 'ch.qos.logback:logback-classic:1.1.2', 'ch.qos.logback:logback-core:1.1.2'
}

Но когда я запускал gradle classes, не было файлов классов, созданных в build/classes/log4j или build/classes/logback. Как настроить, чтобы я мог запускать log4j и logback соответственно? Благодарю.

Теги:
gradle
logback
log4j

1 ответ

1
Лучший ответ

Задачи classess только строят источник для основного "основного" источника, который добавляется плагином Java. Однако, когда вы добавляете новый набор источников, плагин Java дополнительно добавляет <sourceSet>Classes для каждого определенного набора источников. Пытаться:

$ gradle log4jClasses

Вы можете найти более подробную информацию о том, как это работает в документах Gradle.

  • 0
    Большое спасибо. "log4jClasses" работает. Но почему «log4jBuild» и «log4jJar» «не найдены в корневом проекте ...», а «classes», «build» и «jar» оба перечислены в Gradle tasks предоставляемых плагином «java»? Я читал документы Gradle о наборе Souce, но не нашел объяснений.
  • 0
    Добавление исходного набора добавляет только задачу компиляции. Как вы упаковываете свою заявку, решать вам. Вы можете включить эти классы в jar по умолчанию или создать задачу Jar для каждого исходного набора.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню