https://github.com/hellyguo/rust_java_samples
rust-java samples
https://github.com/hellyguo/rust_java_samples
demo demos example examples java rust sample samples
Last synced: 11 months ago
JSON representation
rust-java samples
- Host: GitHub
- URL: https://github.com/hellyguo/rust_java_samples
- Owner: hellyguo
- License: mit
- Created: 2024-07-15T03:19:24.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-07-29T05:34:30.000Z (over 1 year ago)
- Last Synced: 2024-07-29T07:01:22.674Z (over 1 year ago)
- Topics: demo, demos, example, examples, java, rust, sample, samples
- Language: Java
- Homepage:
- Size: 110 KB
- Stars: 10
- Watchers: 1
- Forks: 6
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# rust-java samples
[Chinese version, δΈζη](README_cn.md)
## desc
This repository contains sample `Rust` programs that call `Java` methods, and `Java` classes that call `Rust` methods.
## sample list
0. **sample000**, call `Rust` method from `Java`
- [s000_hello.rs](sample/src/samples/s000_hello.rs)
- [HelloWorld.java](sample4j/src/main/java/sample/s000/HelloWorld.java)
1. **sample001**, convert `Java` primitive types to bytes in `Rust`
- [s001_bytes.rs](sample/src/samples/s001_bytes.rs)
- [Bytes.java](sample4j/src/main/java/sample/s001/Bytes.java)
2. **sample002**, accept a `Java` object in `Rust`, and callback to `Java`
- [s002_callback.rs](sample/src/samples/s002_callback.rs)
- [Caller.java](sample4j/src/main/java/sample/s002/Caller.java)
- [s002_callback_fast.rs](sample/src/samples/s002_callback_fast.rs)
- [Caller2.java](sample4j/src/main/java/sample/s002/Caller2.java)
3. **sample003**, reverse `Java` bytes
- [s003_reverse_bytes.rs](sample/src/samples/s003_reverse_bytes.rs)
- [ReverseBytes.java](sample4j/src/main/java/sample/s003/ReverseBytes.java)
4. **sample004**, access `Java` DirectBuffer in `Rust`
- [s004_direct_buf.rs](sample/src/samples/s004_direct_buf.rs)
- [DirectBuf.java](sample4j/src/main/java/sample/s004/DirectBuf.java)
5. **sample005**, access `Java` primitive array in `Rust`
- [s005_primitive_array.rs](sample/src/samples/s005_primitive_array.rs)
- [PrimitiveArray.java](sample4j/src/main/java/sample/s005/PrimitiveArray.java)
6. **sample006**, create `Java` object in `Rust`
- [s006_create_object.rs](sample/src/samples/s006_create_object.rs)
- [ObjectCreator.java](sample4j/src/main/java/sample/s006/ObjectCreator.java)
7. **sample007**, set a field to `Java` object in `Rust`
- [s007_fill_field.rs](sample/src/samples/s007_fill_field.rs)
- [FieldFiller.java](sample4j/src/main/java/sample/s007/FieldFiller.java)
8. **sample008**, load `Java` class in `Rust`
- [s008_load_class.rs](sample/src/samples/s008_load_class.rs)
- [s008_class_buf.rs](sample/src/samples/s008_class_buf.rs)
- [MemClassLoader.java](sample4j/src/main/java/sample/s008/MemClassLoader.java)
> `s008_class_buf.rs` is generated by [java2u8vec.sh](shell/java2u8vec.sh)
9. **sample009**, register `Java` method dynamically in `Rust`
- [s009_reg_method.rs](sample/src/samples/s009_reg_method.rs)
- [NativeMethodRegister.java](sample4j/src/main/java/sample/s009/NativeMethodRegister.java)
[more ..](doc/sample_list.md)
## build
```shell
cargo build --release
```
`cargo` will generate `.so` in `target/release`, and call `build_java.sh` to build `.jar`, which contains `.so` in `resources` folder.
## how-to
1. call `Java` each JUnit test in IDE
2. call `Java` JUnit test suite in IDE
> **Note**: need to setup `JVM` args: `-DsampleLib=`
or
1. execute `Java` each JUnit test in console
```shell
gradle test --tests HelloWorldTest
```
2. execute `Java` each JUnit test suite in console
```shell
gradle test --tests SamplesSuite
```
The [JUnit report](sample4j/build/reports/tests/test/index.html) will be generated.
## thanks
Thanks to [metaworm](https://github.com/metaworm)([rust-java-demo](https://github.com/metaworm/rust-java-demo)). This article ([url1](https://zhuanlan.zhihu.com/p/568062165)/[url2](https://rustcc.cn/article?id=4ca84a67-d972-4460-912e-a297ec5edc0a)) is the most effective and detailed for learning how to call `JNI` through `Rust`.