У меня есть приложение Java, которое использует JNI, и я использую gradle для создания разделяемой библиотеки C ++, содержащей код, который я загружаю как часть JNI. Сборка C ++ является подпроектом корневой сборки. Я могу поставить зависимость на :jnisubproject:assembleRelease
от задач run
или jar
моего корневого проекта, который создает общую библиотеку (на jnisubproject/build/lib/main/release/libjnisubproject.so
), но не добавляет эту общую библиотеку в мой файл JAR, ни это настраивает мой путь к библиотеке Java, чтобы иметь возможность доступа к общему объекту во время выполнения. С помощью некоторых хакеров (явно изменив системное свойство java.library.path
в моей задаче запуска), я могу заставить его работать, когда использую gradle run
, но я хотел бы иметь возможность создать JAR-файл для перераспределения.
Я попытался добавить подпроект как зависимость времени выполнения, добавив
dependencies {
runtime project(":jnisubproject")
// runtime ":jnisubproject:assembleRelease" also doesn't work
}
к зависимостям моего корневого проекта, но этого недостаточно для получения gradle jar
для создания подпроекта или для включения его файлов в JAR; это на самом деле, кажется, ничего не делает. Если я добавлю явную зависимость в задачу JAR, например:
jar {
dependsOn ":jnisubproject:assembleRelease"
}
он создаст мой подпроект при запуске gradle jar
, но неудивительно, что разделяемая библиотека не попадает в JAR. Последнее, что я попробовал, был приведенный выше фрагмент с явной зависимостью в дополнение к добавлению зависимости файла в выходной каталог:
dependencies {
runtime files('jnisubproject/build/lib/main/release/*')
}
но это и то, и другое кажется невероятным и не работает, потрясающая комбинация. Если я явно включаю встроенные файлы в JAR, выполнив
jar {
include 'jnisubproject/build/lib/main/release/*'
}
Тогда мой JAR-файл оказывается полностью пустым, кроме манифеста.
Короче говоря, моя проблема заключается в следующем:
- У меня есть подпроект, который создает общую библиотеку
- Я хочу, чтобы корневой проект (проект Java) выражал зависимость от этой общей библиотеки.
- Я хочу, чтобы эта зависимость добавляла общую библиотеку в
java.library.path
и в мой выходной JAR-файл.
Есть идеи?