Как я могу импортировать JavaVM из jni, не вызывая ошибок компиляции? - PullRequest
0 голосов
/ 30 июня 2019

Я пытаюсь эмулировать контрольные примеры на https://github.com/jni-rs/jni-rs/blob/master/tests/jni_api.rs и https://github.com/jni-rs/jni-rs/blob/master/tests/util/mod.rs. Я создал проект с main.rs

use jni::{InitArgsBuilder, JNIVersion, JavaVM};

fn main() {
    let jvm_args = InitArgsBuilder::new()
        .version(JNIVersion::V8)
        .option("-Xcheck:jni")
        //.option(format!("-Djava.class.path={}", heinous_classpath()))
        .build()
        .unwrap_or_else(|e| panic!("{}", e.display_chain().to_string()));

    let jvm = JavaVM::new(jvm_args);
}

и Cargo.toml:

[package]
name = "rust_call_jni"
version = "0.1.0"
authors = ["Robert Forsman <git@thoth.purplefrog.com>"]
edition = "2018"

[dependencies]
jni = "0.12.3"

Когда я делаю cargo build, я получаю следующую ошибку:

error[E0432]: unresolved import `jni::InitArgsBuilder`
 --> src/main.rs:1:11
  |
1 | use jni::{InitArgsBuilder, JNIVersion, JavaVM};
  |           ^^^^^^^^^^^^^^^ no `InitArgsBuilder` in the root

error[E0599]: no function or associated item named `new` found for type `jni::wrapper::java_vm::vm::JavaVM` in the current scope
  --> src/main.rs:12:23
   |
12 |     let jvm = JavaVM::new(jvm_args);
   |               --------^^^
   |               |
   |               function or associated item not found in `jni::wrapper::java_vm::vm::JavaVM`

Я использую Rust 1.34.2.

Как я могу изменить свой исходный код для правильного импорта и вызова конструкторов?

1 Ответ

0 голосов
/ 01 июля 2019

Основываясь на указателе от Светлина Зарева , я смог покопаться в документации и выяснить правильный синтаксис для включения функции вызова.

Самым важным было изменение в Cargo.toml. Строка документации для ящика может быть полезна, если включить этот пункт для людей с меньшим опытом написания Cargo.toml:

[package]
name = "rust_call_jni"
version = "0.1.0"
authors = ["Robert Forsman <git@thoth.purplefrog.com>"]
edition = "2018"

[dependencies.jni]
version = "0.12.3"
features = ["invocation"]

Мне пришлось изменить main.rs, чтобы исправить некоторые ошибки, которые были замаскированы предыдущими ошибками:

use jni::{InitArgsBuilder, JNIVersion, JavaVM};

fn main() {
    let jvm_args = InitArgsBuilder::new()
        .version(JNIVersion::V8)
        .option("-Xcheck:jni")
        //.option(&format!("-Djava.class.path={}", heinous_classpath()))
        .build()
        .unwrap_or_else(|e| //panic!("{}", e.display_chain().to_string())
        panic!("{:?}", e));

    let jvm = JavaVM::new(jvm_args);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...