Marian Harbach | ebeb154 | 2019-12-13 10:42:46 +0100 | [diff] [blame] | 1 | :linkattrs: |
Yuxuan 'fishy' Wang | 61698b1 | 2013-12-20 12:55:51 -0800 | [diff] [blame] | 2 | = Gerrit Code Review - Eclipse Setup |
Shawn O. Pearce | d2b73db | 2009-01-09 11:55:47 -0800 | [diff] [blame] | 3 | |
Shawn O. Pearce | 18f1f7f | 2009-12-16 11:32:39 -0800 | [diff] [blame] | 4 | This document is about configuring Gerrit Code Review into an |
David Ostrovsky | 7163dac | 2017-07-29 06:49:38 +0200 | [diff] [blame] | 5 | Eclipse workspace for development. |
Shawn O. Pearce | d2b73db | 2009-01-09 11:55:47 -0800 | [diff] [blame] | 6 | |
Luca Milanesio | 911611a | 2020-10-06 14:49:01 +0100 | [diff] [blame] | 7 | Java 11 or later SDK is required. |
| 8 | Otherwise, java 8 can still be used for now as described below. |
Shawn O. Pearce | 18f1f7f | 2009-12-16 11:32:39 -0800 | [diff] [blame] | 9 | |
David Pursehouse | 2b16f6a | 2015-08-28 09:38:50 +0900 | [diff] [blame] | 10 | [[setup]] |
| 11 | == Project Setup |
| 12 | |
Marian Harbach | 3425337 | 2019-12-10 18:01:31 +0100 | [diff] [blame] | 13 | In your Eclipse installation's link:https://wiki.eclipse.org/Eclipse.ini[`eclipse.ini`,role=external,window=_blank] file, |
Eryk Szymanski | 6c5e643 | 2017-04-24 10:32:52 +0200 | [diff] [blame] | 14 | add the following line in the `vmargs` section: |
David Pursehouse | c20dff2 | 2015-08-28 09:41:14 +0900 | [diff] [blame] | 15 | |
| 16 | ---- |
| 17 | -DmaxCompiledUnitsAtOnce=10000 |
| 18 | ---- |
| 19 | |
| 20 | Without this setting, annotation processing does not work reliably and the |
| 21 | build is likely to fail with errors like: |
| 22 | |
| 23 | ---- |
| 24 | Could not write generated class ... javax.annotation.processing.FilerException: Source file already created |
| 25 | ---- |
| 26 | |
David Pursehouse | 1023b26 | 2016-08-19 16:26:43 +0900 | [diff] [blame] | 27 | and |
| 28 | |
| 29 | ---- |
| 30 | AutoAnnotation_Commands_named cannot be resolved to a type |
| 31 | ---- |
| 32 | |
Eryk Szymanski | 49c76f5 | 2017-04-24 10:12:01 +0200 | [diff] [blame] | 33 | First, generate the Eclipse project by running the `tools/eclipse/project.py` script. |
Luca Milanesio | 911611a | 2020-10-06 14:49:01 +0100 | [diff] [blame] | 34 | |
Eryk Szymanski | 49c76f5 | 2017-04-24 10:12:01 +0200 | [diff] [blame] | 35 | Then, in Eclipse, choose 'Import existing project' and select the `gerrit` project |
David Pursehouse | 2b16f6a | 2015-08-28 09:38:50 +0900 | [diff] [blame] | 36 | from the current working directory. |
| 37 | |
David Ostrovsky | fdbfcad | 2016-11-15 06:35:29 -0800 | [diff] [blame] | 38 | Expand the `gerrit` project, right-click on the `eclipse-out` folder, select |
David Pursehouse | 2b16f6a | 2015-08-28 09:38:50 +0900 | [diff] [blame] | 39 | 'Properties', and then under 'Attributes' check 'Derived'. |
| 40 | |
| 41 | Note that if you make any changes in the project configuration |
| 42 | that get saved to the `.project` file, for example adding Resource |
| 43 | Filters on a folder, they will be overwritten the next time you run |
| 44 | `tools/eclipse/project.py`. |
| 45 | |
Saša Živkov | f5f0d61 | 2020-07-30 17:43:42 +0200 | [diff] [blame] | 46 | === Eclipse project on MacOS |
| 47 | |
| 48 | By default, bazel uses `/private/var/tmp` as the |
| 49 | link:https://docs.bazel.build/versions/master/output_directories.html[outputRoot on MacOS]. |
| 50 | This means that the eclipse project will reference libraries stored under that directory. |
| 51 | However, MacOS runs periodic cleanup task which deletes the content under `/private/var/tmp` |
| 52 | which wasn't accessed or modified for some days, by default 3 days. This can lead to a broken |
| 53 | Eclipse project as referenced libraries get deleted. |
| 54 | |
| 55 | There are two possibilities to mitigate this issue. |
| 56 | |
| 57 | ==== Change the location of the bazel output directory |
| 58 | On Linux, the output directory defaults to `$HOME/.cache/bazel` and the same can be configured |
| 59 | on Mac too. Edit, or create, the `$HOME/.bazelrc` file and add the following line: |
| 60 | ---- |
| 61 | startup --output_user_root=/Users/johndoe/.cache/bazel |
| 62 | ---- |
| 63 | |
| 64 | ==== Increase the treshold for the cleanup of temporary files |
| 65 | The default treshold for the cleanup can be overriden by creating a configuration file under |
| 66 | `/etc/periodic.conf` and setting a larger value for the `daily_clean_tmps_days`. |
| 67 | |
| 68 | An example `/etc/periodic.conf` file: |
| 69 | |
| 70 | ---- |
| 71 | # This file overrides the settings from /etc/defaults/periodic.conf |
| 72 | daily_clean_tmps_days="45" # If not accessed for |
| 73 | ---- |
| 74 | |
| 75 | For more details about the proposed workaround see link:https://superuser.com/a/187105[this post] |
| 76 | |
Sven Selberg | 4076e82 | 2017-12-21 15:41:02 +0100 | [diff] [blame] | 77 | === Eclipse project with custom plugins === |
| 78 | |
| 79 | To add custom plugins to the eclipse project add them to `tools/bzl/plugins.bzl` |
| 80 | the same way you would when |
| 81 | link:dev-build-plugins.html#_bundle_custom_plugin_in_release_war[bundling in release.war] |
| 82 | and run `tools/eclipse/project.py`. |
| 83 | |
Luca Milanesio | 911611a | 2020-10-06 14:49:01 +0100 | [diff] [blame] | 84 | == Java Versions |
David Ostrovsky | 8aae31c | 2018-06-25 23:45:15 +0200 | [diff] [blame] | 85 | |
Luca Milanesio | 911611a | 2020-10-06 14:49:01 +0100 | [diff] [blame] | 86 | Java 11 is supported as a default, but some adjustments must be done for other JDKs: |
David Ostrovsky | 8aae31c | 2018-06-25 23:45:15 +0200 | [diff] [blame] | 87 | |
| 88 | * Add JRE, e.g.: directory: /usr/lib64/jvm/java-9-openjdk, name: java-9-openjdk-9 |
Marco Miller | 0b7e998 | 2019-11-01 13:29:08 -0400 | [diff] [blame] | 89 | * Change execution environment for gerrit project to: JavaSE-9 (java-9-openjdk-9) |
David Ostrovsky | 8aae31c | 2018-06-25 23:45:15 +0200 | [diff] [blame] | 90 | * Check that compiler compliance level in gerrit project is set to: 9 |
David Pursehouse | 2b16f6a | 2015-08-28 09:38:50 +0900 | [diff] [blame] | 91 | |
Luca Milanesio | 911611a | 2020-10-06 14:49:01 +0100 | [diff] [blame] | 92 | Moreover, the actual java 11 language features are not supported yet. |
| 93 | |
Martin Fick | 081fa51 | 2011-08-12 11:22:45 -0600 | [diff] [blame] | 94 | [[Formatting]] |
Yuxuan 'fishy' Wang | 61698b1 | 2013-12-20 12:55:51 -0800 | [diff] [blame] | 95 | == Code Formatter Settings |
Shawn O. Pearce | e89544b | 2009-04-28 07:59:44 -0700 | [diff] [blame] | 96 | |
David Ostrovsky | 248b709 | 2017-02-09 22:13:44 +0100 | [diff] [blame] | 97 | To format source code, Gerrit uses the |
Marian Harbach | 3425337 | 2019-12-10 18:01:31 +0100 | [diff] [blame] | 98 | link:https://github.com/google/google-java-format[`google-java-format`,role=external,window=_blank] |
Dave Borowitz | 3efa105 | 2019-01-28 07:21:29 -0800 | [diff] [blame] | 99 | tool (version 1.7), which automatically formats code to follow the |
Marco Miller | d71da9b | 2019-11-22 15:00:46 -0500 | [diff] [blame] | 100 | style guide. See link:dev-crafting-changes.html#style[Code Style] for the |
David Ostrovsky | 248b709 | 2017-02-09 22:13:44 +0100 | [diff] [blame] | 101 | instruction how to set up command line tool that uses this formatter. |
| 102 | The Eclipse plugin is provided that allows to format with the same |
| 103 | formatter from within the Eclipse IDE. See |
Marian Harbach | 3425337 | 2019-12-10 18:01:31 +0100 | [diff] [blame] | 104 | link:https://github.com/google/google-java-format#eclipse[Eclipse plugin,role=external,window=_blank] |
David Ostrovsky | 248b709 | 2017-02-09 22:13:44 +0100 | [diff] [blame] | 105 | for details how to install it. It's important to use the same plugin version |
| 106 | as the `google-java-format` script. |
Shawn O. Pearce | e89544b | 2009-04-28 07:59:44 -0700 | [diff] [blame] | 107 | |
Yuxuan 'fishy' Wang | 61698b1 | 2013-12-20 12:55:51 -0800 | [diff] [blame] | 108 | == Site Initialization |
Shawn O. Pearce | d2b73db | 2009-01-09 11:55:47 -0800 | [diff] [blame] | 109 | |
David Ostrovsky | dcee572 | 2013-05-15 00:10:55 +0200 | [diff] [blame] | 110 | Build once on the command line with |
David Ostrovsky | fdbfcad | 2016-11-15 06:35:29 -0800 | [diff] [blame] | 111 | link:dev-bazel.html#build[Bazel] and then follow |
David Pursehouse | 6de7ee2 | 2013-05-20 11:08:51 +0900 | [diff] [blame] | 112 | link:dev-readme.html#init[Site Initialization] in the |
Shawn O. Pearce | 18f1f7f | 2009-12-16 11:32:39 -0800 | [diff] [blame] | 113 | Developer Setup guide to configure a local site for testing. |
Shawn O. Pearce | d2b73db | 2009-01-09 11:55:47 -0800 | [diff] [blame] | 114 | |
Shawn O. Pearce | d2b73db | 2009-01-09 11:55:47 -0800 | [diff] [blame] | 115 | |
Yuxuan 'fishy' Wang | 61698b1 | 2013-12-20 12:55:51 -0800 | [diff] [blame] | 116 | == Testing |
Shawn O. Pearce | 8d2f184 | 2009-05-13 07:59:04 -0700 | [diff] [blame] | 117 | |
Frank Borden | 1024988 | 2022-08-24 21:24:51 +0200 | [diff] [blame] | 118 | === The Gerrit web app UI is served by `Web Dev Server`. To launch it, |
David Ostrovsky | add163f | 2020-02-13 22:32:08 +0100 | [diff] [blame] | 119 | run this command: |
| 120 | |
| 121 | ---- |
Frank Borden | 1024988 | 2022-08-24 21:24:51 +0200 | [diff] [blame] | 122 | $ npm run start |
David Ostrovsky | add163f | 2020-02-13 22:32:08 +0100 | [diff] [blame] | 123 | ---- |
| 124 | |
Yuxuan 'fishy' Wang | 61698b1 | 2013-12-20 12:55:51 -0800 | [diff] [blame] | 125 | === Running the Daemon |
Shawn O. Pearce | 8d2f184 | 2009-05-13 07:59:04 -0700 | [diff] [blame] | 126 | |
David Pursehouse | 584af67 | 2013-05-20 11:15:18 +0900 | [diff] [blame] | 127 | Duplicate the existing launch configuration: |
Shawn O. Pearce | 8d2f184 | 2009-05-13 07:59:04 -0700 | [diff] [blame] | 128 | |
David Pursehouse | 44eed24 | 2015-01-08 11:42:35 +0900 | [diff] [blame] | 129 | * In Eclipse select Run -> Debug Configurations ... |
Shawn Pearce | cda2121 | 2013-11-28 20:49:42 -0800 | [diff] [blame] | 130 | * Java Application -> `gerrit_daemon` |
Shawn O. Pearce | 18f1f7f | 2009-12-16 11:32:39 -0800 | [diff] [blame] | 131 | * Right click, Duplicate |
Shawn O. Pearce | 18f1f7f | 2009-12-16 11:32:39 -0800 | [diff] [blame] | 132 | * Modify the name to be unique. |
Shawn O. Pearce | 18f1f7f | 2009-12-16 11:32:39 -0800 | [diff] [blame] | 133 | * Switch to Arguments tab. |
Shawn O. Pearce | 955d00e | 2009-12-19 13:38:19 -0800 | [diff] [blame] | 134 | * Edit the `-d` program argument flag to match the path used during |
David Pursehouse | 44eed24 | 2015-01-08 11:42:35 +0900 | [diff] [blame] | 135 | 'init'. The template launch configuration resolves to `../gerrit_testsite` |
Shawn O. Pearce | 955d00e | 2009-12-19 13:38:19 -0800 | [diff] [blame] | 136 | since that is what the documentation recommends. |
Shawn O. Pearce | d2b73db | 2009-01-09 11:55:47 -0800 | [diff] [blame] | 137 | |
Shawn O. Pearce | 18f1f7f | 2009-12-16 11:32:39 -0800 | [diff] [blame] | 138 | * Switch to Common tab. |
| 139 | * Change Save as to be Local file. |
David Pursehouse | 3800abd | 2013-05-08 09:24:29 +0100 | [diff] [blame] | 140 | * Close the Debug Configurations dialog and save the changes when prompted. |
Shawn O. Pearce | 06b48c3 | 2009-05-10 16:21:05 -0700 | [diff] [blame] | 141 | |
Shawn O. Pearce | 5500e69 | 2009-05-28 15:55:01 -0700 | [diff] [blame] | 142 | GERRIT |
| 143 | ------ |
| 144 | Part of link:index.html[Gerrit Code Review] |
Yuxuan 'fishy' Wang | 99cb68d | 2013-10-31 17:26:00 -0700 | [diff] [blame] | 145 | |
| 146 | SEARCHBOX |
| 147 | --------- |