2023-06-15 11:10:28 -04:00
# bdk-jvm
2024-03-28 14:32:53 -04:00
This project builds a .jar package for the JVM platform that provides Kotlin language bindings for the [`bdk` ] library. The Kotlin language bindings are created by the `bdk-ffi` project which is included in the root of this repository.
2022-11-15 20:29:58 -05:00
## How to Use
2022-11-30 12:20:48 -05:00
To use the Kotlin language bindings for [`bdk` ] in your JVM project add the following to your gradle dependencies:
2022-11-15 20:29:58 -05:00
```kotlin
repositories {
mavenCentral()
}
dependencies {
implementation("org.bitcoindevkit:bdk-jvm:< version > ")
}
```
2022-11-30 12:20:48 -05:00
### Snapshot releases
To use a snapshot release, specify the snapshot repository url in the `repositories` block and use the snapshot version in the `dependencies` block:
```kotlin
repositories {
maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
}
2023-09-06 14:13:15 -04:00
dependencies {
implementation("org.bitcoindevkit:bdk-jvm:< version-SNAPSHOT > ")
2022-11-30 12:20:48 -05:00
}
```
## Example Projects
2022-11-15 20:29:58 -05:00
* [Tatooine Faucet ](https://github.com/thunderbiscuit/tatooine )
2022-11-30 12:20:48 -05:00
## How to build
2024-03-28 13:05:07 -04:00
_Note that Kotlin version `1.9.23` or later is required to build the library._
1. Install JDK 17. For example, with SDKMAN!:
2023-04-23 09:25:19 +07:00
```shell
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
2024-03-28 13:05:07 -04:00
sdk install java 17.0.2-tem
2023-04-23 09:25:19 +07:00
```
2023-11-09 16:17:03 -06:00
2. Install Rust (note that we are currently building using Rust 1.73.0):
2023-04-23 09:25:19 +07:00
```shell
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
2023-11-09 16:17:03 -06:00
rustup default 1.73.0
2023-04-23 09:25:19 +07:00
```
3. Clone this repository.
2022-11-15 20:29:58 -05:00
```shell
git clone https://github.com/bitcoindevkit/bdk-ffi
```
2023-04-23 09:25:19 +07:00
4. If building on macOS install required intel and m1 jvm targets
2022-11-15 20:29:58 -05:00
```sh
rustup target add x86_64-apple-darwin aarch64-apple-darwin
```
2023-04-23 09:25:19 +07:00
5. Build kotlin bindings
2023-06-15 11:10:28 -04:00
```sh
./gradlew buildJvmLib
```
2022-11-15 20:29:58 -05:00
2022-11-30 12:20:48 -05:00
## How to publish to your local Maven repo
2022-11-15 20:29:58 -05:00
```shell
cd bdk-jvm
2024-04-10 11:37:53 -04:00
./gradlew publishToMavenLocal -P localBuild
2022-11-15 20:29:58 -05:00
```
Note that the commands assume you don't need the local libraries to be signed. If you do wish to sign them, simply set your `~/.gradle/gradle.properties` signing key values like so:
```properties
signing.gnupg.keyName=< YOUR_GNUPG_ID >
signing.gnupg.passphrase=< YOUR_GNUPG_PASSPHRASE >
```
2024-04-10 11:37:53 -04:00
and use the `publishToMavenLocal` task without the `localBuild` flag:
2022-11-15 20:29:58 -05:00
```shell
./gradlew publishToMavenLocal
```
2022-11-30 12:20:48 -05:00
2022-12-14 14:43:39 -05:00
## Known issues
2023-02-17 17:31:00 -05:00
## JNA dependency
2022-12-14 14:43:39 -05:00
Depending on the JVM version you use, you might not have the JNA dependency on your classpath. The exception thrown will be
```shell
class file for com.sun.jna.Pointer not found
```
2023-11-09 16:17:03 -06:00
2022-12-14 14:43:39 -05:00
The solution is to add JNA as a dependency like so:
```kotlin
dependencies {
// ...
implementation("net.java.dev.jna:jna:5.12.1")
}
```
2022-11-30 12:20:48 -05:00
[`bdk` ]: https://github.com/bitcoindevkit/bdk
[`bdk-ffi` ]: https://github.com/bitcoindevkit/bdk-ffi