diff --git a/gradle/ide/intellij-idea.gradle b/gradle/ide/intellij-idea.gradle index 589aaec3562..f9e7d1d456e 100644 --- a/gradle/ide/intellij-idea.gradle +++ b/gradle/ide/intellij-idea.gradle @@ -15,23 +15,46 @@ * limitations under the License. */ -// Try to detect IntelliJ model loader ("reimport") early. -rootProject.ext.isIdea = System.getProperty("idea.active") != null || - gradle.startParameter.taskNames.contains('idea') || - gradle.startParameter.taskNames.contains('cleanIdea') +// Try to detect IntelliJ model loader project structure "sync" +// +rootProject.ext.isIdea = Boolean.parseBoolean(System.getProperty("idea.active", "false")) +rootProject.ext.isIdeaSync = Boolean.parseBoolean(System.getProperty("idea.sync.active", "false")) +rootProject.ext.isIdeaBuild = (isIdea && !isIdeaSync) if (isIdea) { logger.warn("IntelliJ Idea IDE detected.") -} -allprojects { - apply plugin: 'idea' + allprojects { + apply plugin: 'idea' - idea { - module { - outputDir file('build/idea/classes/main') - testOutputDir file('build/idea/classes/test') - downloadSources = true + idea { + module { + outputDir file('build/idea/classes/main') + testOutputDir file('build/idea/classes/test') + downloadSources = true + } + } + } +} + +if (isIdeaBuild) { + // Skip certain long tasks that are dependencies + // of 'assemble' if we're building from within IntelliJ. + gradle.taskGraph.whenReady { taskGraph -> + def tasks = taskGraph.getAllTasks() + + def skipTasks = [ + // Skip site javadoc rendering + ".*:(renderSiteJavadoc)", + ] + + logger.lifecycle("Skipping certain tasks on IntelliJ builds") + tasks.each { task -> + def taskPath = task.path + if (skipTasks.any { pattern -> taskPath ==~ pattern }) { + logger.debug("Skipping task on IntelliJ: " + taskPath) + task.enabled = false + } } } } diff --git a/gradle/java/modules.gradle b/gradle/java/modules.gradle index 768bf1a4635..f9ebac3d345 100644 --- a/gradle/java/modules.gradle +++ b/gradle/java/modules.gradle @@ -76,7 +76,7 @@ allprojects { // LUCENE-10304: if we modify the classpath here, IntelliJ no longer sees the dependencies as compile-time // dependencies, don't know why. - if (!rootProject.ext.isIdea) { + if (!rootProject.ext.isIdeaSync) { task.classpath = modularPaths.compilationClasspath } @@ -119,7 +119,7 @@ allprojects { // LUCENE-10304: if we modify the classpath here, IntelliJ no longer sees the dependencies as compile-time // dependencies, don't know why. - if (!rootProject.ext.isIdea) { + if (!rootProject.ext.isIdeaSync) { def jarTask = project.tasks.getByName(mainSourceSet.getJarTaskName()) def testJarTask = project.tasks.getByName(testSourceSet.getJarTaskName())