# Contributing to Eclipse StatET

Thanks for your interest in this project.

Eclipse StatET is an Eclipse-based IDE for R.

  * Project home: https://projects.eclipse.org/projects/science.statet


## Developer Resources

Please check the project page for information regarding source repositories, bug tracker and other
developer resources:

  * https://projects.eclipse.org/projects/science.statet/developer

This project uses Bugzilla to track ongoing development and issues.

  * Search for issues: https://bugs.eclipse.org/bugs/buglist.cgi?product=Statet
  * Create a new report: https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Statet

Be sure to search for existing bugs before you create another one.

This project accepts source contributions via Gerrit; please see https://wiki.eclipse.org/Gerrit
and note the requirements described in the following section.


## Eclipse Contributor Agreement

Before your contribution can be accepted by the project team contributors must electronically sign
the Eclipse Contributor Agreement (ECA).

  * https://www.eclipse.org/legal/ECA.php

Commits that are provided by non-committers must have a Signed-off-by field in the footer indicating
that the author is aware of the terms by which the contribution has been provided to the project.
The non-committer must additionally have an Eclipse Foundation account and must have a signed
Eclipse Contributor Agreement (ECA) on file.

For more information, please see the Eclipse Committer Handbook
https://www.eclipse.org/projects/handbook/#resources-commit


## Build

The build of StatET is based on Apache Maven (https://maven.apache.org/) and Eclipse Tycho
(https://www.eclipse.org/tycho/). 

### Prerequisite

  * Maven
  * All repositories of StatET (in folders named like the repositories).

### 3rd Party Plug-in Dependencies

To aggregate all 3rd party dependencies as Eclipse (OSGI) plug-ins to a feature and P2 repository,
run in `org.eclipse.statet`:

```
mvn -f 3rdparty/bundle-recipes-pom.xml install
mvn -f 3rdparty/pom.xml install
```

### StatET

The build requires the 3rd party plug-in dependencies described above. Instead of using the locally
build feature, it is also possible to use an existing P2 repository with that feature by specifying
the location with the property `statet.dependencies.url`.

To build StatET with all components, run in `org.eclipse.statet`:

```
mvn -f statet-pom.xml package
```


## Contact

Contact the project developers via the project’s Developer Mailing List:
  * https://projects.eclipse.org/projects/science.statet/contact
