It is possible to have many installations of the Eclipse IDE share a common set of installed artifacts, called a "bundlepool". This means it is fast and efficient to get a purpose-built IDE for every project, preconfigured with all the plugins and settings appropriate for the project at hand.
When you run gradlew ide, it builds and downloads an IDE into build/oomphIde with just the features you need. Takes ~15 seconds and 1MB of disk space once all the common artifacts have been cached at ~/.goomph.
apply plugin: 'com.diffplug.gradle.oomph.ide'
oomphIde {
repoEclipseLatest()
jdt {}
eclipseIni {
vmargs('-Xmx2g') // IDE can have up to 2 gigs of RAM
}
style {
classicTheme() // oldschool cool
niceText() // with nice fonts and visible whitespace
}
}See the plugin's javadoc for a quickstart, and HOW_TO_AUTOMATE_IDE.md for examples and more in-depth details.
It turns out that the tooling required to implement "IDE-as-build-artifact" is the same tooling required to build Eclipse plugins and RCP applications in the first place. That is Goomph's other side. For a canonical example which demonstrates Goomph in use on a real project, see the Gradle and Eclipse RCP talk.
Real world Eclipse software built with Goomph:
Below is an index of Goomph's capabilities, along with links to the javadoc where you can find usage examples.
com.diffplug.gradle.osgi Plugin for generating OSGi metadata.
bndmanifestgenerates a manifest using purely bnd, and outputs it for IDE consumption.OsgiExecablemakes it easy to run a chunk of code within an OSGi container, and get the result from outside the container.
com.diffplug.gradle.eclipse Plugins for handling eclipse' maven central artifacts and creating and manipulating eclipse project files.
mavencentralmakes it easy to add dependency jars from an eclipse release.classicmakes eclipse projects in the way thatgradle <= 4.3did.buildpropertiesusesbuild.propertiesto control a gradle build, and fixes eclipse project classpath to include binary assets specified inbuild.properties.excludebuildfolderexcludes the gradlebuildfolder from Eclipse's resource indexing.projectdepsfixes an intermittent problem where dependencies on other projects within the workspace aren't always resolved correctly within Eclipse.resourcefiltersadds resource filters to the eclipse project.
com.diffplug.gradle.p2 Tasks and plugins for manipulating p2 data.
asmavendownloads dependencies from a p2 repository and makes them available in a local maven repository.P2Modelmodels a set of p2 repositories and IUs, and provides convenience methods for running p2-director or the p2.mirror ant task against these.P2AntRunnerruns eclipse ant tasks.FeaturesAndBundlesPublishermodels the FeaturesAndBundlesPublisher eclipse application.Repo2Runnablemodels the Repo2Runnable eclipse application.
com.diffplug.gradle.pde Tasks for running Eclipse PDE using a downloaded eclipse instance.
PdeBuildTaskruns PDE build to build an RCP product.PdeAntBuildTaskruns PDE on an ant file.
com.diffplug.gradle.swt Plugins for working with SWT in Gradle.
nativedepsadds the platform-specific SWT jars to the runtime classpath so that SWT code can run.
com.diffplug.gradle Miscellaneous infrastructure.
CmdLineTaskruns a series of shell commands, possibly copying or moving files in the meantime.JavaExecablemakes it easy to run a chunk of code in a separate JVM, and get the result back in this one.JavaExecWinFriendlyovercomes limitations in Windows' commandline length and long classpaths.
com.diffplug.gradle.eclipserunner Infrastructure for running headless eclipse applications.
- Used to power the infrastructure above.
com.diffplug.gradle.equinoxlaunchcan configure and run equinox applications as part of the build, such as a code generator.
- Thanks to ralfgrossklaus for fixes to CmdLine hanging and opening dialogs on buildservers.
- Thanks to hacki11 for slicingOptions and append in p2asmaven, as well as every improvement in the
3.10.0release. - Andrey Hihlovskiy's excellent Wuff and Unpuzzle libraries have been a huge boon to everyone trying to get Gradle and Eclipse to collaborate.
- Thanks to Peter Kriens for the excellent bnd.
- Thanks to JRuyi and Agemo Cui for osgibnd-gradle-plugin, which inspired
BndManifestPlugin. - Thanks to Scott Resnik for installed jre functionality, line number and whitespace configuration, and jdt config enhancements.
- Thanks to Stefan Oehme for his feedback on Goomph's design.
- Thanks to Neil Fraser of Google for diff-match-patch which is very helpful for testing.
- Thanks to Thipor Kong for his handy windows cmdline length workaround for the classpath.
- Formatted by spotless.
- Bugs found by findbugs.
- Built by gradle.
- Tested by junit.
- Maintained by DiffPlug.
