Как лечить атрибут -classpath Java 10 в JNI

Мой проект очень зависит от JNI для взаимодействия с кодом C. Я использую Java 8 уже много лет. Я решил перейти на Java 10, но столкнулся с проблемой реализации JNI.

У меня есть несколько импортированных библиотек в классе Java, которые содержат следующие собственные методы:

import com.abc.repair.Results;

public class DataSupport {

    public native Results getPartResults(String x);
    public native Results getItemResults(String x);
}

Реализация Java 8:

javah -jni -classpath ../lib/Results.jar com.abc.jni.DataSupport

Реализация Java 10:

javac -h . ../build/com/abc/jni/DataSupport.java

Реализация Java 10 отлично работает, если нет импорта из какой-либо другой библиотеки. Однако он не может создать жалобу на то, что com.abc.repair.Results не существует, когда здесь есть какой-либо импорт. Добавление пути к классам таким же способом, как в Java 8, не решило проблему.

Как я могу использовать -classpath или какую альтернативу ему в Java 10?

Вы пытались вместо этого добавить банку в modulepath?

Naman 12.01.2019 01:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
132
1

Ответы 1

Вы должны указать исходный путь. В вашем случае это будет выглядеть так

javac -h . -sourcepath ../build ../build/com/abc/jni/DataSupport.java

На самом деле он работал с javac -h. -classpath ../build ../build/com/abc/jni/DataSupport.java. Мне просто нужно было поставить "." (текущий каталог) перед атрибутом -classpath. Ваш намек помог. Спасибо!

fadd 14.01.2019 23:56

Этот . - это место для хранения сгенерированного заголовка

Alex Cohn 15.01.2019 00:31

Другие вопросы по теме