|  | :linkattrs: | 
|  | = Gerrit Code Review - Eclipse Setup | 
|  |  | 
|  | This document is about configuring Gerrit Code Review into an | 
|  | Eclipse workspace for development. | 
|  |  | 
|  | Java 11 or later SDK is required. | 
|  | Otherwise, java 8 can still be used for now as described below. | 
|  |  | 
|  | [[setup]] | 
|  | == Project Setup | 
|  |  | 
|  | In your Eclipse installation's link:https://wiki.eclipse.org/Eclipse.ini[`eclipse.ini`,role=external,window=_blank] 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`. | 
|  |  | 
|  | == Java Versions | 
|  |  | 
|  | Java 11 is supported as a default, but some adjustments must be done for other JDKs: | 
|  |  | 
|  | * 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 | 
|  |  | 
|  | Moreover, the actual java 11 language features are not supported yet. | 
|  |  | 
|  | [[Formatting]] | 
|  | == Code Formatter Settings | 
|  |  | 
|  | To format source code, Gerrit uses the | 
|  | link:https://github.com/google/google-java-format[`google-java-format`,role=external,window=_blank] | 
|  | 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,role=external,window=_blank] | 
|  | 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 | 
|  |  | 
|  | === The Gerrit web app UI is served by `server.go` process. To launch it, | 
|  | run this command: | 
|  |  | 
|  | ---- | 
|  | $ bazel run polygerrit-ui:devserver | 
|  | ---- | 
|  |  | 
|  | === 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 | 
|  | --------- |