Developers Guide
Setting up the development environment:
- You need Eclipse PDE to develop Eclipse plugins. Download and start it.
- Clone the Git repository.
- In Eclipse, click "File / Import... ", and then "General / Existing projects into workspace". Select the Git repository folder as the "root directory", and select all the Eclipse projects that show up. Click finish to import those projects.
Running the tests in Eclipse:
- In
releng/launches
there is one or several Eclipse launch files for running the tests, so if this project is added to your Eclipse workspace, the launches will show up automatically inRun Configurations...
, as "JUnit Plug-in Tests".
Automated Building and Testing:
Using Maven (and Tycho), it is possible to automatically build Goclipse, create an update site, and run all the tests. Download Maven (minimum version 3.0), and run the following commands on the root folder of the repository:
- Run
mvn package
to build the IDE feature into a p2 repository (which is a local update site). It will be placed atbin-maven/features.repository/repository
- Run
mvn verify
to build the IDE as above and also run the test suites.
Creating and deploying a new release:
A release is a web site with an Eclipse p2 update site. The website may contain no web pages at all, rather it can be just the p2 site. To create and deploy a new release:
- Ensure the version numbers of all plugins/features/etc. are properly updated, if they haven't been already.
- Run
mvn clean verify
to perform the Tycho build (see section above). Ensure all tests pass.
- To create a signed release the
sign-build
Maven profile must be activated, and the required properties set.
- Create and push a new release tag for the current release commit.
- Go to the Github releases page and edit the newly present release. Add the corresponding (ChangeLog.md) entries to the release notes.
- Locally, run
ant -f releng/ CreateProjectSite
. This last step will prepare the project web site underbin-maven/ProjectSite
. - To actually publish the project site, run
ant -f releng/ PublishProjectSite -DreleaseTag=<tagName>
. What happens here is that the whole project site will be pushed into a Git repository, to then be served in some way (for example Github Pages). IfprojectSiteGitURL
is not specified, the default value in releng-build.properties will be used.
- For more info on the Release Engineering script, run
ant -f releng/
, this will print the help.
- A branch or tag named
latest
should also be created in Github, pointing to the latest release commit. The previouslatest
tag can be deleted/overwritten. The documentation pages use this tag/branch in their links.
Project design info and notes
LangEclipseIDE
This project uses the LangEclipseIDE framework, which is designed to have its source embedded in the host IDE. See this section for more info on how this should be managed.
Unit tests double-method wrapper:
What is this code idiom seen so often in Junit tests? :
@Test
public void testXXX() throws Exception { testXXX$(); }
public void testXXX$() throws Exception {
This is donely solely as an aid when debugging code, so that the "Drop to frame" functionality can be used on the unit-test method. It seems the Eclipse debugger cannot drop-to-frame to a method that is invoked dynamically (such as the unit-test method). So we wrap the unit-test method on another one. So while we now cannot drop-to-frame in testXXX
, we can do it in testXXX$
, which basically allows us to restart the unit-test.
TODO: investigate if there is an alternate way to achieve the same. I haven't actually checked that.