嘿,我有一个使用Gradle设置的Java项目,在我的文件中,我有如下内容:

tasks {
    // Set the JVM compatibility versions
    withType<JavaCompile> {
        sourceCompatibility = "21"
        targetCompatibility = "21"
    }
...

对于我的配置项,我想下载合适的JDK来编译我的代码,有没有办法使用Gradle CLI获得Java版本?

我try 了 ./gradlew properties,我确实得到了一些源代码和目标兼容性的值,但它似乎与我在构建中放入的内容无关.gradle.kts(可能是由我当前的Gradle版本设置的版本,而不是我的项目)

谢谢!

推荐答案

不幸的是,Gradle CLI没有内置或插件观察器来检索信息,就像Maven通过Apache Maven Help Plugin那样.

但是,如果您能够修改Gradle构建脚本,则可以编写自己的任务,例如:

tasks.register("javaSourceCompatibility") {
    doLast {
        val compileJava = tasks.getByName("compileJava", JavaCompile::class)
        print(compileJava.sourceCompatibility)
    }
}

tasks.register("javaTargetCompatibility") {
    doLast {
        val compileJava = tasks.getByName("compileJava", JavaCompile::class)
        print(compileJava.targetCompatibility)
    }
}

并按如下方式从他们那里获取信息:

./gradlew -q --console=plain javaSourceCompatibility
./gradlew -q --console=plain javaTargetCompatibility

请注意,需要使用-q--console=plain标志来隐藏除任务打印内容之外的所有其他信息.

如果您需要在多个项目中传播这些更改,我建议您创建一个Gradle插件,该插件将自动将这些任务包含在任何项目中.

Java相关问答推荐

@ EnableRouting注释在Kotlin项目中不工作

scanner 如何在执行hasNextLine一次后重新读取整个文件?

如何粘合(合并)文件Lucene?

弹簧靴和龙目岛

S的字符串表示是双重精确的吗?

Spring Boot 3.2.2中的@Inject和@Resource Remove

使用REST客户端和对象映射器从字符串反序列化Json

返回响应时,CamelCase命名约定不起作用

在Spring Boot中使用哪个Java类来存储创建时间戳?

在Spring终结点中,是否可以同时以大写和小写形式指定枚举常量?

如何在代码中将行呈现在矩形前面?

如何使用路径过渡方法使 node 绕圆旋转?

如何使用WebEnvironment.RANDOM_PORT获得第二个随机端口?

无法使用Open WebStart Java 8运行jnlp

Java CDI:@Singleton@Startup@Inject无法实现接口

如何在Spring Boot Auth服务器上正确配置CORS?

简化每个元素本身都是 map 列表的列表

如何在Java上为循环数组从synchronized迁移到ReentrantLock

类型安全:从 JSONArray 到 ArrayList> 的未经判断的转换

JAVA 正则表达式识别字符串string或字符串内的字符char