From 6ee2864725eedbf6b370fb67b7e22ef9fa07d693 Mon Sep 17 00:00:00 2001 From: Rene Groeschke Date: Tue, 19 May 2020 21:03:47 +0200 Subject: [PATCH] Fix deprecation warning in ThirdpartyAuditTask - this also fixes an issue with having project dependencies in compile only declared being ignored so far --- buildSrc/build.gradle | 26 ++++++++-- .../gradle/AdoptOpenJdkDownloadPluginIT.java | 0 .../elasticsearch/gradle/BuildPluginIT.java | 0 .../gradle/DistributionDownloadPluginIT.java | 0 ...portElasticsearchBuildResourcesTaskIT.java | 0 .../gradle/JdkDownloadPluginIT.java | 0 .../gradle/OpenJdkDownloadPluginIT.java | 0 .../elasticsearch/gradle/ReaperPluginIT.java | 0 .../precommit/TestingConventionsTasksIT.java | 0 .../precommit/ThirdPartyAuditTaskIT.java | 20 +++++--- .../tar/SymbolicLinkPreservingTarIT.java | 0 .../gradle/fake_adoptopenjdk_linux.tar.gz | Bin .../gradle/fake_adoptopenjdk_osx.tar.gz | Bin .../gradle/fake_adoptopenjdk_windows.zip | Bin .../gradle/fake_openjdk_linux.tar.gz | Bin .../gradle/fake_openjdk_osx.tar.gz | Bin .../gradle/fake_openjdk_windows.zip | Bin .../gradle/DependenciesInfoPlugin.groovy | 8 ++-- .../gradle/ElasticsearchJavaPlugin.java | 19 ++++---- .../CompileOnlyResolvePlugin.java | 45 ++++++++++++++++++ .../DependencyLicensesPrecommitPlugin.java | 5 +- .../ThirdPartyAuditPrecommitPlugin.java | 12 +++-- .../gradle/precommit/ThirdPartyAuditTask.java | 7 +-- .../gradle/test/BaseTestCase.java | 0 .../test/GradleIntegrationTestCase.java | 4 ++ .../gradle/test/GradleThreadsFilter.java | 0 .../gradle/test/GradleUnitTestCase.java | 0 .../gradle/test/JUnit3MethodProvider.java | 0 .../src/testKit/thirdPartyAudit/build.gradle | 8 ++-- .../thirdPartyAudit/sample_jars/build.gradle | 2 +- 30 files changed, 120 insertions(+), 36 deletions(-) rename buildSrc/src/{test => integTest}/java/org/elasticsearch/gradle/AdoptOpenJdkDownloadPluginIT.java (100%) rename buildSrc/src/{test => integTest}/java/org/elasticsearch/gradle/BuildPluginIT.java (100%) rename buildSrc/src/{test => integTest}/java/org/elasticsearch/gradle/DistributionDownloadPluginIT.java (100%) rename buildSrc/src/{test => integTest}/java/org/elasticsearch/gradle/ExportElasticsearchBuildResourcesTaskIT.java (100%) rename buildSrc/src/{test => integTest}/java/org/elasticsearch/gradle/JdkDownloadPluginIT.java (100%) rename buildSrc/src/{test => integTest}/java/org/elasticsearch/gradle/OpenJdkDownloadPluginIT.java (100%) rename buildSrc/src/{test => integTest}/java/org/elasticsearch/gradle/ReaperPluginIT.java (100%) rename buildSrc/src/{test => integTest}/java/org/elasticsearch/gradle/precommit/TestingConventionsTasksIT.java (100%) rename buildSrc/src/{test => integTest}/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditTaskIT.java (94%) rename buildSrc/src/{test => integTest}/java/org/elasticsearch/gradle/tar/SymbolicLinkPreservingTarIT.java (100%) rename buildSrc/src/{test => integTest}/resources/org/elasticsearch/gradle/fake_adoptopenjdk_linux.tar.gz (100%) rename buildSrc/src/{test => integTest}/resources/org/elasticsearch/gradle/fake_adoptopenjdk_osx.tar.gz (100%) rename buildSrc/src/{test => integTest}/resources/org/elasticsearch/gradle/fake_adoptopenjdk_windows.zip (100%) rename buildSrc/src/{test => integTest}/resources/org/elasticsearch/gradle/fake_openjdk_linux.tar.gz (100%) rename buildSrc/src/{test => integTest}/resources/org/elasticsearch/gradle/fake_openjdk_osx.tar.gz (100%) rename buildSrc/src/{test => integTest}/resources/org/elasticsearch/gradle/fake_openjdk_windows.zip (100%) create mode 100644 buildSrc/src/main/java/org/elasticsearch/gradle/dependencies/CompileOnlyResolvePlugin.java rename buildSrc/src/{test => testFixtures}/java/org/elasticsearch/gradle/test/BaseTestCase.java (100%) rename buildSrc/src/{test => testFixtures}/java/org/elasticsearch/gradle/test/GradleIntegrationTestCase.java (97%) rename buildSrc/src/{test => testFixtures}/java/org/elasticsearch/gradle/test/GradleThreadsFilter.java (100%) rename buildSrc/src/{test => testFixtures}/java/org/elasticsearch/gradle/test/GradleUnitTestCase.java (100%) rename buildSrc/src/{test => testFixtures}/java/org/elasticsearch/gradle/test/JUnit3MethodProvider.java (100%) diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 310e0e7915542..97bf4ae15827b 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -23,13 +23,14 @@ import org.gradle.util.GradleVersion plugins { id 'java-gradle-plugin' id 'groovy' + id 'java-test-fixtures' } group = 'org.elasticsearch.gradle' String minimumGradleVersion = file('src/main/resources/minimumGradleVersion').text.trim() if (GradleVersion.current() < GradleVersion.version(minimumGradleVersion)) { - throw new GradleException("Gradle ${minimumGradleVersion}+ is required to build elasticsearch") + throw new GradleException("Gradle ${minimumGradleVersion}+ is required to build elasticsearch") } if (project == rootProject) { @@ -75,6 +76,11 @@ allprojects { sourceSets { // We have a few classes that need to be compiled for older java versions minimumRuntime {} + + integTest { + compileClasspath += sourceSets["main"].output + configurations["testRuntimeClasspath"] + runtimeClasspath += output + compileClasspath + } } compileMinimumRuntimeJava { @@ -124,8 +130,10 @@ dependencies { compile 'com.networknt:json-schema-validator:1.0.36' compileOnly "com.puppycrawl.tools:checkstyle:${props.getProperty('checkstyle')}" testCompile "com.puppycrawl.tools:checkstyle:${props.getProperty('checkstyle')}" - testCompile "junit:junit:${props.getProperty('junit')}" - testCompile "com.carrotsearch.randomizedtesting:randomizedtesting-runner:${props.getProperty('randomizedrunner')}" + testFixturesApi "junit:junit:${props.getProperty('junit')}" + testFixturesApi "com.carrotsearch.randomizedtesting:randomizedtesting-runner:${props.getProperty('randomizedrunner')}" + testFixturesApi gradleApi() + testFixturesApi gradleTestKit() testCompile 'com.github.tomakehurst:wiremock-jre8-standalone:2.23.2' testCompile 'org.mockito:mockito-core:1.9.5' minimumRuntimeCompile "junit:junit:${props.getProperty('junit')}" @@ -167,10 +175,11 @@ if (project != rootProject) { // build-tools is not ready for primetime with these... dependencyLicenses.enabled = false dependenciesInfo.enabled = false - disableTasks('forbiddenApisMain', 'forbiddenApisMinimumRuntime', 'forbiddenApisTest') + disableTasks('forbiddenApisMain', 'forbiddenApisMinimumRuntime', + 'forbiddenApisTest', 'forbiddenApisIntegTest', 'forbiddenApisTestFixtures') jarHell.enabled = false thirdPartyAudit.enabled = false - if (Boolean.parseBoolean(System.getProperty("tests.fips.enabled"))){ + if (Boolean.parseBoolean(System.getProperty("tests.fips.enabled"))) { test.enabled = false } @@ -239,6 +248,8 @@ if (project != rootProject) { systemProperty 'test.version_under_test', version onlyIf { org.elasticsearch.gradle.info.BuildParams.inFipsJvm == false } maxParallelForks = System.getProperty('tests.jvms', org.elasticsearch.gradle.info.BuildParams.defaultParallel.toString()) as Integer + testClassesDirs = sourceSets.integTest.output.classesDirs + classpath = sourceSets.integTest.runtimeClasspath } check.dependsOn("integTest") @@ -254,6 +265,11 @@ if (project != rootProject) { afterEvaluate { generatePomFileForPluginMavenPublication.enabled = false } + + publishing.publications.named("nebula").configure { + suppressPomMetadataWarningsFor("testFixturesApiElements") + suppressPomMetadataWarningsFor("testFixturesRuntimeElements") + } } // Define this here because we need it early. diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/AdoptOpenJdkDownloadPluginIT.java b/buildSrc/src/integTest/java/org/elasticsearch/gradle/AdoptOpenJdkDownloadPluginIT.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/AdoptOpenJdkDownloadPluginIT.java rename to buildSrc/src/integTest/java/org/elasticsearch/gradle/AdoptOpenJdkDownloadPluginIT.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/BuildPluginIT.java b/buildSrc/src/integTest/java/org/elasticsearch/gradle/BuildPluginIT.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/BuildPluginIT.java rename to buildSrc/src/integTest/java/org/elasticsearch/gradle/BuildPluginIT.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/DistributionDownloadPluginIT.java b/buildSrc/src/integTest/java/org/elasticsearch/gradle/DistributionDownloadPluginIT.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/DistributionDownloadPluginIT.java rename to buildSrc/src/integTest/java/org/elasticsearch/gradle/DistributionDownloadPluginIT.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/ExportElasticsearchBuildResourcesTaskIT.java b/buildSrc/src/integTest/java/org/elasticsearch/gradle/ExportElasticsearchBuildResourcesTaskIT.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/ExportElasticsearchBuildResourcesTaskIT.java rename to buildSrc/src/integTest/java/org/elasticsearch/gradle/ExportElasticsearchBuildResourcesTaskIT.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/JdkDownloadPluginIT.java b/buildSrc/src/integTest/java/org/elasticsearch/gradle/JdkDownloadPluginIT.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/JdkDownloadPluginIT.java rename to buildSrc/src/integTest/java/org/elasticsearch/gradle/JdkDownloadPluginIT.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/OpenJdkDownloadPluginIT.java b/buildSrc/src/integTest/java/org/elasticsearch/gradle/OpenJdkDownloadPluginIT.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/OpenJdkDownloadPluginIT.java rename to buildSrc/src/integTest/java/org/elasticsearch/gradle/OpenJdkDownloadPluginIT.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/ReaperPluginIT.java b/buildSrc/src/integTest/java/org/elasticsearch/gradle/ReaperPluginIT.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/ReaperPluginIT.java rename to buildSrc/src/integTest/java/org/elasticsearch/gradle/ReaperPluginIT.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/precommit/TestingConventionsTasksIT.java b/buildSrc/src/integTest/java/org/elasticsearch/gradle/precommit/TestingConventionsTasksIT.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/precommit/TestingConventionsTasksIT.java rename to buildSrc/src/integTest/java/org/elasticsearch/gradle/precommit/TestingConventionsTasksIT.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditTaskIT.java b/buildSrc/src/integTest/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditTaskIT.java similarity index 94% rename from buildSrc/src/test/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditTaskIT.java rename to buildSrc/src/integTest/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditTaskIT.java index e5a19b072537f..c3f15a521cf9b 100644 --- a/buildSrc/src/test/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditTaskIT.java +++ b/buildSrc/src/integTest/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditTaskIT.java @@ -1,9 +1,3 @@ -package org.elasticsearch.gradle.precommit; - -import org.elasticsearch.gradle.test.GradleIntegrationTestCase; -import org.gradle.testkit.runner.BuildResult; -import org.junit.Before; - /* * Licensed to Elasticsearch under one or more contributor * license agreements. See the NOTICE file distributed with @@ -13,7 +7,7 @@ * 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 + * 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 @@ -22,6 +16,13 @@ * specific language governing permissions and limitations * under the License. */ + +package org.elasticsearch.gradle.precommit; + +import org.elasticsearch.gradle.test.GradleIntegrationTestCase; +import org.gradle.testkit.runner.BuildResult; +import org.junit.Before; + public class ThirdPartyAuditTaskIT extends GradleIntegrationTestCase { @Before @@ -41,6 +42,7 @@ public void testElasticsearchIgnored() { "-PcompileVersion=0.0.1" ).build(); assertTaskNoSource(result, ":empty"); + assertNoDeprecationWarning(result); } public void testWithEmptyRules() { @@ -69,6 +71,7 @@ public void testViolationFoundAndCompileOnlyIgnored() { assertTaskFailed(result, ":absurd"); assertOutputContains(result.getOutput(), "Classes with violations:", " * TestingIO", "> Audit of third party dependencies failed"); assertOutputDoesNotContain(result.getOutput(), "Missing classes:"); + assertNoDeprecationWarning(result); } public void testClassNotFoundAndCompileOnlyIgnored() { @@ -90,6 +93,7 @@ public void testClassNotFoundAndCompileOnlyIgnored() { "> Audit of third party dependencies failed" ); assertOutputDoesNotContain(result.getOutput(), "Classes with violations:"); + assertNoDeprecationWarning(result); } public void testJarHellWithJDK() { @@ -111,6 +115,7 @@ public void testJarHellWithJDK() { " * java.lang.String" ); assertOutputDoesNotContain(result.getOutput(), "Classes with violations:"); + assertNoDeprecationWarning(result); } public void testElasticsearchIgnoredWithViolations() { @@ -124,6 +129,7 @@ public void testElasticsearchIgnoredWithViolations() { "-PcompileVersion=0.0.1" ).build(); assertTaskNoSource(result, ":absurd"); + assertNoDeprecationWarning(result); } } diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/tar/SymbolicLinkPreservingTarIT.java b/buildSrc/src/integTest/java/org/elasticsearch/gradle/tar/SymbolicLinkPreservingTarIT.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/tar/SymbolicLinkPreservingTarIT.java rename to buildSrc/src/integTest/java/org/elasticsearch/gradle/tar/SymbolicLinkPreservingTarIT.java diff --git a/buildSrc/src/test/resources/org/elasticsearch/gradle/fake_adoptopenjdk_linux.tar.gz b/buildSrc/src/integTest/resources/org/elasticsearch/gradle/fake_adoptopenjdk_linux.tar.gz similarity index 100% rename from buildSrc/src/test/resources/org/elasticsearch/gradle/fake_adoptopenjdk_linux.tar.gz rename to buildSrc/src/integTest/resources/org/elasticsearch/gradle/fake_adoptopenjdk_linux.tar.gz diff --git a/buildSrc/src/test/resources/org/elasticsearch/gradle/fake_adoptopenjdk_osx.tar.gz b/buildSrc/src/integTest/resources/org/elasticsearch/gradle/fake_adoptopenjdk_osx.tar.gz similarity index 100% rename from buildSrc/src/test/resources/org/elasticsearch/gradle/fake_adoptopenjdk_osx.tar.gz rename to buildSrc/src/integTest/resources/org/elasticsearch/gradle/fake_adoptopenjdk_osx.tar.gz diff --git a/buildSrc/src/test/resources/org/elasticsearch/gradle/fake_adoptopenjdk_windows.zip b/buildSrc/src/integTest/resources/org/elasticsearch/gradle/fake_adoptopenjdk_windows.zip similarity index 100% rename from buildSrc/src/test/resources/org/elasticsearch/gradle/fake_adoptopenjdk_windows.zip rename to buildSrc/src/integTest/resources/org/elasticsearch/gradle/fake_adoptopenjdk_windows.zip diff --git a/buildSrc/src/test/resources/org/elasticsearch/gradle/fake_openjdk_linux.tar.gz b/buildSrc/src/integTest/resources/org/elasticsearch/gradle/fake_openjdk_linux.tar.gz similarity index 100% rename from buildSrc/src/test/resources/org/elasticsearch/gradle/fake_openjdk_linux.tar.gz rename to buildSrc/src/integTest/resources/org/elasticsearch/gradle/fake_openjdk_linux.tar.gz diff --git a/buildSrc/src/test/resources/org/elasticsearch/gradle/fake_openjdk_osx.tar.gz b/buildSrc/src/integTest/resources/org/elasticsearch/gradle/fake_openjdk_osx.tar.gz similarity index 100% rename from buildSrc/src/test/resources/org/elasticsearch/gradle/fake_openjdk_osx.tar.gz rename to buildSrc/src/integTest/resources/org/elasticsearch/gradle/fake_openjdk_osx.tar.gz diff --git a/buildSrc/src/test/resources/org/elasticsearch/gradle/fake_openjdk_windows.zip b/buildSrc/src/integTest/resources/org/elasticsearch/gradle/fake_openjdk_windows.zip similarity index 100% rename from buildSrc/src/test/resources/org/elasticsearch/gradle/fake_openjdk_windows.zip rename to buildSrc/src/integTest/resources/org/elasticsearch/gradle/fake_openjdk_windows.zip diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/DependenciesInfoPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/DependenciesInfoPlugin.groovy index d7496b76e2aa4..f9c261a17036c 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/DependenciesInfoPlugin.groovy +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/DependenciesInfoPlugin.groovy @@ -19,6 +19,7 @@ package org.elasticsearch.gradle +import org.elasticsearch.gradle.dependencies.CompileOnlyResolvePlugin import org.elasticsearch.gradle.precommit.DependencyLicensesTask import org.gradle.api.Plugin import org.gradle.api.Project @@ -27,15 +28,16 @@ import org.gradle.api.tasks.TaskProvider class DependenciesInfoPlugin implements Plugin { @Override - public void apply(Project project) { + void apply(Project project) { + project.getPlugins().apply(CompileOnlyResolvePlugin.class); TaskProvider depsInfo = project.getTasks().register("dependenciesInfo", DependenciesInfoTask.class); depsInfo.configure { DependenciesInfoTask t -> t.setRuntimeConfiguration(project.getConfigurations().getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME)); - t.setCompileOnlyConfiguration(project.getConfigurations().getByName(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME)); + t.setCompileOnlyConfiguration(project.getConfigurations().getByName(CompileOnlyResolvePlugin.RESOLVEABLE_COMPILE_ONLY_CONFIGURATION_NAME)); t.getConventionMapping().map("mappings") { -> TaskProvider depLic = project.getTasks().named("dependencyLicenses", DependencyLicensesTask.class); return depLic.get().getMappings(); } - }; + } } } diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/ElasticsearchJavaPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/ElasticsearchJavaPlugin.java index d2a8ec322d616..400b2d8171f9f 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/ElasticsearchJavaPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/ElasticsearchJavaPlugin.java @@ -45,6 +45,7 @@ import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.tasks.SourceSet; import org.gradle.api.tasks.SourceSetContainer; +import org.gradle.api.tasks.TaskProvider; import org.gradle.api.tasks.bundling.Jar; import org.gradle.api.tasks.compile.CompileOptions; import org.gradle.api.tasks.compile.GroovyCompile; @@ -96,12 +97,12 @@ public void apply(Project project) { /** * Makes dependencies non-transitive. - * + *

* Gradle allows setting all dependencies as non-transitive very easily. * Sadly this mechanism does not translate into maven pom generation. In order * to effectively make the pom act as if it has no transitive dependencies, * we must exclude each transitive dependency of each direct dependency. - * + *

* Determining the transitive deps of a dependency which has been resolved as * non-transitive is difficult because the process of resolving removes the * transitive deps. To sidestep this issue, we create a configuration per @@ -555,9 +556,6 @@ private static void configureJavadoc(Project project) { throw new UncheckedIOException(e); } - // remove compiled classes from the Javadoc classpath: - // http://mail.openjdk.java.net/pipermail/javadoc-dev/2018-January/000400.html - javadoc.setClasspath(Util.getJavaMainSourceSet(project).get().getCompileClasspath()); /* * Generate docs using html5 to suppress a warning from `javadoc` * that the default will change to html5 in the future. @@ -565,9 +563,14 @@ private static void configureJavadoc(Project project) { CoreJavadocOptions javadocOptions = (CoreJavadocOptions) javadoc.getOptions(); javadocOptions.addBooleanOption("html5", true); }); + + TaskProvider javadoc = project.getTasks().withType(Javadoc.class).named("javadoc"); + javadoc.configure(doc -> + // remove compiled classes from the Javadoc classpath: + // http://mail.openjdk.java.net/pipermail/javadoc-dev/2018-January/000400.html + doc.setClasspath(Util.getJavaMainSourceSet(project).get().getCompileClasspath())); + // ensure javadoc task is run with 'check' - project.getTasks() - .named(LifecycleBasePlugin.CHECK_TASK_NAME) - .configure(t -> t.dependsOn(project.getTasks().withType(Javadoc.class))); + project.getTasks().named(LifecycleBasePlugin.CHECK_TASK_NAME).configure(t -> t.dependsOn(javadoc)); } } diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/dependencies/CompileOnlyResolvePlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/dependencies/CompileOnlyResolvePlugin.java new file mode 100644 index 0000000000000..237b7712a2d01 --- /dev/null +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/dependencies/CompileOnlyResolvePlugin.java @@ -0,0 +1,45 @@ +/* + * 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.dependencies; + +import org.gradle.api.NamedDomainObjectProvider; +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.plugins.JavaPlugin; + +public class CompileOnlyResolvePlugin implements Plugin { + public static final String RESOLVEABLE_COMPILE_ONLY_CONFIGURATION_NAME = "resolveableCompileOnly"; + + @Override + public void apply(Project project) { + project.getConfigurations().all(configuration -> { + if (configuration.getName().equals(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME)) { + NamedDomainObjectProvider resolvableCompileOnly = project.getConfigurations() + .register(RESOLVEABLE_COMPILE_ONLY_CONFIGURATION_NAME); + resolvableCompileOnly.configure((c) -> { + c.setCanBeResolved(true); + c.setCanBeConsumed(false); + c.extendsFrom(configuration); + }); + } + }); + } +} diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/DependencyLicensesPrecommitPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/DependencyLicensesPrecommitPlugin.java index f1bc11a44c2d6..71d9c5e22be7e 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/DependencyLicensesPrecommitPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/DependencyLicensesPrecommitPlugin.java @@ -19,6 +19,7 @@ package org.elasticsearch.gradle.precommit; +import org.elasticsearch.gradle.dependencies.CompileOnlyResolvePlugin; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.artifacts.Configuration; @@ -29,13 +30,15 @@ public class DependencyLicensesPrecommitPlugin extends PrecommitPlugin { @Override public TaskProvider createTask(Project project) { + project.getPlugins().apply(CompileOnlyResolvePlugin.class); TaskProvider dependencyLicenses = project.getTasks() .register("dependencyLicenses", DependencyLicensesTask.class); // only require dependency licenses for non-elasticsearch deps dependencyLicenses.configure(t -> { Configuration runtimeClasspath = project.getConfigurations().getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME); - Configuration compileOnly = project.getConfigurations().getByName(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME); + Configuration compileOnly = project.getConfigurations() + .getByName(CompileOnlyResolvePlugin.RESOLVEABLE_COMPILE_ONLY_CONFIGURATION_NAME); t.setDependencies( runtimeClasspath.fileCollection(dependency -> dependency.getGroup().startsWith("org.elasticsearch") == false) .minus(compileOnly) diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditPrecommitPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditPrecommitPlugin.java index 5053f8b51fe0d..deaa4b3dddf0d 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditPrecommitPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditPrecommitPlugin.java @@ -20,6 +20,7 @@ package org.elasticsearch.gradle.precommit; import org.elasticsearch.gradle.ExportElasticsearchBuildResourcesTask; +import org.elasticsearch.gradle.dependencies.CompileOnlyResolvePlugin; import org.elasticsearch.gradle.info.BuildParams; import org.gradle.api.Project; import org.gradle.api.Task; @@ -28,19 +29,20 @@ public class ThirdPartyAuditPrecommitPlugin extends PrecommitPlugin { @Override public TaskProvider createTask(Project project) { + project.getPlugins().apply(CompileOnlyResolvePlugin.class); project.getConfigurations().create("forbiddenApisCliJar"); project.getDependencies().add("forbiddenApisCliJar", "de.thetaphi:forbiddenapis:2.7"); - TaskProvider buildResources = project.getTasks() - .named("buildResources", ExportElasticsearchBuildResourcesTask.class); - TaskProvider audit = project.getTasks().register("thirdPartyAudit", ThirdPartyAuditTask.class); audit.configure(t -> { - t.dependsOn(buildResources); - t.setSignatureFile(buildResources.get().copy("forbidden/third-party-audit.txt")); + t.dependsOn("buildResources"); t.setJavaHome(BuildParams.getRuntimeJavaHome().toString()); t.getTargetCompatibility().set(project.provider(BuildParams::getRuntimeJavaVersion)); + }); + project.getTasks() + .withType(ExportElasticsearchBuildResourcesTask.class) + .configureEach((br) -> { audit.get().setSignatureFile(br.copy("forbidden/third-party-audit.txt")); }); return audit; } } diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditTask.java b/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditTask.java index 61cb59b1b6f10..22c8ac2a813c0 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditTask.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditTask.java @@ -22,6 +22,7 @@ import org.apache.commons.io.output.NullOutputStream; import org.elasticsearch.gradle.JdkJarHellCheck; import org.elasticsearch.gradle.OS; +import org.elasticsearch.gradle.dependencies.CompileOnlyResolvePlugin; import org.gradle.api.DefaultTask; import org.gradle.api.GradleException; import org.gradle.api.JavaVersion; @@ -175,7 +176,7 @@ public Set getJarsToScan() { Spec reallyThirdParty = dep -> dep.getGroup() != null && dep.getGroup().startsWith("org.elasticsearch") == false; Set jars = getRuntimeConfiguration().getResolvedConfiguration().getFiles(reallyThirdParty); Set compileOnlyConfiguration = getProject().getConfigurations() - .getByName("compileOnly") + .getByName(CompileOnlyResolvePlugin.RESOLVEABLE_COMPILE_ONLY_CONFIGURATION_NAME) .getResolvedConfiguration() .getFiles(reallyThirdParty); // don't scan provided dependencies that we already scanned, e.x. don't scan cores dependencies for every plugin @@ -329,7 +330,7 @@ private String runForbiddenAPIsCli() throws IOException { spec.classpath( getForbiddenAPIsConfiguration(), getRuntimeConfiguration(), - getProject().getConfigurations().getByName("compileOnly") + getProject().getConfigurations().getByName(CompileOnlyResolvePlugin.RESOLVEABLE_COMPILE_ONLY_CONFIGURATION_NAME) ); spec.jvmArgs("-Xmx1g"); spec.setMain("de.thetaphi.forbiddenapis.cli.CliMain"); @@ -364,7 +365,7 @@ private Set runJdkJarHellCheck() throws IOException { spec.classpath( location.toURI().getPath(), getRuntimeConfiguration(), - getProject().getConfigurations().getByName("compileOnly") + getProject().getConfigurations().getByName(CompileOnlyResolvePlugin.RESOLVEABLE_COMPILE_ONLY_CONFIGURATION_NAME) ); } catch (URISyntaxException e) { throw new AssertionError(e); diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/test/BaseTestCase.java b/buildSrc/src/testFixtures/java/org/elasticsearch/gradle/test/BaseTestCase.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/test/BaseTestCase.java rename to buildSrc/src/testFixtures/java/org/elasticsearch/gradle/test/BaseTestCase.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/test/GradleIntegrationTestCase.java b/buildSrc/src/testFixtures/java/org/elasticsearch/gradle/test/GradleIntegrationTestCase.java similarity index 97% rename from buildSrc/src/test/java/org/elasticsearch/gradle/test/GradleIntegrationTestCase.java rename to buildSrc/src/testFixtures/java/org/elasticsearch/gradle/test/GradleIntegrationTestCase.java index da291b2472199..0b57e65388049 100644 --- a/buildSrc/src/test/java/org/elasticsearch/gradle/test/GradleIntegrationTestCase.java +++ b/buildSrc/src/testFixtures/java/org/elasticsearch/gradle/test/GradleIntegrationTestCase.java @@ -143,6 +143,10 @@ protected void assertTaskUpToDate(BuildResult result, String... taskNames) { } } + protected void assertNoDeprecationWarning(BuildResult result) { + assertOutputDoesNotContain(result.getOutput(), "Deprecated Gradle features were used in this build"); + } + protected void assertBuildFileExists(BuildResult result, String projectName, String path) { Path absPath = getBuildDir(projectName).toPath().resolve(path); assertTrue( diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/test/GradleThreadsFilter.java b/buildSrc/src/testFixtures/java/org/elasticsearch/gradle/test/GradleThreadsFilter.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/test/GradleThreadsFilter.java rename to buildSrc/src/testFixtures/java/org/elasticsearch/gradle/test/GradleThreadsFilter.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/test/GradleUnitTestCase.java b/buildSrc/src/testFixtures/java/org/elasticsearch/gradle/test/GradleUnitTestCase.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/test/GradleUnitTestCase.java rename to buildSrc/src/testFixtures/java/org/elasticsearch/gradle/test/GradleUnitTestCase.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/test/JUnit3MethodProvider.java b/buildSrc/src/testFixtures/java/org/elasticsearch/gradle/test/JUnit3MethodProvider.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/test/JUnit3MethodProvider.java rename to buildSrc/src/testFixtures/java/org/elasticsearch/gradle/test/JUnit3MethodProvider.java diff --git a/buildSrc/src/testKit/thirdPartyAudit/build.gradle b/buildSrc/src/testKit/thirdPartyAudit/build.gradle index 47818ffcd6194..efd5e50da6a74 100644 --- a/buildSrc/src/testKit/thirdPartyAudit/build.gradle +++ b/buildSrc/src/testKit/thirdPartyAudit/build.gradle @@ -1,11 +1,15 @@ +import org.elasticsearch.gradle.precommit.ThirdPartyAuditPrecommitPlugin import org.elasticsearch.gradle.precommit.ThirdPartyAuditTask + plugins { id 'java' // bring in build-tools onto the classpath id 'elasticsearch.global-build-info' apply false } +plugins.apply(ThirdPartyAuditPrecommitPlugin) + repositories { /** * Local test repo contains dummy jars with different group names and versions. @@ -23,12 +27,10 @@ repositories { jcenter() } -configurations.register("forbiddenApisCliJar") - dependencies { forbiddenApisCliJar 'de.thetaphi:forbiddenapis:2.7' compileOnly "org.${project.properties.compileOnlyGroup}:${project.properties.compileOnlyVersion}" - compile "org.${project.properties.compileGroup}:${project.properties.compileVersion}" + implementation "org.${project.properties.compileGroup}:${project.properties.compileVersion}" } tasks.register("empty", ThirdPartyAuditTask) { diff --git a/buildSrc/src/testKit/thirdPartyAudit/sample_jars/build.gradle b/buildSrc/src/testKit/thirdPartyAudit/sample_jars/build.gradle index a09f425a6c038..d4600086ca8c9 100644 --- a/buildSrc/src/testKit/thirdPartyAudit/sample_jars/build.gradle +++ b/buildSrc/src/testKit/thirdPartyAudit/sample_jars/build.gradle @@ -5,7 +5,7 @@ repositories { mavenCentral() } dependencies { - compile 'org.apache.logging.log4j:log4j-core:2.11.1' + implementation 'org.apache.logging.log4j:log4j-core:2.11.1' } ["0.0.1", "0.0.2"].forEach { v ->