LUCENE-9438: Eclipse IDE support with gradle build system (#1761)

This commit is contained in:
Dawid Weiss 2020-08-21 21:47:11 +02:00 committed by GitHub
parent 66b6ce2cd0
commit b1e2d0c890
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 130 additions and 4 deletions

View File

@ -21,8 +21,8 @@ import java.time.format.DateTimeFormatter
plugins { plugins {
id "base" id "base"
id "com.palantir.consistent-versions" version "1.14.0" id "com.palantir.consistent-versions" version "1.14.0"
id 'de.thetaphi.forbiddenapis' version '3.0.1' apply false
id "org.owasp.dependencycheck" version "5.3.0" id "org.owasp.dependencycheck" version "5.3.0"
id 'de.thetaphi.forbiddenapis' version '3.0.1' apply false
id "de.undercouch.download" version "4.0.2" apply false id "de.undercouch.download" version "4.0.2" apply false
} }
@ -63,6 +63,8 @@ ext {
buildTime = DateTimeFormatter.ofPattern("HH:mm:ss").format(tstamp) buildTime = DateTimeFormatter.ofPattern("HH:mm:ss").format(tstamp)
buildYear = DateTimeFormatter.ofPattern("yyyy").format(tstamp) buildYear = DateTimeFormatter.ofPattern("yyyy").format(tstamp)
minJavaVersion = JavaVersion.VERSION_11
// Declare script dependency versions outside of palantir's // Declare script dependency versions outside of palantir's
// version unification control. These are not our main dependencies. // version unification control. These are not our main dependencies.
scriptDepVersions = [ scriptDepVersions = [
@ -102,6 +104,7 @@ apply from: file('gradle/maven/defaults-maven.gradle')
// IDE support, settings and specials. // IDE support, settings and specials.
apply from: file('gradle/ide/intellij-idea.gradle') apply from: file('gradle/ide/intellij-idea.gradle')
apply from: file('gradle/ide/eclipse.gradle')
// Validation tasks // Validation tasks
apply from: file('gradle/validation/precommit.gradle') apply from: file('gradle/validation/precommit.gradle')

View File

@ -19,12 +19,12 @@
allprojects { allprojects {
plugins.withType(JavaPlugin) { plugins.withType(JavaPlugin) {
sourceCompatibility = "11" sourceCompatibility = rootProject.minJavaVersion
targetCompatibility = "11" targetCompatibility = rootProject.minJavaVersion
// Use 'release' flag instead of 'source' and 'target' // Use 'release' flag instead of 'source' and 'target'
tasks.withType(JavaCompile) { tasks.withType(JavaCompile) {
options.compilerArgs += ["--release", "11"] options.compilerArgs += ["--release", rootProject.minJavaVersion.toString()]
} }
// Configure warnings. // Configure warnings.

View File

@ -28,6 +28,7 @@ configure(rootProject) {
["LocalSettings", "help/localSettings.txt", "Local settings, overrides and build performance tweaks."], ["LocalSettings", "help/localSettings.txt", "Local settings, overrides and build performance tweaks."],
["Git", "help/git.txt", "Git assistance and guides."], ["Git", "help/git.txt", "Git assistance and guides."],
["ValidateLogCalls", "help/validateLogCalls.txt", "How to use logging calls efficiently."], ["ValidateLogCalls", "help/validateLogCalls.txt", "How to use logging calls efficiently."],
["IDEs", "help/IDEs.txt", "IDE support."],
] ]
helpFiles.each { section, path, sectionInfo -> helpFiles.each { section, path, sectionInfo ->

102
gradle/ide/eclipse.gradle Normal file
View File

@ -0,0 +1,102 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF 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.
*/
import org.gradle.plugins.ide.eclipse.model.SourceFolder
import org.gradle.plugins.ide.eclipse.model.ClasspathEntry
configure(rootProject) {
apply plugin: "eclipse"
def relativize = { other -> rootProject.rootDir.relativePath(other).toString() }
eclipse {
project {
name = "Apache Lucene Solr ${version}"
}
classpath {
defaultOutputDir = file('build/eclipse')
file {
beforeMerged { classpath -> classpath.entries.removeAll { it.kind == "src" } }
whenMerged { classpath ->
def projects = allprojects.findAll { prj ->
return prj.plugins.hasPlugin(JavaPlugin) &&
prj.path != ":solr:solr-ref-guide"
}
Set<String> sources = []
Set<File> jars = []
projects.each { prj ->
prj.sourceSets.each { sourceSet ->
sources += sourceSet.java.srcDirs.findAll { dir -> dir.exists() }.collect { dir -> relativize(dir) }
}
// This is hacky - we take the resolved compile classpath and just
// include JAR files from there. We should probably make it smarter
// by looking at real dependencies. But then: this Eclipse configuration
// doesn't really separate sources anyway so why bother.
jars += prj.configurations.compileClasspath.resolve()
jars += prj.configurations.testCompileClasspath.resolve()
}
classpath.entries += sources.sort().collect {name -> new SourceFolder(name, "build/eclipse/" + name) }
classpath.entries += jars.unique().findAll { location -> location.isFile() }.collect { location ->
new LibEntry(location.toString())
}
}
}
}
jdt {
sourceCompatibility = rootProject.minJavaVersion
targetCompatibility = rootProject.minJavaVersion
javaRuntimeName = "JavaSE-${rootProject.minJavaVersion}"
}
}
eclipseJdt {
doLast {
project.sync {
from rootProject.file("dev-tools/eclipse/dot.settings")
into rootProject.file(".settings")
}
}
}
}
public class LibEntry implements ClasspathEntry {
private String path;
LibEntry(String path) {
this.path = path;
}
@Override
String getKind() {
return "lib"
}
@Override
void appendNode(Node node) {
node.appendNode("classpathentry", Map.of(
"kind", "lib",
"path", path
));
}
}

20
help/IDEs.txt Normal file
View File

@ -0,0 +1,20 @@
IntelliJ IDEA
=============
Importing the project as a gradle project should just run out of the box.
Eclipse
=======
Run the following to set up Eclipse project files:
./gradlew eclipse
then import the project into Eclipse with:
File -> Import... -> Existing Project into Workspace
Please note that Eclipse does not distinguish between sub-projects
and package sets (main/ test) so pretty much all the sources and dependencies
are available in one large bin.