Skip to content

Commit 12d583d

Browse files
authored
Remove unnecessary usage of Gradle dependency substitution rules (elastic#42773)
1 parent 6999304 commit 12d583d

File tree

90 files changed

+274
-359
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+274
-359
lines changed

benchmarks/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ archivesBaseName = 'elasticsearch-benchmarks'
2727
test.enabled = false
2828

2929
dependencies {
30-
compile("org.elasticsearch:elasticsearch:${version}") {
30+
compile(project(":server")) {
3131
// JMH ships with the conflicting version 4.6. This prevents us from using jopt-simple in benchmarks (which should be ok) but allows
3232
// us to invoke the JMH uberjar as usual.
3333
exclude group: 'net.sf.jopt-simple', module: 'jopt-simple'

build.gradle

Lines changed: 4 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -209,68 +209,7 @@ allprojects {
209209
javadoc.options.addStringOption('Xdoclint:all,-missing', '-quiet')
210210
}
211211

212-
/* Sets up the dependencies that we build as part of this project but
213-
register as though they were external to resolve internally. We register
214-
them as external dependencies so the build plugin that we use can be used
215-
to build elasticsearch plugins outside of the elasticsearch source tree. */
216-
ext.projectSubstitutions = [
217-
"org.elasticsearch.gradle:build-tools:${version}": ':build-tools',
218-
"org.elasticsearch:rest-api-spec:${version}": ':rest-api-spec',
219-
"org.elasticsearch:elasticsearch:${version}": ':server',
220-
"org.elasticsearch:elasticsearch-cli:${version}": ':libs:elasticsearch-cli',
221-
"org.elasticsearch:elasticsearch-core:${version}": ':libs:core',
222-
"org.elasticsearch:elasticsearch-nio:${version}": ':libs:nio',
223-
"org.elasticsearch:elasticsearch-x-content:${version}": ':libs:x-content',
224-
"org.elasticsearch:elasticsearch-geo:${version}": ':libs:elasticsearch-geo',
225-
"org.elasticsearch:elasticsearch-secure-sm:${version}": ':libs:secure-sm',
226-
"org.elasticsearch:elasticsearch-ssl-config:${version}": ':libs:elasticsearch-ssl-config',
227-
"org.elasticsearch.client:elasticsearch-rest-client:${version}": ':client:rest',
228-
"org.elasticsearch.client:elasticsearch-rest-client-sniffer:${version}": ':client:sniffer',
229-
"org.elasticsearch.client:elasticsearch-rest-high-level-client:${version}": ':client:rest-high-level',
230-
"org.elasticsearch.client:test:${version}": ':client:test',
231-
"org.elasticsearch.client:transport:${version}": ':client:transport',
232-
"org.elasticsearch.plugin:elasticsearch-scripting-painless-spi:${version}": ':modules:lang-painless:spi',
233-
"org.elasticsearch.test:framework:${version}": ':test:framework',
234-
"org.elasticsearch.test:logger-usage:${version}": ':test:logger-usage',
235-
"org.elasticsearch.xpack.test:feature-aware:${version}": ':x-pack:test:feature-aware',
236-
// for transport client
237-
"org.elasticsearch.plugin:transport-netty4-client:${version}": ':modules:transport-netty4',
238-
"org.elasticsearch.plugin:reindex-client:${version}": ':modules:reindex',
239-
"org.elasticsearch.plugin:lang-mustache-client:${version}": ':modules:lang-mustache',
240-
"org.elasticsearch.plugin:parent-join-client:${version}": ':modules:parent-join',
241-
"org.elasticsearch.plugin:aggs-matrix-stats-client:${version}": ':modules:aggs-matrix-stats',
242-
"org.elasticsearch.plugin:percolator-client:${version}": ':modules:percolator',
243-
"org.elasticsearch.plugin:rank-eval-client:${version}": ':modules:rank-eval',
244-
// for security example plugins
245-
"org.elasticsearch.plugin:x-pack-core:${version}": ':x-pack:plugin:core'
246-
]
247-
248-
/*
249-
* Gradle only resolve project substitutions during dependency resolution but
250-
* we sometimes want to do the resolution at other times. This creates a
251-
* convenient method we can call to do it.
252-
*/
253-
ext.dependencyToProject = { Dependency dep ->
254-
if (dep instanceof ProjectDependency) {
255-
return dep.dependencyProject
256-
} else {
257-
String substitution = projectSubstitutions.get("${dep.group}:${dep.name}:${dep.version}")
258-
if (substitution != null) {
259-
return findProject(substitution)
260-
}
261-
return null
262-
}
263-
}
264-
265212
project.afterEvaluate {
266-
configurations.matching { it.canBeResolved }.all {
267-
resolutionStrategy.dependencySubstitution { DependencySubstitutions subs ->
268-
projectSubstitutions.each { k,v ->
269-
subs.substitute(subs.module(k)).with(subs.project(v))
270-
}
271-
}
272-
}
273-
274213
// Handle javadoc dependencies across projects. Order matters: the linksOffline for
275214
// org.elasticsearch:elasticsearch must be the last one or all the links for the
276215
// other packages (e.g org.elasticsearch.client) will point to server rather than
@@ -279,10 +218,10 @@ allprojects {
279218
String artifactsHost = VersionProperties.elasticsearch.endsWith("-SNAPSHOT") ? "https://snapshots.elastic.co" : "https://artifacts.elastic.co"
280219
Closure sortClosure = { a, b -> b.group <=> a.group }
281220
Closure depJavadocClosure = { shadowed, dep ->
282-
if (dep.group == null || false == dep.group.startsWith('org.elasticsearch')) {
221+
if ((dep instanceof ProjectDependency) == false) {
283222
return
284223
}
285-
Project upstreamProject = project.ext.dependencyToProject(dep)
224+
Project upstreamProject = dep.dependencyProject
286225
if (upstreamProject == null) {
287226
return
288227
}
@@ -338,8 +277,8 @@ gradle.projectsEvaluated {
338277
integTest.mustRunAfter test
339278
}
340279
configurations.matching { it.canBeResolved }.all { Configuration configuration ->
341-
dependencies.all { Dependency dep ->
342-
Project upstreamProject = dependencyToProject(dep)
280+
dependencies.matching { it instanceof ProjectDependency }.all { ProjectDependency dep ->
281+
Project upstreamProject = dep.dependencyProject
343282
if (upstreamProject != null) {
344283
if (project.path == upstreamProject.path) {
345284
// TODO: distribution integ tests depend on themselves (!), fix that

buildSrc/build.gradle

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,11 @@ if (project != rootProject) {
148148
distribution project(':distribution:archives:linux-tar')
149149
distribution project(':distribution:archives:oss-linux-tar')
150150
}
151+
152+
// for external projects we want to remove the marker file indicating we are running the Elasticsearch project
153+
processResources {
154+
exclude 'buildSrc.marker'
155+
}
151156

152157
String localDownloads = "${rootProject.buildDir}/local-downloads"
153158
task setupLocalDownloads(type:Copy) {

buildSrc/src/main/groovy/org/elasticsearch/gradle/plugin/PluginBuildPlugin.groovy

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import org.elasticsearch.gradle.VersionProperties
2626
import org.elasticsearch.gradle.test.RestIntegTestTask
2727
import org.elasticsearch.gradle.test.RunTask
2828
import org.elasticsearch.gradle.testclusters.TestClustersPlugin
29+
import org.elasticsearch.gradle.tool.ClasspathUtils
2930
import org.gradle.api.InvalidUserDataException
3031
import org.gradle.api.Plugin
3132
import org.gradle.api.Project
@@ -136,8 +137,13 @@ class PluginBuildPlugin implements Plugin<Project> {
136137

137138
private static void configureDependencies(Project project) {
138139
project.dependencies {
139-
compileOnly "org.elasticsearch:elasticsearch:${project.versions.elasticsearch}"
140-
testCompile "org.elasticsearch.test:framework:${project.versions.elasticsearch}"
140+
if (ClasspathUtils.isElasticsearchProject()) {
141+
compileOnly project.project(':server')
142+
testCompile project.project(':test:framework')
143+
} else {
144+
compileOnly "org.elasticsearch:elasticsearch:${project.versions.elasticsearch}"
145+
testCompile "org.elasticsearch.test:framework:${project.versions.elasticsearch}"
146+
}
141147
// we "upgrade" these optional deps to provided for plugins, since they will run
142148
// with a full elasticsearch server that includes optional deps
143149
compileOnly "org.locationtech.spatial4j:spatial4j:${project.versions.spatial4j}"

buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/PrecommitTasks.groovy

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,13 @@ import de.thetaphi.forbiddenapis.gradle.CheckForbiddenApis
2323
import de.thetaphi.forbiddenapis.gradle.ForbiddenApisPlugin
2424
import org.elasticsearch.gradle.ExportElasticsearchBuildResourcesTask
2525
import org.elasticsearch.gradle.VersionProperties
26+
import org.elasticsearch.gradle.tool.ClasspathUtils
2627
import org.gradle.api.JavaVersion
2728
import org.gradle.api.Project
2829
import org.gradle.api.Task
2930
import org.gradle.api.plugins.JavaBasePlugin
3031
import org.gradle.api.plugins.quality.Checkstyle
32+
3133
/**
3234
* Validation tasks which should be run before committing. These run before tests.
3335
*/
@@ -40,18 +42,18 @@ class PrecommitTasks {
4042
public static Task create(Project project, boolean includeDependencyLicenses) {
4143
project.configurations.create("forbiddenApisCliJar")
4244
project.dependencies {
43-
forbiddenApisCliJar ('de.thetaphi:forbiddenapis:2.6')
45+
forbiddenApisCliJar('de.thetaphi:forbiddenapis:2.6')
4446
}
4547

4648
List<Task> precommitTasks = [
47-
configureCheckstyle(project),
48-
configureForbiddenApisCli(project),
49-
project.tasks.create('forbiddenPatterns', ForbiddenPatternsTask.class),
50-
project.tasks.create('licenseHeaders', LicenseHeadersTask.class),
51-
project.tasks.create('filepermissions', FilePermissionsTask.class),
52-
configureJarHell(project),
53-
configureThirdPartyAudit(project),
54-
configureTestingConventions(project)
49+
configureCheckstyle(project),
50+
configureForbiddenApisCli(project),
51+
project.tasks.create('forbiddenPatterns', ForbiddenPatternsTask.class),
52+
project.tasks.create('licenseHeaders', LicenseHeadersTask.class),
53+
project.tasks.create('filepermissions', FilePermissionsTask.class),
54+
configureJarHell(project),
55+
configureThirdPartyAudit(project),
56+
configureTestingConventions(project)
5557
]
5658

5759
// tasks with just tests don't need dependency licenses, so this flag makes adding
@@ -85,10 +87,10 @@ class PrecommitTasks {
8587
}
8688

8789
return project.tasks.create([
88-
name: 'precommit',
89-
group: JavaBasePlugin.VERIFICATION_GROUP,
90-
description: 'Runs all non-test checks.',
91-
dependsOn: precommitTasks
90+
name : 'precommit',
91+
group : JavaBasePlugin.VERIFICATION_GROUP,
92+
description: 'Runs all non-test checks.',
93+
dependsOn : precommitTasks
9294
])
9395
}
9496

@@ -168,7 +170,7 @@ class PrecommitTasks {
168170
)
169171
}
170172
}
171-
Task forbiddenApis = project.tasks.getByName("forbiddenApis")
173+
Task forbiddenApis = project.tasks.getByName("forbiddenApis")
172174
forbiddenApis.group = ""
173175
return forbiddenApis
174176
}
@@ -211,7 +213,7 @@ class PrecommitTasks {
211213
project.checkstyle {
212214
config = project.resources.text.fromFile(checkstyleConf, 'UTF-8')
213215
configProperties = [
214-
suppressions: checkstyleSuppressions
216+
suppressions: checkstyleSuppressions
215217
]
216218
toolVersion = CHECKSTYLE_VERSION
217219
}
@@ -229,9 +231,11 @@ class PrecommitTasks {
229231
}
230232

231233
private static Task configureLoggerUsage(Project project) {
234+
Object dependency = ClasspathUtils.isElasticsearchProject() ? project.project(':test:logger-usage') :
235+
"org.elasticsearch.test:logger-usage:${VersionProperties.elasticsearch}"
236+
232237
project.configurations.create('loggerUsagePlugin')
233-
project.dependencies.add('loggerUsagePlugin',
234-
"org.elasticsearch.test:logger-usage:${VersionProperties.elasticsearch}")
238+
project.dependencies.add('loggerUsagePlugin', dependency)
235239
return project.tasks.create('loggerUsageCheck', LoggerUsageTask.class) {
236240
classpath = project.configurations.loggerUsagePlugin
237241
}

buildSrc/src/main/groovy/org/elasticsearch/gradle/test/RestIntegTestTask.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ class RestIntegTestTask extends DefaultTask {
252252
restSpec
253253
}
254254
project.dependencies {
255-
restSpec "org.elasticsearch:rest-api-spec:${VersionProperties.elasticsearch}"
255+
restSpec project.project(':rest-api-spec')
256256
}
257257
Task copyRestSpec = project.tasks.findByName('copyRestSpec')
258258
if (copyRestSpec != null) {

buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class StandaloneRestTestPlugin implements Plugin<Project> {
7979

8080
// create a compileOnly configuration as others might expect it
8181
project.configurations.create("compileOnly")
82-
project.dependencies.add('testCompile', "org.elasticsearch.test:framework:${VersionProperties.elasticsearch}")
82+
project.dependencies.add('testCompile', project.project(':test:framework'))
8383

8484
EclipseModel eclipse = project.extensions.getByType(EclipseModel)
8585
eclipse.classpath.sourceSets = [testSourceSet]
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.elasticsearch.gradle.tool;
2+
3+
public class ClasspathUtils {
4+
private static boolean isElasticsearchProject;
5+
6+
static {
7+
// look for buildSrc marker file, if it exists then we are running in the context of the elastic/elasticsearch build
8+
isElasticsearchProject = ClasspathUtils.class.getResource("/buildSrc.marker") != null;
9+
}
10+
11+
private ClasspathUtils() {
12+
}
13+
14+
/**
15+
* Determine if we are running in the context of the `elastic/elasticsearch` project. This method will return {@code false} when
16+
* the build-tools project is pulled in as an external dependency.
17+
*
18+
* @return if we are currently running in the `elastic/elasticsearch` project
19+
*/
20+
public static boolean isElasticsearchProject() {
21+
return isElasticsearchProject;
22+
}
23+
}

buildSrc/src/main/resources/buildSrc.marker

Whitespace-only changes.

client/benchmark/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@ test.enabled = false
3434
dependencies {
3535
compile 'org.apache.commons:commons-math3:3.2'
3636

37-
compile("org.elasticsearch.client:elasticsearch-rest-client:${version}")
37+
compile project(":client:rest")
3838
// bottleneck should be the client, not Elasticsearch
3939
compile project(path: ':client:client-benchmark-noop-api-plugin')
4040
// for transport client
41-
compile("org.elasticsearch:elasticsearch:${version}")
42-
compile("org.elasticsearch.client:transport:${version}")
41+
compile project(":server")
42+
compile project(":client:transport")
4343
compile project(path: ':modules:transport-netty4', configuration: 'runtime')
4444
compile project(path: ':modules:reindex', configuration: 'runtime')
4545
compile project(path: ':modules:lang-mustache', configuration: 'runtime')

client/rest-high-level/build.gradle

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,34 +46,34 @@ idea {
4646
}
4747

4848
dependencies {
49-
compile "org.elasticsearch:elasticsearch:${version}"
50-
compile "org.elasticsearch.client:elasticsearch-rest-client:${version}"
49+
compile project(':server')
50+
compile project(':client:rest')
5151
compile project(':modules:parent-join')
5252
compile project(':modules:aggs-matrix-stats')
5353
compile project(':modules:rank-eval')
5454
compile project(':modules:lang-mustache')
55-
shadow "org.elasticsearch:elasticsearch:${version}"
56-
shadow "org.elasticsearch.client:elasticsearch-rest-client:${version}"
55+
shadow project(':server')
56+
shadow project(':client:rest')
5757
bundle project(':modules:parent-join')
5858
bundle project(':modules:aggs-matrix-stats')
5959
bundle project(':modules:rank-eval')
6060
bundle project(':modules:lang-mustache')
6161

62-
testCompile "org.elasticsearch.client:test:${version}"
63-
testCompile "org.elasticsearch.test:framework:${version}"
62+
testCompile project(':client:test')
63+
testCompile project(':test:framework')
6464
testCompile "com.carrotsearch.randomizedtesting:randomizedtesting-runner:${versions.randomizedrunner}"
6565
testCompile "junit:junit:${versions.junit}"
6666
//this is needed to make RestHighLevelClientTests#testApiNamingConventions work from IDEs
67-
testCompile "org.elasticsearch:rest-api-spec:${version}"
67+
testCompile project(":rest-api-spec")
6868
// Needed for serialization tests:
6969
// (In order to serialize a server side class to a client side class or the other way around)
7070
if (isEclipse == false || project.path == ":client:rest-high-level-tests") {
71-
testCompile("org.elasticsearch.plugin:x-pack-core:${version}") {
71+
testCompile(project(':x-pack:plugin:core')) {
7272
exclude group: 'org.elasticsearch', module: 'elasticsearch-rest-high-level-client'
7373
}
7474
}
7575

76-
restSpec "org.elasticsearch:rest-api-spec:${version}"
76+
restSpec project(':rest-api-spec')
7777
}
7878

7979
//we need to copy the yaml spec so we can check naming (see RestHighlevelClientTests#testApiNamingConventions)

client/rest/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ dependencies {
4444
compile "commons-codec:commons-codec:${versions.commonscodec}"
4545
compile "commons-logging:commons-logging:${versions.commonslogging}"
4646

47-
testCompile "org.elasticsearch.client:test:${version}"
47+
testCompile project(":client:test")
4848
testCompile "com.carrotsearch.randomizedtesting:randomizedtesting-runner:${versions.randomizedrunner}"
4949
testCompile "junit:junit:${versions.junit}"
5050
testCompile "org.hamcrest:hamcrest:${versions.hamcrest}"
@@ -68,7 +68,7 @@ forbiddenApisTest {
6868
}
6969

7070
// JarHell is part of es server, which we don't want to pull in
71-
// TODO: Not anymore. Now in :libs:core
71+
// TODO: Not anymore. Now in :libs:elasticsearch-core
7272
jarHell.enabled=false
7373

7474
testingConventions {

client/sniffer/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@ publishing {
3535
}
3636

3737
dependencies {
38-
compile "org.elasticsearch.client:elasticsearch-rest-client:${version}"
38+
compile project(":client:rest")
3939
compile "org.apache.httpcomponents:httpclient:${versions.httpclient}"
4040
compile "org.apache.httpcomponents:httpcore:${versions.httpcore}"
4141
compile "commons-codec:commons-codec:${versions.commonscodec}"
4242
compile "commons-logging:commons-logging:${versions.commonslogging}"
4343
compile "com.fasterxml.jackson.core:jackson-core:${versions.jackson}"
4444

45-
testCompile "org.elasticsearch.client:test:${version}"
45+
testCompile project(":client:test")
4646
testCompile "com.carrotsearch.randomizedtesting:randomizedtesting-runner:${versions.randomizedrunner}"
4747
testCompile "junit:junit:${versions.junit}"
4848
testCompile "org.elasticsearch:securemock:${versions.securemock}"
@@ -68,7 +68,7 @@ dependencyLicenses {
6868
}
6969

7070
// JarHell is part of es server, which we don't want to pull in
71-
// TODO: Not anymore. Now in :libs:core
71+
// TODO: Not anymore. Now in :libs:elasticsearch-core
7272
jarHell.enabled=false
7373

7474
testingConventions {

client/test/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ forbiddenApisTest {
4444
}
4545

4646
// JarHell is part of es server, which we don't want to pull in
47-
// TODO: Not anymore. Now in :libs:core
47+
// TODO: Not anymore. Now in :libs:elasticsearch-core
4848
jarHell.enabled=false
4949

5050
// TODO: should we have licenses for our test deps?

0 commit comments

Comments
 (0)