Use Gradle-version specific source sets
Instead of using Gradle-version specific compilation options, use distinct source sets. This also allows compilation of buildSrc/build-tools under IDEs that don't understand the version-specific compilation options. Relates to #22669
This commit is contained in:
parent
36198e0275
commit
12b6ff5233
|
@ -95,15 +95,16 @@ dependencies {
|
|||
// Gradle version-specific options (allows build to run with Gradle 2.13 as well as 2.14+/3.+)
|
||||
if (GradleVersion.current() == GradleVersion.version("2.13")) {
|
||||
// ProgressLogger(-Factory) classes are part of the public Gradle API
|
||||
// Add default imports for (org.gradle.logging)
|
||||
compileGroovy.groovyOptions.configurationScript = file('src/compile/groovy/gradle-2.13-loggers.groovy')
|
||||
sourceSets.main.groovy.srcDir 'src/main/gradle-2.13-groovy'
|
||||
|
||||
dependencies {
|
||||
compile 'ru.vyarus:gradle-animalsniffer-plugin:1.0.1' // last version compatible with Gradle 2.13
|
||||
}
|
||||
} else {
|
||||
// Gradle 2.14+ removed ProgressLogger(-Factory) classes from the public APIs
|
||||
// Use logging dependency and add default imports for "org.gradle.internal.logging.progress"
|
||||
compileGroovy.groovyOptions.configurationScript = file('src/compile/groovy/gradle-2.14-loggers.groovy')
|
||||
// Use logging dependency instead
|
||||
sourceSets.main.groovy.srcDir 'src/main/gradle-2.14-groovy'
|
||||
|
||||
dependencies {
|
||||
compileOnly "org.gradle:gradle-logging:${GradleVersion.current().getVersion()}"
|
||||
compile 'ru.vyarus:gradle-animalsniffer-plugin:1.2.0' // Gradle 2.14 requires a version > 1.0.1
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* Licensed to Elasticsearch under one or more contributor
|
||||
* license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright
|
||||
* ownership. Elasticsearch licenses this file to you under
|
||||
* the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.elasticsearch.gradle
|
||||
|
||||
import org.gradle.logging.ProgressLoggerFactory
|
||||
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* Allows to inject a ProgressLoggerFactory to tasks in src/main/groovy
|
||||
* without requiring the corresponding import of ProgressLoggerFactory,
|
||||
* making it compatible with both Gradle 2.13 and 2.14+.
|
||||
*/
|
||||
trait ProgressLoggerFactoryInjection {
|
||||
@Inject
|
||||
ProgressLoggerFactory getProgressLoggerFactory() {
|
||||
throw new UnsupportedOperationException()
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* Licensed to Elasticsearch under one or more contributor
|
||||
* license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright
|
||||
* ownership. Elasticsearch licenses this file to you under
|
||||
* the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.elasticsearch.gradle
|
||||
|
||||
import org.gradle.logging.ProgressLogger
|
||||
|
||||
/**
|
||||
* Wraps a ProgressLogger so that code in src/main/groovy does not need to
|
||||
* define imports on Gradle 2.13/2.14+ ProgressLoggers
|
||||
*/
|
||||
class ProgressLoggerWrapper {
|
||||
ProgressLogger progressLogger
|
||||
|
||||
ProgressLoggerWrapper(ProgressLogger progressLogger) {
|
||||
this.progressLogger = progressLogger
|
||||
}
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* Licensed to Elasticsearch under one or more contributor
|
||||
* license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright
|
||||
* ownership. Elasticsearch licenses this file to you under
|
||||
* the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.elasticsearch.gradle
|
||||
|
||||
import org.gradle.internal.logging.progress.ProgressLoggerFactory
|
||||
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* Allows to inject a ProgressLoggerFactory to tasks in src/main/groovy
|
||||
* without requiring the corresponding import of ProgressLoggerFactory,
|
||||
* making it compatible with both Gradle 2.13 and 2.14+.
|
||||
*/
|
||||
trait ProgressLoggerFactoryInjection {
|
||||
@Inject
|
||||
ProgressLoggerFactory getProgressLoggerFactory() {
|
||||
throw new UnsupportedOperationException()
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* Licensed to Elasticsearch under one or more contributor
|
||||
* license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright
|
||||
* ownership. Elasticsearch licenses this file to you under
|
||||
* the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.elasticsearch.gradle
|
||||
|
||||
import org.gradle.internal.logging.progress.ProgressLogger
|
||||
|
||||
/**
|
||||
* Wraps a ProgressLogger so that code in src/main/groovy does not need to
|
||||
* define imports on Gradle 2.13/2.14+ ProgressLoggers
|
||||
*/
|
||||
class ProgressLoggerWrapper {
|
||||
ProgressLogger progressLogger
|
||||
|
||||
ProgressLoggerWrapper(ProgressLogger progressLogger) {
|
||||
this.progressLogger = progressLogger
|
||||
}
|
||||
}
|
|
@ -8,6 +8,7 @@ import org.apache.tools.ant.BuildException
|
|||
import org.apache.tools.ant.DefaultLogger
|
||||
import org.apache.tools.ant.RuntimeConfigurable
|
||||
import org.apache.tools.ant.UnknownElement
|
||||
import org.elasticsearch.gradle.ProgressLoggerFactoryInjection
|
||||
import org.gradle.api.DefaultTask
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.gradle.api.file.FileTreeElement
|
||||
|
@ -21,9 +22,7 @@ import org.gradle.api.tasks.util.PatternFilterable
|
|||
import org.gradle.api.tasks.util.PatternSet
|
||||
import org.gradle.util.ConfigureUtil
|
||||
|
||||
import javax.inject.Inject
|
||||
|
||||
class RandomizedTestingTask extends DefaultTask {
|
||||
class RandomizedTestingTask extends DefaultTask implements ProgressLoggerFactoryInjection {
|
||||
|
||||
// TODO: change to "executable" to match gradle test params?
|
||||
@Optional
|
||||
|
@ -89,11 +88,6 @@ class RandomizedTestingTask extends DefaultTask {
|
|||
listenersConfig.listeners.add(new TestReportLogger(logger: logger, config: testLoggingConfig))
|
||||
}
|
||||
|
||||
@Inject
|
||||
ProgressLoggerFactory getProgressLoggerFactory() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
void jvmArgs(Iterable<String> arguments) {
|
||||
jvmArgs.addAll(arguments)
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@ import com.carrotsearch.ant.tasks.junit4.events.aggregated.AggregatedStartEvent
|
|||
import com.carrotsearch.ant.tasks.junit4.events.aggregated.AggregatedSuiteResultEvent
|
||||
import com.carrotsearch.ant.tasks.junit4.events.aggregated.AggregatedTestResultEvent
|
||||
import com.carrotsearch.ant.tasks.junit4.listeners.AggregatedEventListener
|
||||
import org.elasticsearch.gradle.ProgressLoggerWrapper
|
||||
|
||||
import static com.carrotsearch.ant.tasks.junit4.FormattingUtils.formatDurationInSeconds
|
||||
import static com.carrotsearch.ant.tasks.junit4.events.aggregated.TestStatus.ERROR
|
||||
|
@ -50,9 +51,7 @@ import static java.lang.Math.max
|
|||
* quick.
|
||||
*/
|
||||
class TestProgressLogger implements AggregatedEventListener {
|
||||
/** Factory to build a progress logger when testing starts */
|
||||
ProgressLoggerFactory factory
|
||||
ProgressLogger progressLogger
|
||||
ProgressLoggerWrapper progressLoggerWrapper
|
||||
int totalSuites
|
||||
int totalSlaves
|
||||
|
||||
|
@ -77,14 +76,17 @@ class TestProgressLogger implements AggregatedEventListener {
|
|||
/* Note that we probably overuse volatile here but it isn't hurting us and
|
||||
lets us move things around without worying about breaking things. */
|
||||
|
||||
TestProgressLogger(Map args) {
|
||||
progressLoggerWrapper = new ProgressLoggerWrapper(args.factory.newOperation(TestProgressLogger))
|
||||
progressLoggerWrapper.progressLogger.setDescription('Randomized test runner')
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
void onStart(AggregatedStartEvent e) throws IOException {
|
||||
totalSuites = e.suiteCount
|
||||
totalSlaves = e.slaveCount
|
||||
progressLogger = factory.newOperation(TestProgressLogger)
|
||||
progressLogger.setDescription('Randomized test runner')
|
||||
progressLogger.started()
|
||||
progressLogger.progress(
|
||||
progressLoggerWrapper.progressLogger.started()
|
||||
progressLoggerWrapper.progressLogger.progress(
|
||||
"Starting JUnit4 for ${totalSuites} suites on ${totalSlaves} jvms")
|
||||
|
||||
suitesFormat = "%0${widthForTotal(totalSuites)}d"
|
||||
|
@ -176,7 +178,7 @@ class TestProgressLogger implements AggregatedEventListener {
|
|||
log += "J${sprintf(slavesFormat, eventSlave)} "
|
||||
}
|
||||
log += "completed ${eventDescription}"
|
||||
progressLogger.progress(log)
|
||||
progressLoggerWrapper.progressLogger.progress(log)
|
||||
}
|
||||
|
||||
private static int widthForTotal(int total) {
|
||||
|
|
|
@ -20,6 +20,7 @@ package org.elasticsearch.gradle.vagrant
|
|||
|
||||
import com.carrotsearch.gradle.junit4.LoggingOutputStream
|
||||
import groovy.transform.PackageScope
|
||||
import org.elasticsearch.gradle.ProgressLoggerWrapper
|
||||
import org.gradle.api.GradleScriptException
|
||||
import org.gradle.api.logging.Logger
|
||||
|
||||
|
@ -36,7 +37,7 @@ import java.util.regex.Matcher
|
|||
* entire TAP stream at once and won't parse it stream-wise.
|
||||
*/
|
||||
public class TapLoggerOutputStream extends LoggingOutputStream {
|
||||
private final ProgressLogger progressLogger
|
||||
private final ProgressLoggerWrapper progressLoggerWrapper
|
||||
private boolean isStarted = false
|
||||
private final Logger logger
|
||||
private int testsCompleted = 0
|
||||
|
@ -47,14 +48,14 @@ public class TapLoggerOutputStream extends LoggingOutputStream {
|
|||
|
||||
TapLoggerOutputStream(Map args) {
|
||||
logger = args.logger
|
||||
progressLogger = args.factory.newOperation(VagrantLoggerOutputStream)
|
||||
progressLogger.setDescription("TAP output for `${args.command}`")
|
||||
progressLoggerWrapper = new ProgressLoggerWrapper(args.factory.newOperation(VagrantLoggerOutputStream))
|
||||
progressLoggerWrapper.progressLogger.setDescription("TAP output for `${args.command}`")
|
||||
}
|
||||
|
||||
@Override
|
||||
public void flush() {
|
||||
if (isStarted == false) {
|
||||
progressLogger.started()
|
||||
progressLoggerWrapper.progressLogger.started()
|
||||
isStarted = true
|
||||
}
|
||||
if (end == start) return
|
||||
|
@ -103,7 +104,7 @@ public class TapLoggerOutputStream extends LoggingOutputStream {
|
|||
|
||||
String counts = sprintf(countsFormat,
|
||||
[testsCompleted, testsFailed, testsSkipped, testCount])
|
||||
progressLogger.progress("Tests $counts, $status [$suiteName] $testName")
|
||||
progressLoggerWrapper.progressLogger.progress("Tests $counts, $status [$suiteName] $testName")
|
||||
if (!success) {
|
||||
logger.warn(line)
|
||||
}
|
||||
|
|
|
@ -19,16 +19,15 @@
|
|||
package org.elasticsearch.gradle.vagrant
|
||||
|
||||
import org.apache.commons.io.output.TeeOutputStream
|
||||
import org.elasticsearch.gradle.ProgressLoggerFactoryInjection
|
||||
import org.elasticsearch.gradle.LoggedExec
|
||||
import org.gradle.api.tasks.Input
|
||||
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* Runs a vagrant command. Pretty much like Exec task but with a nicer output
|
||||
* formatter and defaults to `vagrant` as first part of commandLine.
|
||||
*/
|
||||
public class VagrantCommandTask extends LoggedExec {
|
||||
public class VagrantCommandTask extends LoggedExec implements ProgressLoggerFactoryInjection {
|
||||
|
||||
@Input
|
||||
String boxName
|
||||
|
@ -56,9 +55,4 @@ public class VagrantCommandTask extends LoggedExec {
|
|||
stuff starts with ==> $box */
|
||||
squashedPrefix: "==> $boxName: ")
|
||||
}
|
||||
|
||||
@Inject
|
||||
ProgressLoggerFactory getProgressLoggerFactory() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
package org.elasticsearch.gradle.vagrant
|
||||
|
||||
import com.carrotsearch.gradle.junit4.LoggingOutputStream
|
||||
import org.gradle.api.logging.Logger
|
||||
import org.elasticsearch.gradle.ProgressLoggerWrapper
|
||||
|
||||
/**
|
||||
* Adapts an OutputStream being written to by vagrant into a ProcessLogger. It
|
||||
|
@ -45,7 +45,7 @@ import org.gradle.api.logging.Logger
|
|||
public class VagrantLoggerOutputStream extends LoggingOutputStream {
|
||||
private static final String HEADING_PREFIX = '==> '
|
||||
|
||||
private final ProgressLogger progressLogger
|
||||
private final ProgressLoggerWrapper progressLoggerWrapper
|
||||
private boolean isStarted = false
|
||||
private String squashedPrefix
|
||||
private String lastLine = ''
|
||||
|
@ -53,15 +53,15 @@ public class VagrantLoggerOutputStream extends LoggingOutputStream {
|
|||
private String heading = ''
|
||||
|
||||
VagrantLoggerOutputStream(Map args) {
|
||||
progressLogger = args.factory.newOperation(VagrantLoggerOutputStream)
|
||||
progressLogger.setDescription("Vagrant output for `$args.command`")
|
||||
progressLoggerWrapper = new ProgressLoggerWrapper(args.factory.newOperation(VagrantLoggerOutputStream))
|
||||
progressLoggerWrapper.progressLogger.setDescription("Vagrant output for `$args.command`")
|
||||
squashedPrefix = args.squashedPrefix
|
||||
}
|
||||
|
||||
@Override
|
||||
public void flush() {
|
||||
if (isStarted == false) {
|
||||
progressLogger.started()
|
||||
progressLoggerWrapper.progressLogger.started()
|
||||
isStarted = true
|
||||
}
|
||||
if (end == start) return
|
||||
|
@ -96,6 +96,6 @@ public class VagrantLoggerOutputStream extends LoggingOutputStream {
|
|||
} else {
|
||||
return
|
||||
}
|
||||
progressLogger.progress(line)
|
||||
progressLoggerWrapper.progressLogger.progress(line)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue