Gerrit Code Review - Building with Buck ======================================= Installation ------------ There is currently no binary distribution of Buck, so it has to be manually built and installed. Apache Ant is required. Currently only Linux and Mac OS are supported. Clone the git and build it: ---- git clone https://gerrit.googlesource.com/buck cd buck ant ---- Make sure you have a `bin/` directory in your home directory and that it is included in your path: ---- mkdir ~/bin PATH=~/bin:$PATH ---- Add a symbolic link in `~/bin` to the buck executable: ---- ln -s `pwd`/bin/buck ~/bin/ ---- Verify that `buck` is accessible: ---- which buck ---- [[eclipse]] Eclipse Integration ------------------- Generating the Eclipse Project ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Create the Eclipse project by building the `eclipse` target: ---- buck build eclipse ---- In Eclipse, choose 'Import existing project' and select the `gerrit` project from the current working directory. Expand the `gerrit` project, right-click on the `buck-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 `buck build eclipse`. Refreshing the Classpath ~~~~~~~~~~~~~~~~~~~~~~~~ Normally `buck build eclipse` does everything necessary to generate a working Eclipse environment, but if the code doesn't compile and an updated classpath is needed, the Eclipse project can be refreshed and missing dependency JARs can be downloaded by building the `eclipse_project` and `download` targets: ---- buck build eclipse_project download ---- Attaching Sources ~~~~~~~~~~~~~~~~~ To save time and bandwidth source JARs are only downloaded by the buck build where necessary to compile Java source into JavaScript using the GWT compiler. Additional sources may be obtained, allowing Eclipse to show documentation or dive into the implementation of a library JAR: ---- buck build download_sources ---- [[build]] Building on the Command Line ---------------------------- Gerrit Development WAR File ~~~~~~~~~~~~~~~~~~~~~~~~~~~ To build the Gerrit web application: ---- buck build gerrit ---- The output executable WAR will be placed in: ---- buck-out/gen/gerrit.war ---- Extension and Plugin API JAR Files ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To build the extension and plugin API JAR files: ---- buck build api ---- The output JAR files will be placed in: ---- buck-out/gen/{extension,plugin}-api.jar ---- Install {extension,plugin}-api to the local maven repository: ---- buck build api_install ---- Deploy {extension,plugin}-api to the remote maven repository ---- buck build api_deploy ---- The type of the repo is induced from the Gerrit version name, i.e. * 2.8-SNAPSHOT: shapshot repo * 2.8: release repo Plugins ~~~~~~~ To build all core plugins: ---- buck build plugins:core ---- The output JAR files for individual plugins will be placed in: ---- buck-out/gen/plugins//.jar ---- The JAR files will also be packaged in: ---- buck-out/gen/plugins/core.zip ---- To build a specific plugin: ---- buck build plugins/ ---- The output JAR file will be be placed in: ---- buck-out/gen/plugins//.jar ---- Note that when building an individual plugin, the `core.zip` package is not regenerated. [[tests]] Running Unit Tests ------------------ To run all tests including acceptance tests: ---- buck test --all ---- To exclude slow tests: ---- buck test --all --exclude slow ---- Dependencies ------------ Dependency JARs are normally downloaded automatically, but Buck can inspect its graph and download any missing JAR files. This is useful to enable subsequent builds to run without network access. Force a download of dependency JARs by building the `download` target: ---- buck build download ---- When downloading from behind a proxy (which is common in some corporate environments), it might be necessary to explicitly specify the proxy that is then used by `curl`: ---- export http_proxy=http://:@: ---- Redirection to local mirrors of Maven Central and the Gerrit storage bucket is supported by defining specific properties in `local.properties`, a file that is not tracked by Git: ---- echo download.GERRIT = http://nexus.my-company.com/ >>local.properties echo download.MAVEN_CENTRAL = http://nexus.my-company.com/ >>local.properties ---- The `local.properties` file may be placed in the root of the gerrit repository being built, or in `~/.gerritcodereview/`. The file in the root of the gerrit repository has precedence. Caching Build Results ~~~~~~~~~~~~~~~~~~~~~ Build results can be locally cached, saving rebuild time when switching between Git branches. Buck's documentation covers caching in link:http://facebook.github.io/buck/concept/buckconfig.html[buckconfig]. The trivial case using a local directory is: ---- cat >.buckconfig.local <