From dc213c405513e0568aab21ad433f71c53c7119eb Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Mon, 26 Sep 2022 00:23:56 +0800 Subject: [PATCH] feat: add java&rust --- README.md | 3 +- __lang/java/README.md | 6 + __lang/java/java-demo/README.md | 6 + .../java-demo/java/me/hatter/RustJNI.java | 14 ++ __lang/java/java-demo/pom.xml | 48 +++++ __lang/java/java-rust-demo/Cargo.lock | 179 ++++++++++++++++++ __lang/java/java-rust-demo/Cargo.toml | 13 ++ __lang/java/java-rust-demo/src/lib.rs | 7 + 8 files changed, 275 insertions(+), 1 deletion(-) create mode 100644 __lang/java/README.md create mode 100644 __lang/java/java-demo/README.md create mode 100644 __lang/java/java-demo/java/me/hatter/RustJNI.java create mode 100644 __lang/java/java-demo/pom.xml create mode 100644 __lang/java/java-rust-demo/Cargo.lock create mode 100644 __lang/java/java-rust-demo/Cargo.toml create mode 100644 __lang/java/java-rust-demo/src/lib.rs diff --git a/README.md b/README.md index 8b36b3a..0bff585 100644 --- a/README.md +++ b/README.md @@ -85,6 +85,7 @@ Project or files: │   └── svg ├── __lang │   ├── boa +│   ├── java │   ├── monkey-rs │   ├── peg │   ├── pest @@ -241,6 +242,6 @@ Project or files: ├── vec.rs └── while.rs -210 directories, 37 files +211 directories, 37 files ``` diff --git a/__lang/java/README.md b/__lang/java/README.md new file mode 100644 index 0000000..b00d579 --- /dev/null +++ b/__lang/java/README.md @@ -0,0 +1,6 @@ + +* https://rustcc.cn/article?id=4ca84a67-d972-4460-912e-a297ec5edc0a +* https://github.com/metaworm/rust-java-demo + + + diff --git a/__lang/java/java-demo/README.md b/__lang/java/java-demo/README.md new file mode 100644 index 0000000..015f10d --- /dev/null +++ b/__lang/java/java-demo/README.md @@ -0,0 +1,6 @@ + +```shell +mvn clean package +java -Djava.library.path=../java-rust-demo/target/debug/ -jar target/RustJNI-1.0-SNAPSHOT.jar +``` + diff --git a/__lang/java/java-demo/java/me/hatter/RustJNI.java b/__lang/java/java-demo/java/me/hatter/RustJNI.java new file mode 100644 index 0000000..9397c59 --- /dev/null +++ b/__lang/java/java-demo/java/me/hatter/RustJNI.java @@ -0,0 +1,14 @@ +package me.hatter; + +public class RustJNI { + static { + System.loadLibrary("java_rust_demo"); + } + + public static void main(String[] args) { + init(); + } + + static native void init(); +} + diff --git a/__lang/java/java-demo/pom.xml b/__lang/java/java-demo/pom.xml new file mode 100644 index 0000000..ddee0a4 --- /dev/null +++ b/__lang/java/java-demo/pom.xml @@ -0,0 +1,48 @@ + + + 4.0.0 + + me.hatter + RustJNI + 1.0-SNAPSHOT + + + me.hatter.RustJNI + 1.8 + 1.8 + UTF-8 + + + + + + + java + + + org.apache.maven.plugins + maven-compiler-plugin + 2.4 + + UTF-8 + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + + + true + me.hatter.RustJNI + + + + + + + diff --git a/__lang/java/java-rust-demo/Cargo.lock b/__lang/java/java-rust-demo/Cargo.lock new file mode 100644 index 0000000..00081bd --- /dev/null +++ b/__lang/java/java-rust-demo/Cargo.lock @@ -0,0 +1,179 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "bytes" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "combine" +version = "4.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "java-rust-demo" +version = "0.1.0" +dependencies = [ + "jni", +] + +[[package]] +name = "jni" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "proc-macro2" +version = "1.0.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bd7356a8122b6c4a24a82b278680c73357984ca2fc79a0f9fa6dea7dced7c58" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "syn" +version = "1.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52205623b1b0f064a4e71182c3b18ae902267282930c6d5462c91b859668426e" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a99cb8c4b9a8ef0e7907cd3b617cc8dc04d571c4e73c8ae403d80ac160bb122" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a891860d3c8d66fec8e73ddb3765f90082374dbaaa833407b904a94f1a7eb43" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "unicode-ident" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd" + +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/__lang/java/java-rust-demo/Cargo.toml b/__lang/java/java-rust-demo/Cargo.toml new file mode 100644 index 0000000..bf48fbd --- /dev/null +++ b/__lang/java/java-rust-demo/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "java-rust-demo" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[lib] +crate-type = ['cdylib'] + +[dependencies] +jni = {version = '0.19'} + diff --git a/__lang/java/java-rust-demo/src/lib.rs b/__lang/java/java-rust-demo/src/lib.rs new file mode 100644 index 0000000..34a24f3 --- /dev/null +++ b/__lang/java/java-rust-demo/src/lib.rs @@ -0,0 +1,7 @@ +use jni::objects::*; +use jni::JNIEnv; + +#[no_mangle] +pub unsafe extern "C" fn Java_me_hatter_RustJNI_init(_env: JNIEnv, _class: JClass) { + println!("rust-java-demo inited"); +}