Publish JNI Library with Target Machines
You can open this sample inside an IDE using the IntelliJ native importer or Eclipse Buildship. |
This sample shows how to publish a JNI library with multiple target machines with Gradle to a binary repository. The library has no dependencies, and the build has a minimal configuration.
In this sample, we are publishing a JNI library with multiple machines implemented in Java and C++; however, this applies to other JVM and native languages as well.
build.gradle
plugins {
id 'java'
id 'dev.nokee.jni-library'
id 'dev.nokee.cpp-language'
id 'maven-publish'
id 'dev.nokee.samples.jni-library-publish'
}
group = 'com.example.greeter'
version = '4.2'
library {
targetMachines = [
machines.windows.x86_64,
machines.macOS.x86_64,
machines.linux.x86_64
]
}
afterEvaluate {
publishing {
publications {
jniLibrary(MavenPublication) {
from components.jni
artifactId = project.name
}
jniLibraryMacos(MavenPublication) {
from components.getByName('jniMacos')
artifactId = "${project.name}-macos"
}
jniLibraryLinux(MavenPublication) {
from components.jniLinux
artifactId = "${project.name}-linux"
}
jniLibraryWindows(MavenPublication) {
from components.jniWindows
artifactId = "${project.name}-windows"
}
}
repositories {
maven {
url = "${buildDir}/publishing-repository"
}
}
}
}
build.gradle.kts
plugins {
id("java")
id("dev.nokee.jni-library")
id("dev.nokee.cpp-language")
id("maven-publish")
id("dev.nokee.samples.jni-library-publish")
}
group = "com.example.greeter"
version = "4.2"
library {
targetMachines.set(listOf(
machines.windows.x86_64,
machines.macOS.x86_64,
machines.linux.x86_64
))
}
afterEvaluate {
publishing {
publications {
create<MavenPublication>("jniLibrary") {
from(components.getByName("jni"))
artifactId = project.name
}
create<MavenPublication>("jniLibraryMacos") {
from(components.getByName("jniMacos"))
artifactId = "${project.name}-macos"
}
create<MavenPublication>("jniLibraryLinux") {
from(components.getByName("jniLinux"))
artifactId = "${project.name}-linux"
}
create<MavenPublication>("jniLibraryWindows") {
from(components.getByName("jniWindows"))
artifactId = "${project.name}-windows"
}
}
repositories {
maven {
url = uri("${buildDir}/publishing-repository")
}
}
}
}
To publish the library:
$ ./gradlew publishJniLibraryPublicationToMavenRepository publishJniLibraryMacosPublicationToMavenRepository BUILD SUCCESSFUL 11 actionable tasks: 11 executed $ tree ./build/publishing-repository ./build/publishing-repository └── com └── example └── greeter ├── publish-jni-library-with-target-machines │ ├── 4.2 │ │ ├── publish-jni-library-with-target-machines-4.2.jar │ │ ├── publish-jni-library-with-target-machines-4.2.jar.md5 │ │ ├── publish-jni-library-with-target-machines-4.2.jar.sha1 │ │ ├── publish-jni-library-with-target-machines-4.2.jar.sha256 │ │ ├── publish-jni-library-with-target-machines-4.2.jar.sha512 │ │ ├── publish-jni-library-with-target-machines-4.2.module │ │ ├── publish-jni-library-with-target-machines-4.2.module.md5 │ │ ├── publish-jni-library-with-target-machines-4.2.module.sha1 │ │ ├── publish-jni-library-with-target-machines-4.2.module.sha256 │ │ ├── publish-jni-library-with-target-machines-4.2.module.sha512 │ │ ├── publish-jni-library-with-target-machines-4.2.pom │ │ ├── publish-jni-library-with-target-machines-4.2.pom.md5 │ │ ├── publish-jni-library-with-target-machines-4.2.pom.sha1 │ │ ├── publish-jni-library-with-target-machines-4.2.pom.sha256 │ │ └── publish-jni-library-with-target-machines-4.2.pom.sha512 │ ├── maven-metadata.xml │ ├── maven-metadata.xml.md5 │ ├── maven-metadata.xml.sha1 │ ├── maven-metadata.xml.sha256 │ └── maven-metadata.xml.sha512 └── publish-jni-library-with-target-machines-macos ├── 4.2 │ ├── publish-jni-library-with-target-machines-macos-4.2.jar │ ├── publish-jni-library-with-target-machines-macos-4.2.jar.md5 │ ├── publish-jni-library-with-target-machines-macos-4.2.jar.sha1 │ ├── publish-jni-library-with-target-machines-macos-4.2.jar.sha256 │ ├── publish-jni-library-with-target-machines-macos-4.2.jar.sha512 │ ├── publish-jni-library-with-target-machines-macos-4.2.module │ ├── publish-jni-library-with-target-machines-macos-4.2.module.md5 │ ├── publish-jni-library-with-target-machines-macos-4.2.module.sha1 │ ├── publish-jni-library-with-target-machines-macos-4.2.module.sha256 │ ├── publish-jni-library-with-target-machines-macos-4.2.module.sha512 │ ├── publish-jni-library-with-target-machines-macos-4.2.pom │ ├── publish-jni-library-with-target-machines-macos-4.2.pom.md5 │ ├── publish-jni-library-with-target-machines-macos-4.2.pom.sha1 │ ├── publish-jni-library-with-target-machines-macos-4.2.pom.sha256 │ └── publish-jni-library-with-target-machines-macos-4.2.pom.sha512 ├── maven-metadata.xml ├── maven-metadata.xml.md5 ├── maven-metadata.xml.sha1 ├── maven-metadata.xml.sha256 └── maven-metadata.xml.sha512 7 directories, 40 files
The other publish tasks will need to be called on each platform that can build the JNI library. |
For more information, see JNI Library Plugin and Maven Publish Plugin reference chapters.