IDE as build artifact
Clone or download
Latest commit 3a5b49b Oct 3, 2018

README.md

Goomph: IDE as build artifact

Maven artifact Latest version Javadoc License Apache

Changelog Travis CI Live chat

IDE-as-build-artifact.

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.

Blog posts

Building OSGi bundles, Eclipse plugins, and RCP applications.

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.

  • bndmanifest generates a manifest using purely bnd, and outputs it for IDE consumption.
  • OsgiExecable makes 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.

  • mavencentral makes it easy to add dependency jars from an eclipse release.
  • classic makes eclipse projects in the way that gradle <= 4.3 did.
  • buildproperties uses build.properties to control a gradle build, and fixes eclipse project classpath to include binary assets specified in build.properties.
  • excludebuildfolder excludes the gradle build folder from Eclipse's resource indexing.
  • projectdeps fixes an intermittent problem where dependencies on other projects within the workspace aren't always resolved correctly within Eclipse.
  • resourcefilters adds resource filters to the eclipse project.

com.diffplug.gradle.p2 Tasks and plugins for manipulating p2 data.

  • asmaven downloads dependencies from a p2 repository and makes them available in a local maven repository.
  • P2Model models a set of p2 repositories and IUs, and provides convenience methods for running p2-director or the p2.mirror ant task against these.
  • P2AntRunner runs eclipse ant tasks.
  • FeaturesAndBundlesPublisher models the FeaturesAndBundlesPublisher eclipse application.
  • Repo2Runnable models the Repo2Runnable eclipse application.

com.diffplug.gradle.pde Tasks for running Eclipse PDE using a downloaded eclipse instance.

com.diffplug.gradle.swt Plugins for working with SWT in Gradle.

  • nativedeps adds the platform-specific SWT jars to the runtime classpath so that SWT code can run.

com.diffplug.gradle Miscellaneous infrastructure.

  • CmdLineTask runs a series of shell commands, possibly copying or moving files in the meantime.
  • JavaExecable makes it easy to run a chunk of code in a separate JVM, and get the result back in this one.
  • JavaExecWinFriendly overcomes 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.equinoxlaunch can configure and run equinox applications as part of the build, such as a code generator.

Acknowledgements