NextGen Build Investigation
Results of preliminary investigations
In investigating solutions that meet the requirements outlined, many strengths and weaknesses of existing systems were uncovered. Below is a summary of each system as I understand it currently.
- The current build system, based upon Ant running standalone, does not utilize any of the existing PDE settings configured for use within the eclipse IDE. This was intentional, and has strengths and weaknesses. First, it allows the 'official' builds to be completely independent of any IDE, or development tooling, since it relies soley upon ANT and the JDK within the OS environment. It also therefore relies upon minimal tooling and has a small number of "points-of-failure" dependent upon external tooling/resources. However, it also means that any development builds in the IDE are not reflective of the true 'state of the project'. In addition, most advanced functionality provided by the IDE needs to either be emulated, or duplicated by the build system. For true OSGi-like builds this would mean extending Ant's capabilities (manifest parsing).
- PDE (Plugin Development Platform) takes care of many OSGi related build and dependency issues, but its scope is limited. It is aware of zips and jars, but was not intended to be run outside an the Eclipse IDE.
- PDEBuild has been created to extend PDE functionality outside the IDE and allow PDE to be used 'headlessly' (without a gui), but has similar drawbacks our current dual system, in that the entire build is separate from the IDE - though it is much closer. It also has several hard-coded project assumptions, and is difficult to extend.
- Athena is an Eclipse build tool that utilizes PDE and PDEBuild to handle the project setup portion and drive automation. Use seems to be waning.
- Buckminster is another tool that has come into use for builds recently (Ganymede/Galileo) at Eclipse. It is tightly integrated with several Eclipse technologies - P2, PDE, Equinox, and others (CVS, SVN, Git, Maven) as well as integrating with ANT. It is intended to provide a standardized project provisioning/build system that could be used by development during development, yet also funtion through the entire release cycle (perform the necessary tasks of provisioning, building, testing, and publishing automatically during the all phases of the development cycle). In addition, it advertises the capability of generating Maven Metadata for P2 repositories. Many Eclipse Projects use, and are adopting use of this tool.
- B3 is an iteration upon Buckminster. Refining what was learned and strengthening its deficiencies. It is, however, in incubation and only the P2 aggregation portion of the tool is currently available. The Aggregator is now the standard for generating the "release train" build repositories (Indigo). I have been unable to evaluate its full capabilites.
- Maven is a build tool intended to manage complex dependencies. It was initially created before OSGi, and in some ways competes with it. It also operates in the same domain as ANT, and its use would replace the existing system in entirety. Maven 2 is widely adopted, while Maven 3 is new on the scene. There has been extensive colaboration between the Eclipse P2, Buckminster and Maven3 teams. Extensibility does not appear to have been a goal for Maven 2, and I'm unaware if that has changed with Maven 3.
-Tyco is a set of Eclipse extensions designed to allow an OSGi-based, Maven build strategy within the IDE (replacement for PDE). It has a similar scope to PDE and seems targeted for Eclipse plugins. It is in incubation.
Below is a summary table:
|System||Pros||Cons||Comments or Wiki link|
|Ant||flexable, extensible||Not designed for OSGi; Needs extension; Moderate Maintenance cost; constantly 'reinventing the wheel'; partially separate system than used in Dev|
|PDE Build||Less extenstion needed than ant, get many features now have to 'hack'||Complex, tied to Eclipse, uses own implimentation of ant, may still need extensions, high maintenance cost, IDE/headless build separate systems, tied to someone else's process, our versioning will need to change; headless and IDE use different processes|
|Buckminster||Flexible; Claims high extensibility; Designed to provide dynamic dependency mapping; is end-to-end build integration system; Collaboration between Maven and P2 and Buckminster teams; can utilize Ant, PDE, Maven 2/3 and or Tycho; headless and IDE use same processes||closely tied to Eclipse; Complex - uses multible languages (learning cost)(large investment in initial setup); Requires interaction with multple teams; Light Documentation;|
|B3||Next Gen of Buckminster, Collaboration between Maven and P2 and Buckminster teams||Incubation, Requires interaction with multple teams|
|Maven 2||Absolute Dependency stability (reproducability)||Complete system rewrite, Non-OSGi aware, Not full solution? "Provisioning, building, testing, publishing" only provides 2-4, Maven 3 coming|
|Tycho||Eclipse plugin to use Maven build, p2 aware, Maven2 and Maven3 aware, Collaboration between Maven and P2 teams||Incubation; Requires interaction with multple teams; Only aware of maven, p2, OSGi, and features (need separate solution for jar/zip creation); complete system re-write|
See Buckminster for the results of the evaluation from 11/10-01/11.
See Tycho for the results of the evaluation from 01/11-03/11
See TychoAgenda for the Agenda of the meeting to discuss the Tycho Eval Resuts.