-
Notifications
You must be signed in to change notification settings - Fork 5.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Make eclipse/vscode project import work
- Gradle projects contain cycles which comes from dependencies to test sources which is not a problem in gradle but eclipse metadata generation is getting confused. Thus we need settings to relax errors org.eclipse.jdt.core.circularClasspath=warning org.eclipse.jdt.core.incompleteClasspath=warning - Additionally .classpath entries needs to be changes having without_test_code=false test=false - Aspects end up getting source dirs `build/classes/java/main` and `build/resources/main` which never have sources. Vscode complains about that, eclipse is fine. Remove those from entries. - In tests `htmlunit` depends on `xml-apis`. `xml-apis` are now part of jdk and eclipse complains about that. Excluse these in a gradle build. - Both eclipse and vscode don't currently work with buildship, due to project cycles and buildship cannot be configured. It's possible to create metadata from `eclipse` task manually which then can be imported. For this we need to disable automatic import in vscode using buildship. This goes to `.vscode/settings.json` workspace config. - Then with these changes user can do something like git clean -fxd && ./gradlew clean build cleanEclipse eclipse -x checkstyleNohttp -x test -x integrationTest and import projects manually.
- Loading branch information
Showing
5 changed files
with
79 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"java.import.gradle.enabled": false | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
72 changes: 72 additions & 0 deletions
72
buildSrc/src/main/groovy/io/spring/gradle/convention/EclipsePlugin.groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
/* | ||
* Copyright 2023 the original author or authors. | ||
* | ||
* Licensed 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 | ||
* | ||
* https://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. | ||
*/ | ||
|
||
package io.spring.gradle.convention | ||
|
||
import org.gradle.api.Plugin | ||
import org.gradle.api.Project | ||
import org.gradle.plugins.ide.eclipse.EclipsePlugin | ||
|
||
/** | ||
* Plugin to tweak .classpath settings so that eclipse/sts/vscode can | ||
* be imported cleanly. | ||
* | ||
* @author Janne Valkealahti | ||
*/ | ||
class EclipsePlugin implements Plugin<Project> { | ||
|
||
@Override | ||
void apply(Project project) { | ||
project.plugins.apply(EclipsePlugin) | ||
|
||
project.eclipse { | ||
classpath { | ||
file { | ||
whenMerged { | ||
// for aspects gradle eclipse integration wrongly creates lib entries for | ||
// aspects/build/classes/java/main and aspects/build/resources/main which | ||
// never has anything. eclipse/sts don't care, vscode language server | ||
// complains about missing folders. So remove those from a .classpath | ||
entries.removeAll { | ||
entry -> entry.kind == 'lib' && (entry.path.contains('aspects/build/classes/java/main') || entry.path.contains('aspects/build/resources/main')) | ||
} | ||
// there are cycles and then dependencies between projects main sources and | ||
// test sources. Looks like gradle eclipse integration is getting confused. | ||
// thus just relax rules so that projects always sees everything from | ||
// dependant project. | ||
entries | ||
.findAll { entry -> entry instanceof org.gradle.plugins.ide.eclipse.model.ProjectDependency } | ||
.each { | ||
it.entryAttributes['without_test_code'] = 'false' | ||
it.entryAttributes['test'] = 'false' | ||
} | ||
} | ||
} | ||
} | ||
jdt { | ||
file { | ||
withProperties { properties -> | ||
// there are cycles and then dependencies between projects main sources and | ||
// test sources. Relax those from error to warning | ||
properties['org.eclipse.jdt.core.circularClasspath'] = 'warning' | ||
properties['org.eclipse.jdt.core.incompleteClasspath'] = 'warning' | ||
} | ||
} | ||
} | ||
} | ||
} | ||
|
||
} |
1 change: 1 addition & 0 deletions
1
buildSrc/src/main/resources/META-INF/gradle-plugins/io.spring.convention.eclipse.properties
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
implementation-class=io.spring.gradle.convention.EclipsePlugin |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters