我试图将.dll文件添加到" java.library.path"我的Spring Boot项目中的gradle系统属性。我在STS上使用Gradle 2.1。 这是我build.gradle中的一小段凹槽代码:
tasks.withType(JavaCompile) {
systemProperty "java.library.path", file("./src/main/resources/META-INF/opencv-2.4.9/windows_bin/x64")
}
我收到以下错误:
找不到参数的方法systemProperty()[java.library.path,
D:\GitHub\TFG_1\GuiaTV\src\main\resources\META-INF\opencv-2.4.9\windows_bin\x64] on root project 'GuiaTV'
这条路确实存在,所以我不知道问题出在哪里。
有任何帮助吗?谢谢!
更新1:
@Amnon Shochot 我尝试做的是将一个本机库(.dll)添加到项目中。我从一些网站获取了这个想法(例如,http://zouxifeng.github.io/2014/07/17/add-system-property-to-spring-boot.html,https://github.com/cjstehno/coffeaelectronica/wiki/Going-Native-with-Gradle)。
第一个是使用你的建议:
tasks.withType(JavaExec) {
systemProperty "java.library.path", file("./libs")
}
第二个使用:
run {
systemProperty 'java.library.path', file( 'build/natives/windows' )
}
他们都不适合我。 第一个(使用JavaExec)是失败的gradle测试抛出:
java.lang.UnsatisfiedLinkError: no opencv_java249 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1865)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
如果您跟踪跟踪,它会在运行时以句子崩溃:System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
第二个是使用以下消息进行gradle构建失败:
Could not find method run() for arguments [build_24sfpo0st6dokeq7fn3ad7r34$_run_closure7@2652c3da] on root project 'GuiaTV'.
幸运的是,你确切知道我想要达到的目标,你可以解决我的问题。
感谢您的关注!
更新2:
最后,我最终将这些行添加到build.gradle脚本中:
// The following makes "gradle build", "gradle test" work
test {
jvmArgs = ['-Djava.library.path=./src/main/resources/META-INF/opencv-2.4.9/windows_bin/x64']
}
// Thw following makes "gradle run" work
run {
jvmArgs = ['-Djava.library.path=./src/main/resources/META-INF/opencv-2.4.9/windows_bin/x64']
}
顺便说一句,我也在使用" spring-boot" gradle插件。这就是运行任务的来源。 所以,我可以执行" gradle build"," gradle test"并且" gradle run"成功地。这就是,正确添加了本机库。 但是,因为我也在使用" eclipse" gradle插件,我想简单地通过执行" gradle eclipse"来添加本机库。相反,我必须手动在Eclipse上创建库,并将其添加到我的项目中。
感谢@Amnon的合作。在我发现它的情况下,我将发布一个新的解决方案。
答案 0 :(得分:2)
问题是你没有为systemProperty
方法设置上下文,因此Gradle试图在project
对象中找不到它,这就是你得到错误的原因。
如果您希望将此配置应用于JavaCompile
类型的所有任务,那么您的代码应如下所示:
tasks.withType(JavaCompile) { JavaCompile t ->
t.systemProperty "java.library.path", file("./src/main/resources/META-INF/opencv-2.4.9/windows_bin/x64")
}
但是, JavaCompile
任务类型也不包含systemProperty
,因此此代码也不起作用。
您可以使用 CompileOptions
属性为JavaCompile
任务定义 options
,即:
tasks.withType(JavaCompile) { JavaCompile t ->
t.options "java.library.path", file("./src/main/resources/META-INF/opencv-2.4.9/windows_bin/x64")
}
但是,我不确定您是否可以定义此特定系统属性。
最后一点 - 对于 JavaExec
类型的任务,systemProperty
方法确实存在,以防这是您打算这样做的。