4856782145
Change-Id: I87e2ad3bc8e417f26758765cc6bde8880b3c653e
377 lines
7.9 KiB
Plaintext
377 lines
7.9 KiB
Plaintext
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
|
|
----
|
|
|
|
If you plan to use the link:#buck-daemon[Buck daemon] add a symbolic
|
|
link in `~/bin` to the buckd executable:
|
|
|
|
----
|
|
ln -s `pwd`/bin/buckd ~/bin/
|
|
----
|
|
|
|
To enable autocompletion of buck commands, install the autocompletion
|
|
script from `./scripts/bash_completion` in the buck project. Refer to
|
|
the script's header comments for installation instructions.
|
|
|
|
|
|
[[eclipse]]
|
|
Eclipse Integration
|
|
-------------------
|
|
|
|
|
|
Generating the Eclipse Project
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Create the Eclipse project:
|
|
|
|
----
|
|
tools/eclipse/project.py
|
|
----
|
|
|
|
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
|
|
`tools/eclipse/project.py`.
|
|
|
|
|
|
Refreshing the Classpath
|
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
If an updated classpath is needed, the Eclipse project can be
|
|
refreshed and missing dependency JARs can be downloaded:
|
|
|
|
----
|
|
tools/eclipse/project.py
|
|
----
|
|
|
|
|
|
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:
|
|
|
|
----
|
|
tools/eclipse/project.py --src
|
|
----
|
|
|
|
|
|
[[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: snapshot 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/<name>/<name>.jar
|
|
----
|
|
|
|
The JAR files will also be packaged in:
|
|
|
|
----
|
|
buck-out/gen/plugins/core.zip
|
|
----
|
|
|
|
To build a specific plugin:
|
|
|
|
----
|
|
buck build plugins/<name>
|
|
----
|
|
|
|
The output JAR file will be be placed in:
|
|
|
|
----
|
|
buck-out/gen/plugins/<name>/<name>.jar
|
|
----
|
|
|
|
Note that when building an individual plugin, the `core.zip` package
|
|
is not regenerated.
|
|
|
|
|
|
[[documentation]]
|
|
Documentation
|
|
~~~~~~~~~~~~~
|
|
|
|
To build the documentation:
|
|
|
|
----
|
|
buck build docs
|
|
----
|
|
|
|
The generated html files will be placed in:
|
|
|
|
----
|
|
buck-out/gen/Documentation/html__tmp/Documentation
|
|
----
|
|
|
|
The html files will also be bundled into `html.zip` in this location:
|
|
|
|
----
|
|
buck-out/gen/Documentation/html.zip
|
|
----
|
|
|
|
[[release]]
|
|
Gerrit Release WAR File
|
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
To build the release of the Gerrit web application, including documentation and
|
|
all core plugins:
|
|
|
|
----
|
|
buck build release
|
|
----
|
|
|
|
The output release WAR will be placed in:
|
|
|
|
----
|
|
buck-out/gen/release.war
|
|
----
|
|
|
|
[[tests]]
|
|
Running Unit Tests
|
|
------------------
|
|
|
|
To run all tests including acceptance tests:
|
|
|
|
----
|
|
buck test --all
|
|
----
|
|
|
|
To exclude slow tests:
|
|
|
|
----
|
|
buck test --all --exclude slow
|
|
----
|
|
|
|
To run a specific test, e.g. the acceptance test
|
|
`com.google.gerrit.acceptance.git.HttpPushForReviewIT`:
|
|
|
|
----
|
|
buck test //gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git:HttpPushForReviewIT
|
|
----
|
|
|
|
|
|
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:
|
|
|
|
----
|
|
tools/download_all.py
|
|
----
|
|
|
|
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://<proxy_user_id>:<proxy_password>@<proxy_server>:<proxy_port>
|
|
----
|
|
|
|
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.
|
|
|
|
Building against unpublished Maven JARs
|
|
---------------------------------------
|
|
|
|
To build against unpublished Maven JARs, like gwtorm or PrologCafe, the custom
|
|
JARs must be installed in the local Maven repository (`mvn clean install`) and
|
|
`maven_jar()` must be updated to point to the `MAVEN_LOCAL` Maven repository for
|
|
that artifact:
|
|
|
|
[source,python]
|
|
----
|
|
maven_jar(
|
|
name = 'gwtorm',
|
|
id = 'gwtorm:gwtorm:42',
|
|
license = 'Apache2.0',
|
|
repository = MAVEN_LOCAL,
|
|
)
|
|
----
|
|
|
|
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 <<EOF
|
|
[cache]
|
|
mode = dir
|
|
dir = buck-cache
|
|
EOF
|
|
----
|
|
|
|
[[buck-daemon]]
|
|
Using Buck daemon
|
|
~~~~~~~~~~~~~~~~~
|
|
|
|
Buck ships with a daemon command `buckd`, which uses the
|
|
link:https://github.com/martylamb/nailgun[Nailgun] protocol for running
|
|
Java programs from the command line without incurring the JVM startup
|
|
overhead.
|
|
|
|
Using a Buck daemon can save significant amounts of time as it avoids the
|
|
overhead of starting a Java virtual machine, loading the buck class files
|
|
and parsing the build files for each command.
|
|
|
|
It is safe to run several buck daemons started from different project
|
|
directories and they will not interfere with each other. Buck's documentation
|
|
covers daemon in http://facebook.github.io/buck/command/buckd.html[buckd].
|
|
|
|
The trivial use case is to run `buckd` from the project's root directory and
|
|
run `buck` as usual:
|
|
|
|
----
|
|
buckd
|
|
buck build gerrit
|
|
Using buckd.
|
|
[-] PARSING BUILD FILES...FINISHED 0.6s
|
|
[-] BUILDING...FINISHED 0.2s
|
|
----
|
|
|
|
Override Buck's settings
|
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
User-specific configuration can be placed in one of the following files:
|
|
`/etc/buck.conf`, `$HOME/.buck/buck.conf` or `$HOME/.buckrc`.
|
|
|
|
For example to override Buck's default 1GB heap size:
|
|
|
|
----
|
|
cat > $HOME/.buckrc <<EOF
|
|
export BUCK_EXTRA_JAVA_ARGS="\
|
|
-XX:MaxPermSize=512m \
|
|
-Xms8000m \
|
|
-Xmx16000m"
|
|
EOF
|
|
----
|
|
|
|
Or to debug BUCK, set `BUCK_DEBUG_MODE` to anything non-empty, then connect to
|
|
port 8888:
|
|
|
|
----
|
|
cat > $HOME/.buckrc <<EOF
|
|
export BUCK_DEBUG_MODE="yes"
|
|
EOF
|
|
----
|
|
|
|
GERRIT
|
|
------
|
|
Part of link:index.html[Gerrit Code Review]
|