# Build

This plugin is built with Bazel in-tree build. This plugin depends on the Elasticsearch Java Low
Level REST Client (abbreviated as LLRC by the ES dev team) for integration with an Elasticsearch
cluster. The LLRC is licensed as Apache v2 (even after ES itself has moved to SSPL) and is
compatible with all ES versions. See the [LLRC
docs](https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/8.3/java-rest-low-usage-maven.html)
for more information.

## Build in Gerrit tree

Create a symbolic link of the repository source to the Gerrit source
tree plugins/index-elasticsearch directory, and the external_plugin_deps.bzl
dependencies linked to plugins/external_plugin_deps.bzl.

Example:

```sh
git clone https://gerrit.googlesource.com/gerrit
git clone https://gerrit.googlesource.com/modules/index-elasticsearch
cd gerrit/plugins
ln -s ../../index-elasticsearch index-elasticsearch
ln -sf ../../external_plugin_deps.bzl .
```

From the Gerrit source tree issue the command `bazelisk build plugins/index-elasticsearch`.

Example:

```sh
bazelisk build plugins/index-elasticsearch
```

The libModule jar file is created under `bazel-bin/plugins/index-elasticsearch/index-elasticsearch.jar`

## Integration test

There are two different ways to run tests for this module. You can either run only the tests
provided by the module or you can run all Gerrit core acceptance tests with the indexing backend set
to this module.

To run only the tests provided by this plugin:

```sh
bazelisk test plugins/index-elasticsearch/...
```

Gerrit acceptance tests allow the execution with an alternate implementation of
the indexing backend using the `GERRIT_INDEX_MODULE` environment variable.

```sh
bazelisk test --test_env=GERRIT_INDEX_MODULE=com.google.gerrit.elasticsearch.ElasticIndexModule //...
```

## IDE setup

This project can be imported into the Eclipse IDE.
Add the plugin name to the `CUSTOM_PLUGINS` and to the
`CUSTOM_PLUGINS_TEST_DEPS` set in Gerrit core in
`tools/bzl/plugins.bzl`, and execute:

```
  ./tools/eclipse/project.py
```

More information about Bazel can be found in the [Gerrit
documentation](../../../Documentation/dev-bazel.html).

[Back to @PLUGIN@ documentation index][index]

[index]: index.html
