# GraphAr Java (under development)

This directory contains the code and build system for the GraphAr Java library which powered by [Alibaba-FastFFI](https://github.com/alibaba/fastFFI).

## Dependencies

### Java

- JDK 8 or higher
- Maven3+

### C++

- CMake 3.5 or higher
- LLVM 11

## Install

Only support installing from source currently, but we will support installing from Maven in the future.

Firstly, install llvm-11. `LLVM11_HOME` should point to the home of LLVM 11. In Ubuntu, it is at `/usr/lib/llvm-11`. Basically, the build procedure the following binary:

- `$LLVM11_HOME/bin/clang++`
- `$LLVM11_HOME/bin/ld.lld`
- `$LLVM11_HOME/lib/cmake/llvm`


Tips:
- Use Ubuntu as example:

  ```bash
  $ sudo apt-get install llvm-11 clang-11 lld-11 libclang-11-dev libz-dev -y
  $ export LLVM11_HOME=/usr/lib/llvm-11
  ```

- Or compile from source with this [script](https://github.com/alibaba/fastFFI/blob/main/docker/install-llvm11.sh):
  ```bash
  $ export LLVM11_HOME=/usr/lib/llvm-11
  $ export LLVM_VAR=11.0.0
  $ sudo ./install-llvm11.sh
  ```

Make the graphar-java-library directory as the current working directory:

 ```bash
  $ git clone https://github.com/apache/incubator-graphar.git
  $ cd incubator-graphar
  $ git submodule update --init
  $ cd maven-projects/java
```

Compile package:

```bash
 $ mvn clean install -DskipTests
```

This will build GraphAr C++ library internally for Java. If you already installed GraphAr C++ library in your system,
you can append this option to skip: `-DbuildGarCPP=OFF`

Then set GraphAr as a dependency in maven project:

```xml
<dependencies>
    <dependency>
      <groupId>org.apache.graphar</groupId>
      <artifactId>java</artifactId>
      <version>0.1.0</version>
    </dependency>
</dependencies>
```

## Generate API document

Building the API document with maven:

```bash
mvn javadoc:javadoc
```

The API document will be generated in the `target/site/apidocs` directory.

## How to use

Please refer to [GraphAr Java Library Documentation](https://graphar.apache.org/docs/libraries/java/).