java - Gradle:使用 -source 15 或更高版本启用文本 block

标签 java gradle

不是第一次接触java的java开发人员,无法让gradle工作。

我正在尝试安装this extension对于吉德拉来说。自述文件说我应该运行:

GHIDRA_INSTALL_DIR=${GHIDRA_HOME} gradle

我已经在 Mac 上安装了 java 18 和 gradle。运行上述代码时,出现以下错误:

Starting a Gradle Daemon (subsequent builds will be faster)
> Task :copyDependencies NO-SOURCE

> Task :compileJava FAILED
/home/gradle/project/src/main/java/ghidra/app/plugin/core/analysis/eBPFSolanaAnalyzer.java:156: error: text blocks are not supported in -source 11
                    func.setComment("""
                                    ^
  (use -source 15 or higher to enable text blocks)
1 error

FAILURE: Build failed with an exception.

也尝试用完 docker(认为这是我的安装问题):

docker run --rm -u gradle -e GHIDRA_INSTALL_DIR=/home/gradle/project/installed -v "$PWD":/home/gradle/project -w /home/gradle/project gradle gradle

但是可惜得到了完全相同的错误。

为什么 gradle 认为我有 Java 11,而实际上我有 java 18? gradle -v 给我:

------------------------------------------------------------
Gradle 7.4.2
------------------------------------------------------------

Build time:   2022-03-31 15:25:29 UTC
Revision:     540473b8118064efcc264694cbcaa4b677f61041

Kotlin:       1.5.31
Groovy:       3.0.9
Ant:          Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM:          18.0.1.1 (Homebrew 18.0.1.1+0)
OS:           Mac OS X 12.4 x86_64

这可能是一个完全新手的问题,但就像我说的,我从未接触过 java:) 非常感谢任何帮助。

最佳答案

该错误意味着该项目已配置为与 Java 11 兼容,这就是为什么您无法使用较新版本的功能(即使您使用较新版本运行)。

虽然我不了解Ghidra项目,但是可以从 build file in the extension 看到它应用了基础项目中的脚本:

apply from: new File(ghidraInstallDir).getCanonicalPath() + "/support/buildExtension.gradle"

然后,如果您前往 Ghidra 项目并找到 extension file ,可以看到它确实配置了源版本和目标版本:

compileJava {
    sourceCompatibility = ghidraProps.getProperty('application.java.compiler')
    targetCompatibility = ghidraProps.getProperty('application.java.compiler')
    dependsOn copyDependencies
}

这些似乎来自位于 Ghidra/application.properties 的属性文件:

application.name=Ghidra
application.version=10.2
application.release.name=DEV
application.layout.version=1
application.gradle.min=6.8
application.java.min=11
application.java.max=
application.java.compiler=11

因此,我想如果您在本地安装中找到此文件,则可以将 application.java.compiler 属性更改为 18。请注意,Ghidra 可能实际上并不支持它 -或者它可能工作得很好;尝试一下:)

关于java - Gradle:使用 -source 15 或更高版本启用文本 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72678568/

相关文章:

java - 从 JTable 的另一个类传递 LinkedList。自动更新表

java 流 : grouping by and add fields

java - JUnit 测试中的注释数量不正确

java - 使用 equalsIgnoreCase 检查 ArrayList<String> 包含 ("") 方法

android-studio - Gradle 项目刷新失败错误

Gradle:如何从耳朵文件中排除jar?

sql-server - 无法从 gradle 构建脚本查询数据库

c - Gradle:任务 ':linkMainExecutable' 执行失败

java - 为什么我无法调试 Gradle 构建脚本的每一行?

java - Android:点击小部件事件