Lau*_*ent 9 java gradle build-dependencies build.gradle
我想在Gradle项目中使用Sigar.默认情况下,Sigar分发提供了两种类型的文件:
我的目的是重新打包这些文件,以便我可以将它们用作从个人Maven存储库按需部署和下载的依赖项.
我的第一次尝试是将依赖项定义为文件,以便在重新打包之前检查我的应用程序是否按预期工作.下面是我用于第一次测试的Gradle代码:
dependencies {
compile files("${rootDir}/lib/sigar/sigar.jar")
runtime fileTree(dir: "${rootDir}/lib/sigar/", exclude: "*.jar")
}
Run Code Online (Sandbox Code Playgroud)
然后,我将Sigar本机文件重新打包到JAR中并重命名另一个以匹配maven工件的规则,因为我想将它们部署在Maven存储库中.以下是我得到的:
下一步是在我的自定义存储库中部署这些文件.然后,我更新了我build.gradle的内容如下:
dependencies {
compile 'sigar:sigar:1.6.4'
runtime 'sigar:sigar:1.6.4:native'
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我这样做时gradle clean build,会获取新的依赖项,但在运行时无法再找到本机库,因为现在我得到以下异常:
Error thrown in postRegister method: rethrowing <java.lang.UnsatisfiedLinkError: org.hyperic.sigar.Sigar.getCpuInfoList()[Lorg/hyperic/sigar/CpuInfo;>
Run Code Online (Sandbox Code Playgroud)
因此,我正在寻找一种解决方案来获取和链接本机文件到我的Java应用程序,就像其他依赖项一样.欢迎任何建议,评论,建议,帮助,解决方案等;)
解决方案是定义一个新的gradle配置,在所需位置解压缩JAR文件:
project.ext.set('nativeLibsDir', "$buildDir/libs/natives")
configurations {
nativeBundle
}
dependencies {
nativeBundle 'sigar:sigar:1.6.4:native'
}
task extractNativeBundle(type: Sync) {
from {
configurations.nativeBundle.collect { zipTree(it) }
}
into file(project.nativeLibsDir)
}
dist.dependsOn extractNativeBundle
Run Code Online (Sandbox Code Playgroud)
然后,必须将此位置放入java.library.path依赖于本机库的任务:
systemProperty "java.library.path", project.nativeLibsDir
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7980 次 |
| 最近记录: |