Gradle:添加systemProperty时失败

Gradle:添加systemProperty时失败,gradle,spring-boot,Gradle,Spring Boot,我正试图通过Spring Boot项目中的gradle向“java.library.path”系统属性添加一个.dll文件。我在STS上使用Gradle2.1。 这是my build.gradle中的一小段groove代码: tasks.withType(JavaCompile) { systemProperty "java.library.path", file("./src/main/resources/META-INF/opencv-2.4.9/windows_bin/x64")

我正试图通过Spring Boot项目中的gradle向“java.library.path”系统属性添加一个.dll文件。我在STS上使用Gradle2.1。 这是my build.gradle中的一小段groove代码:

tasks.withType(JavaCompile) {
    systemProperty "java.library.path", file("./src/main/resources/META-INF/opencv-2.4.9/windows_bin/x64")
}
我得到了以下错误:

在根项目“GuiaTV”上找不到参数[java.library.path,
D:\GitHub\TFG\u 1\GuiaTV\src\main\resources\META-INF\opencv-2.4.9\windows\u bin\x64]的方法systemProperty()

这条路确实存在,所以我不知道问题出在哪里

有什么帮助吗?谢谢大家!

更新1:

@阿姆农·肖肖特 我试图做的是将本机库(.dll)添加到项目中。我从一些网站(例如,)上采纳了这个想法

第一个是使用您建议的:

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\u LIBRARY\u NAME)

第二个是gradle build失败,消息如下:

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']
}
顺便说一下,我也在使用“SpringBoot”gradle插件。这就是运行任务的来源。 因此,我可以成功地执行“gradle构建”、“gradle测试”和“gradle运行”。也就是说,正确添加了本机库。 然而,由于我也在使用“eclipse”gradle插件,我想通过执行“gradleeclipse”来添加本机库。相反,我必须在Eclipse上手动创建库,并将其添加到我的项目中


感谢@Amnon的合作。如果我找到了,我将发布一个新的解决方案。

问题是您没有设置
systemProperty
方法的上下文,因此Gradle试图将它定位在
项目
对象中它不存在的地方,这就是您出现错误的原因

如果您想将此配置应用于
JavaCompile
类型的所有任务,您的代码应该如下所示:

tasks.withType(JavaCompile) { JavaCompile t ->
    t.systemProperty "java.library.path", file("./src/main/resources/META-INF/opencv-2.4.9/windows_bin/x64")
}
但是,任务类型也不包含
systemProperty
,因此此代码也不起作用

您可以使用属性为
JavaCompile
任务定义,即:

tasks.withType(JavaCompile) { JavaCompile t ->
    t.options "java.library.path", file("./src/main/resources/META-INF/opencv-2.4.9/windows_bin/x64")
}
但是,我不确定是否可以定义这个特定的系统属性


最后一点需要注意的是,
systemProperty
方法确实适用于类型为的任务,如果这是您打算执行的任务。

关于第一个选项(
tasks.withType(JavaExec).
),请注意,您应该为特定的迭代任务应用系统属性(即使用
JavaExec t->t.systemProperty…
)。还请注意,如果此属性已定义,则您将覆盖它,而不是使用路径扩展它,这可能是它找不到某些库的原因。关于第二个选项,则
运行
任务由
应用程序
插件定义,我想您不会在项目中应用该插件。关于失败
tasks.withType(JavaExec){JavaExec t->t.systemProperty“java.library.path”,文件(“./src/main/resources/META-INF/opencv-2.4.9/windows_-bin/x64”)}
也不起作用。它抛出了同样的不满意链接错误,我认为这意味着opencv_java249库没有正确地添加到java.library.path中。请验证
文件(“./src/main/resources/META-INF/opencv-2.4.9/windows_-bin/x64”)
确实指向了
opencv_java249
库的位置?是的。它包含opencv_java249.dll,我也尝试将其重命名为“opencv_java249”(没有格式),但仍然不起作用。