= Gerrit Code Review - Eclipse Setup

This document is about configuring Gerrit Code Review into an
Eclipse workspace for development.

Java 8 or later SDK is required.

[[setup]]
== Project Setup

In your Eclipse installation's link:https://wiki.eclipse.org/Eclipse.ini[`eclipse.ini`] file,
add the following line in the `vmargs` section:

----
  -DmaxCompiledUnitsAtOnce=10000
----

Without this setting, annotation processing does not work reliably and the
build is likely to fail with errors like:

----
  Could not write generated class ... javax.annotation.processing.FilerException: Source file already created
----

and

----
  AutoAnnotation_Commands_named cannot be resolved to a type
----

First, generate the Eclipse project by running the `tools/eclipse/project.py` script.
Then, in Eclipse, choose 'Import existing project' and select the `gerrit` project
from the current working directory.

Expand the `gerrit` project, right-click on the `eclipse-out` folder, select
'Properties', and then under 'Attributes' check 'Derived'.

Note that if you make any changes in the project configuration
that get saved to the `.project` file, for example adding Resource
Filters on a folder, they will be overwritten the next time you run
`tools/eclipse/project.py`.

=== Eclipse project on MacOS

By default, bazel uses `/private/var/tmp` as the
link:https://docs.bazel.build/versions/master/output_directories.html[outputRoot on MacOS].
This means that the eclipse project will reference libraries stored under that directory.
However, MacOS runs periodic cleanup task which deletes the content under `/private/var/tmp`
which wasn't accessed or modified for some days, by default 3 days. This can lead to a broken
Eclipse project as referenced libraries get deleted.

There are two possibilities to mitigate this issue.

==== Change the location of the bazel output directory
On Linux, the output directory defaults to `$HOME/.cache/bazel` and the same can be configured
on Mac too. Edit, or create, the `$HOME/.bazelrc` file and add the following line:
----
startup --output_user_root=/Users/johndoe/.cache/bazel
----

==== Increase the treshold for the cleanup of temporary files
The default treshold for the cleanup can be overriden by creating a configuration file under
`/etc/periodic.conf` and setting a larger value for the `daily_clean_tmps_days`.

An example `/etc/periodic.conf` file:

----
# This file overrides the settings from /etc/defaults/periodic.conf
daily_clean_tmps_days="45"                              # If not accessed for
----

For more details about the proposed workaround see link:https://superuser.com/a/187105[this post]

=== Eclipse project with custom plugins ===

To add custom plugins to the eclipse project add them to `tools/bzl/plugins.bzl`
the same way you would when
link:dev-build-plugins.html#_bundle_custom_plugin_in_release_war[bundling in release.war]
and run `tools/eclipse/project.py`.

[[Newer Java versions]]

Java 9 and later are supported, but some adjustments must be done, because
Java 8 is still the default:

* Add JRE, e.g.: directory: /usr/lib64/jvm/java-9-openjdk, name: java-9-openjdk-9
* Change execution environment for gerrit project to: JavaSE-9 (java-9-openjdk-9)
* Check that compiler compliance level in gerrit project is set to: 9

[[Formatting]]
== Code Formatter Settings

To format source code, Gerrit uses the
link:https://github.com/google/google-java-format[`google-java-format`]
tool (version 1.7), which automatically formats code to follow the
style guide. See link:dev-crafting-changes.html#style[Code Style] for the
instruction how to set up command line tool that uses this formatter.
The Eclipse plugin is provided that allows to format with the same
formatter from within the Eclipse IDE. See
link:https://github.com/google/google-java-format#eclipse[Eclipse plugin]
for details how to install it. It's important to use the same plugin version
as the `google-java-format` script.

== Site Initialization

Build once on the command line with
link:dev-bazel.html#build[Bazel] and then follow
link:dev-readme.html#init[Site Initialization] in the
Developer Setup guide to configure a local site for testing.


== Testing

=== Running the Daemon

Duplicate the existing launch configuration:

* In Eclipse select Run -> Debug Configurations ...
* Java Application -> `gerrit_daemon`
* Right click, Duplicate
* Modify the name to be unique.
* Switch to Arguments tab.
* Edit the `-d` program argument flag to match the path used during
  'init'.  The template launch configuration resolves to `../gerrit_testsite`
  since that is what the documentation recommends.

* Switch to Common tab.
* Change Save as to be Local file.
* Close the Debug Configurations dialog and save the changes when prompted.

GERRIT
------
Part of link:index.html[Gerrit Code Review]

SEARCHBOX
---------
