import org.jetbrains.gradle.ext.Remote import org.jetbrains.gradle.ext.JUnit buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "gradle.plugin.org.jetbrains.gradle.plugin.idea-ext:gradle-idea-ext:0.7" } } apply plugin: org.jetbrains.gradle.ext.IdeaExtPlugin allprojects { apply plugin: 'idea' tasks.named('idea') { doFirst { throw new GradleException("Use of the 'idea' task has been deprecated. For details on importing into IntelliJ see CONTRIBUTING.md.") } } } tasks.register('configureIdeaGradleJvm') { group = 'ide' description = 'Configures the appropriate JVM for Gradle' doLast { modifyXml('.idea/gradle.xml') { xml -> def gradleSettings = xml.component.find { it.'@name' == 'GradleSettings' }.option[0].GradleProjectSettings // Remove configured JVM option to force IntelliJ to use the project JDK for Gradle gradleSettings.option.findAll { it.'@name' == 'gradleJvm' }.each { it.parent().remove(it) } } } } tasks.register('configureIdeaRunConfigs') { group = 'ide' description = 'Configures default run configuration settings' doLast { modifyXml('.idea/workspace.xml') { xml -> def runManager = xml.component.find { it.'@name' == 'RunManager' } if (runManager == null) { throw new GradleException("IntelliJ 'RunManager' configuration is missing from workspace.xml. You may need to refresh your Gradle project.") } def debugConfig = runManager.configuration.find { it.'@name' == 'Debug Elasticsearch' } // Enable "auto restart" on remote debug run configuration if (debugConfig.option.any { it.'@name' == 'AUTO_RESTART' && it.'@value' == 'true'} == false) { def restart = new NodeBuilder().option(name: 'AUTO_RESTART', value: 'true') debugConfig.append(restart) } } } } idea { project { vcs = 'Git' jdkName = '13' settings { delegateActions { delegateBuildRunToGradle = false testRunner = 'choose_per_test' } taskTriggers { afterSync tasks.named('configureIdeaGradleJvm'), tasks.named('configureIdeaRunConfigs') } codeStyle { java { classCountToUseImportOnDemand = 999 } } encodings { encoding = 'UTF-8' } compiler { parallelCompilation = true javac { generateDeprecationWarnings = false } } runConfigurations { 'Debug Elasticsearch'(Remote) { mode = 'listen' host = 'localhost' port = 5005 } defaults(JUnit) { vmParameters = '-ea -Djava.locale.providers=SPI,COMPAT' } } copyright { useDefault = 'Apache' scopes = ['x-pack': 'Elastic'] profiles { Apache { keyword = 'Licensed to Elasticsearch under one or more contributor' notice = '''\ 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.'''.stripIndent() } Elastic { keyword = 'Licensed under the Elastic License' notice = '''\ Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one or more contributor license agreements. Licensed under the Elastic License; you may not use this file except in compliance with the Elastic License.'''.stripIndent() } } } } } } /** * Parses a given XML file, applies a set of changes, and writes those changes back to the original file. * * @param path Path to existing XML file * @param action Action to perform on parsed XML document */ void modifyXml(Object path, Action action) { File xmlFile = project.file(path) Node xml = new XmlParser().parse(xmlFile) action.execute(xml) xmlFile.withPrintWriter { writer -> new XmlNodePrinter(writer).print(xml) } }