Gradle:添加systemProperty失败

时间:2015-05-13 19:23:22

标签: gradle spring-boot

我试图将.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.htmlhttps://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的合作。在我发现它的情况下,我将发布一个新的解决方案。

1 个答案:

答案 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方法确实存在,以防这是您打算这样做的。