Bazel Build
===========

This plugin can be built with Bazel


Build standalone
----------------

To build all the example plugins, issue the following command:


  bazel build :all


The output for all the example plugins is created in


  bazel-genfiles/all.zip


To build a specific example plugin, issue one of the following commands:


  bazel build example-<example>

  OR

  cd example-<example> && bazel build example-<example>


If the build command is run from the top-level example directory,
the output for the example is created in


  bazel-genfiles/example-<example>/example-<example>.jar


If the build command is run from inside a specific example directory,
the output for the example is created in


  example-<example>/bazel-genfiles/example-<example>.jar



Buck Build
==========

This plugin can be built with Buck.

Two build modes are supported: Standalone and in Gerrit tree. Standalone
build mode is recommended, as this mode doesn't require local Gerrit
tree to exist.

Build standalone
----------------

Clone bucklets library:


  git clone https://gerrit.googlesource.com/bucklets


and link it to examples directory:


  cd examples && ln -s ../bucklets .


To build a specific example plugin, issue the following command:


  cd example-<example> && buck build plugin


The output or each example is created in


  buck-out/gen/example-<example>.jar

To execute the tests run:


  buck test


Build in Gerrit tree
--------------------

Clone or link this plugin to the plugins directory of Gerrit's source
tree, and issue the command:


  buck build plugins/examples/example-<example>


The output is created in


  buck-out/gen/plugins/examples/example-<example>/example-<example>.jar


This project can be imported into the Eclipse IDE:


  ./tools/eclipse/project.py


To execute the tests run:


  buck test --include examples/example-<example>

Note that for compatibility reasons a Maven build is provided, but is considered
to be deprecated and will be removed in a future version of this plugin.

To build with Maven, change directory to the specific example plugin folder and
issue the command:


  mvn clean package


When building with Maven, the Gerrit Plugin API must be available.

How to build the Gerrit Plugin API is described in the Gerrit
documentation (../../../Documentation/dev-buck.html#_extension_and_plugin_api_jar_files).
