Gradle:添加systemProperty时失败
我正试图通过Spring Boot项目中的gradle向“java.library.path”系统属性添加一个.dll文件。我在STS上使用Gradle2.1。 这是my build.gradle中的一小段groove代码: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")
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”(没有格式),但仍然不起作用。