gpt4 book ai didi

eclipse - 如何让 Gradle 为 Eclipse 生成 java.library.path

转载 作者:行者123 更新时间:2023-12-03 04:02:23 26 4
gpt4 key购买 nike

我有一个使用 sqlite4java 的 gradle 项目,我在 eclipse 中工作。

我的问题是,当我让 gradle 生成 eclipse 项目文件时,项目类路径在类路径而不是 java.library.path 上包含 sqlite4java 的 native 库,这导致 eclipse 无法构建我的项目,因为它提示 native 库不是格式良好的 zip 文件。此外,当我从类路径中手动删除 native 库时,当我运行测试或应用程序时,它们会出错,因为它们无法加载 sqlite4java native 库。

如何让 gradle 在 eclipse 中为 sqlite4java 设置 java.library.path,以便我的代码在 eclipse 中兼容并运行?

最佳答案

在此线程上找到了解决方案:https://discuss.gradle.org/t/is-it-possible-to-set-eclipses-java-library-path-from-build-gradle/6511/6

将以下代码添加到我的 gradle 构建文件并重新运行 gradle eclipse解决了这个问题:

构建.gradle:

def getSqlLite4JavaNativeLibraryPath() {
return configurations.runtime.resolve().findResult { entry ->
String absolutPath = entry.getAbsolutePath();

if(absolutPath.contains("sqlite4java-win32-x64")){
// return the directory that contains the native library
return entry.getParent()
}
}
}

eclipse.classpath.file.whenMerged { classpath ->
//remove the all native libraries as direct dependencies
classpath.entries.removeAll {
entry -> entry.kind == 'lib' && (entry.path.endsWith('.dll')
|| entry.path.endsWith('.so')
|| entry.path.endsWith('.dylib'))
}
//but add them as native libraries
def sqlite4java = classpath.entries.findResult { entry ->
if (entry.kind == 'lib' && entry.path.contains('sqlite4java')) {
return entry
}
}
sqlite4java.setNativeLibraryLocation(getSqlLite4JavaNativeLibraryPath())
}

生成的 .classpath 文件现在包含 native 库目录的属性。

.类路径:
<classpathentry sourcepath="C:/Users/user1/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/2efe18f7bea6fa9536802dd4ea54d948117216c6/sqlite4java-1.0.392-sources.jar" kind="lib" path="C:/Users/user1/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/d6234e08ff4e1607ff5321da2579571f05ff778d/sqlite4java-1.0.392.jar" exported="true">
<attributes>
<attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="C:\Users\user1\.gradle\caches\modules-2\files-2.1\com.almworks.sqlite4java\sqlite4java-win32-x64\1.0.392\d20dc00abecc7e0bde38c68eee68f2e70c26df95"/>
</attributes>
</classpathentry>

我还遇到了 gradle 单元测试无法加载 sqlite4java native 库的问题,因此我还需要将以下内容添加到我的 gradle 测试目标中,以便从 gradle 运行的测试能够加载 sqlite4java native 库。
test {
systemProperty "sqlite4java.library.path", getSqlLite4JavaNativeLibraryPath()
}

关于eclipse - 如何让 Gradle 为 Eclipse 生成 java.library.path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36285437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com