1818 */
1919package org.elasticsearch.gradle.precommit
2020
21- import de.thetaphi.forbiddenapis.gradle.CheckForbiddenApis
22- import de.thetaphi.forbiddenapis.gradle.ForbiddenApisPlugin
23- import org.gradle.api.JavaVersion
2421import org.elasticsearch.gradle.ExportElasticsearchBuildResourcesTask
25- import org.gradle.api.JavaVersion
2622import org.gradle.api.Project
2723import org.gradle.api.Task
28- import org.gradle.api.file.FileCollection
24+ import org.gradle.api.artifacts.Configuration
2925import org.gradle.api.plugins.JavaBasePlugin
3026import org.gradle.api.plugins.quality.Checkstyle
31- import org.gradle.api.tasks.JavaExec
32- import org.gradle.api.tasks.StopExecutionException
33-
3427/**
3528 * Validation tasks which should be run before committing. These run before tests.
3629 */
@@ -39,8 +32,8 @@ class PrecommitTasks {
3932 /* * Adds a precommit task, which depends on non-test verification tasks. */
4033 public static Task create (Project project , boolean includeDependencyLicenses ) {
4134 List<Task > precommitTasks = [
42- configureForbiddenApis(project),
4335 configureCheckstyle(project),
36+ configureForbiddenApisCli(project),
4437 configureNamingConventions(project),
4538 project. tasks. create(' forbiddenPatterns' , ForbiddenPatternsTask . class),
4639 project. tasks. create(' licenseHeaders' , LicenseHeadersTask . class),
@@ -49,9 +42,6 @@ class PrecommitTasks {
4942 project. tasks. create(' thirdPartyAudit' , ThirdPartyAuditTask . class)
5043 ]
5144
52- // Configure it but don't add it as a dependency yet
53- configureForbiddenApisCli(project)
54-
5545 // tasks with just tests don't need dependency licenses, so this flag makes adding
5646 // the task optional
5747 if (includeDependencyLicenses) {
@@ -85,77 +75,60 @@ class PrecommitTasks {
8575 return project. tasks. create(precommitOptions)
8676 }
8777
88- private static Task configureForbiddenApis (Project project ) {
89- project. pluginManager. apply(ForbiddenApisPlugin . class)
90- project. forbiddenApis {
91- failOnUnsupportedJava = false
92- bundledSignatures = [' jdk-unsafe' , ' jdk-deprecated' , ' jdk-non-portable' , ' jdk-system-out' ]
93- signaturesURLs = [getClass(). getResource(' /forbidden/jdk-signatures.txt' ),
94- getClass(). getResource(' /forbidden/es-all-signatures.txt' )]
95- suppressAnnotations = [' **.SuppressForbidden' ]
96- }
97- project. tasks. withType(CheckForbiddenApis ) {
98- // we do not use the += operator to add signatures, as conventionMappings of Gradle do not work when it's configured using withType:
99- if (name. endsWith(' Test' )) {
100- signaturesURLs = project. forbiddenApis. signaturesURLs +
101- [ getClass(). getResource(' /forbidden/es-test-signatures.txt' ), getClass(). getResource(' /forbidden/http-signatures.txt' ) ]
102- } else {
103- signaturesURLs = project. forbiddenApis. signaturesURLs +
104- [ getClass(). getResource(' /forbidden/es-server-signatures.txt' ) ]
105- }
106- // forbidden apis doesn't support Java 11, so stop at 10
107- String targetMajorVersion = (project. compilerJavaVersion. compareTo(JavaVersion . VERSION_1_10 ) > 0 ?
108- JavaVersion . VERSION_1_10 :
109- project. compilerJavaVersion). getMajorVersion()
110- targetCompatibility = Integer . parseInt(targetMajorVersion) >= 9 ? targetMajorVersion : " 1.${ targetMajorVersion} "
111- }
112- Task forbiddenApis = project. tasks. findByName(' forbiddenApis' )
113- forbiddenApis. group = " " // clear group, so this does not show up under verification tasks
114-
115- return forbiddenApis
116- }
117-
11878 private static Task configureForbiddenApisCli (Project project ) {
119- project. configurations. create(" forbiddenApisCliJar" )
79+ Configuration forbiddenApisConfiguration = project. configurations. create(" forbiddenApisCliJar" )
12080 project. dependencies {
121- forbiddenApisCliJar ' de.thetaphi:forbiddenapis:2.5'
81+ forbiddenApisCliJar ( ' de.thetaphi:forbiddenapis:2.5' )
12282 }
123- Task forbiddenApisCli = project. tasks. create(' forbiddenApisCli ' )
83+ Task forbiddenApisCli = project. tasks. create(' forbiddenApis ' )
12484
12585 project. sourceSets. forEach { sourceSet ->
12686 forbiddenApisCli. dependsOn(
127- project. tasks. create(sourceSet. getTaskName(' forbiddenApisCli ' , null ), JavaExec ) {
87+ project. tasks. create(sourceSet. getTaskName(' forbiddenApis ' , null ), ForbiddenApisCliTask ) {
12888 ExportElasticsearchBuildResourcesTask buildResources = project. tasks. getByName(' buildResources' )
12989 dependsOn(buildResources)
130- classpath = project. files(
131- project. configurations. forbiddenApisCliJar,
90+ execAction = { spec ->
91+ spec. classpath = project. files(
92+ project. configurations. forbiddenApisCliJar,
93+ sourceSet. compileClasspath,
94+ sourceSet. runtimeClasspath
95+ )
96+ spec. executable = " ${ project.runtimeJavaHome} /bin/java"
97+ }
98+ inputs. files(
99+ forbiddenApisConfiguration,
132100 sourceSet. compileClasspath,
133101 sourceSet. runtimeClasspath
134102 )
135- main = ' de.thetaphi.forbiddenapis.cli.CliMain'
136- executable = " ${ project.runtimeJavaHome} /bin/java"
137- args " -b" , ' jdk-unsafe-1.8'
138- args " -b" , ' jdk-deprecated-1.8'
139- args " -b" , ' jdk-non-portable'
140- args " -b" , ' jdk-system-out'
141- args " -f" , buildResources. copy(" forbidden/jdk-signatures.txt" )
142- args " -f" , buildResources. copy(" forbidden/es-all-signatures.txt" )
143- args " --suppressannotation" , ' **.SuppressForbidden'
103+
104+ targetCompatibility = project. compilerJavaVersion
105+ bundledSignatures = [
106+ " jdk-unsafe" , " jdk-deprecated" , " jdk-non-portable" , " jdk-system-out"
107+ ]
108+ signaturesFiles = project. files(
109+ buildResources. copy(" forbidden/jdk-signatures.txt" ),
110+ buildResources. copy(" forbidden/es-all-signatures.txt" )
111+ )
112+ suppressAnnotations = [' **.SuppressForbidden' ]
144113 if (sourceSet. name == ' test' ) {
145- args " -f" , buildResources. copy(" forbidden/es-test-signatures.txt" )
146- args " -f" , buildResources. copy(" forbidden/http-signatures.txt" )
114+ signaturesFiles + = project. files(
115+ buildResources. copy(" forbidden/es-test-signatures.txt" ),
116+ buildResources. copy(" forbidden/http-signatures.txt" )
117+ )
147118 } else {
148- args " -f " , buildResources. copy(" forbidden/es-server-signatures.txt" )
119+ signaturesFiles + = project . files( buildResources. copy(" forbidden/es-server-signatures.txt" ) )
149120 }
150121 dependsOn sourceSet. classesTaskName
151- doFirst {
152- // Forbidden APIs expects only existing dirs, and requires at least one
153- FileCollection existingOutputs = sourceSet. output. classesDirs
154- .filter { it. exists() }
155- if (existingOutputs. isEmpty()) {
156- throw new StopExecutionException (" ${ sourceSet.name} has no outputs" )
157- }
158- existingOutputs. forEach { args " -d" , it }
122+ classesDirs = sourceSet. output. classesDirs
123+ ext. replaceSignatureFiles = { String ... names ->
124+ signaturesFiles = project. files(
125+ names. collect { buildResources. copy(" forbidden/${ it} .txt" ) }
126+ )
127+ }
128+ ext. addSignatureFiles = { String ... names ->
129+ signaturesFiles + = project. files(
130+ names. collect { buildResources. copy(" forbidden/${ it} .txt" ) }
131+ )
159132 }
160133 }
161134 )
0 commit comments