标签: java-17

即使它是关键字,使用“record”作为变量名是否合法?

这令人惊讶:我能够用该名称声明一个变量,record即使它现在已成为关键字。看看这个:

public class Main {
    
    static class Foo {
        void bar() { System.out.println("Foo.bar"); }
    }
    
    record R (int a) {}
    
    public static void main(String[] args) {
        Foo record = new Foo();
        record.bar();
        
        R r = new R(5);
        System.out.println(r);
    }
}
Run Code Online (Sandbox Code Playgroud)

当使用 Java 17 编译并运行时,会给出:

Foo.bar
R[a=5]
Run Code Online (Sandbox Code Playgroud)

我原以为这会导致错误,就像尝试声明名为 的变量时的情况一样class。据我所知,Java 人员非常小心,不破坏现有代码,因此我认为这可能是一个经过深思熟虑的选择。

(你甚至不能声明一个名为 name 的变量,const因为它const Java 中的关键字。)

java jls java-record java-17

11
推荐指数
2
解决办法
2034
查看次数

找不到 JDK 17 支持的 Gradle 版本。Gradle 支持 JDK 版本 7 到 16

刚刚尝试使用 jdk17 创建 Gradle 项目,面临以下问题。我知道 JDK 17 需要 Gradlew 7.3,但不太确定应该从哪里设置 Gradle 的版本

在此输入图像描述

摇篮位置

在此输入图像描述

摇篮版本

在此输入图像描述

java intellij-idea gradle java-17

11
推荐指数
2
解决办法
2万
查看次数

nexus-staging-maven-plugin:maven 部署失败:执行时遇到 API 不兼容

这对我在 Java 8 下构建来说效果很好。现在在 Java 17.01 下,当我执行 mvn 部署时,我得到了这个。

mvn install 工作正常。我尝试了 3.6.3 和 3.8.4 并将(我认为)我的所有插件更新到最新版本。

有任何想法吗?

[ERROR] Failed to execute goal org.sonatype.plugins:nexus-staging-maven-plugin:1.6.8:deploy (injected-nexus-deploy) on project persism: Execution injected-nexus-deploy of goal org.sonatype.plugins:nexus-staging-maven-plugin:1.6.8:de
ploy failed: An API incompatibility was encountered while executing org.sonatype.plugins:nexus-staging-maven-plugin:1.6.8:deploy: java.lang.ExceptionInInitializerError: null


[ERROR] import: Entry[import  from realm ClassRealm[maven.api, parent: null]]
[ERROR]
[ERROR] -----------------------------------------------------
[ERROR] : Unable to make field private final java.util.Comparator java.util.TreeMap.comparator accessible: module java.base does not "opens java.util" to unnamed module @149f5761
[ERROR] -> [Help 1] …
Run Code Online (Sandbox Code Playgroud)

java maven maven-central java-17

11
推荐指数
1
解决办法
6141
查看次数

由于 MultiReleaseException,jdeps 无法打印模块 deps

我们有一个基于 JavaFX 的应用程序,它没有模块化(有原因,涉及遗留库),但我们使用jdeps和构建了一个自定义运行时jlink

\n

我们最近重写了该应用程序并添加了一些新的依赖项,并删除了其他依赖项。现在,正在构建应用程序的脚本在jdeps通话期间突然停止工作。

\n

注意:这种情况发生在 Linux \xe2\x80\x93 上,我尚未测试其他操作系统,但我不期望出现另一个结果。

\n

当脚本调用时

\n
~/path/to/jdk/bin/jdeps -q --multi-release 11 --ignore-missing-deps --print-module-deps --class-path ~/path/to/app/target/package/libs/* target/classes/ch/cnlab/uxtest/MainKt.class\n
Run Code Online (Sandbox Code Playgroud)\n

结果总是

\n
Exception in thread "main" java.lang.Error: java.util.concurrent.ExecutionException: com.sun.tools.jdeps.MultiReleaseException\n    at jdk.jdeps/com.sun.tools.jdeps.DependencyFinder.waitForTasksCompleted(DependencyFinder.java:271)\n    at jdk.jdeps/com.sun.tools.jdeps.DependencyFinder.parse(DependencyFinder.java:133)\n    at jdk.jdeps/com.sun.tools.jdeps.DepsAnalyzer.transitiveArchiveDeps(DepsAnalyzer.java:217)\n    at jdk.jdeps/com.sun.tools.jdeps.DepsAnalyzer.run(DepsAnalyzer.java:138)\n    at jdk.jdeps/com.sun.tools.jdeps.ModuleExportsAnalyzer.run(ModuleExportsAnalyzer.java:74)\n    at jdk.jdeps/com.sun.tools.jdeps.JdepsTask$ListModuleDeps.run(JdepsTask.java:1047)\n    at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:574)\n    at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:533)\n    at jdk.jdeps/com.sun.tools.jdeps.Main.main(Main.java:49)\nCaused by: java.util.concurrent.ExecutionException: com.sun.tools.jdeps.MultiReleaseException\n    at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)\n    at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)\n    at jdk.jdeps/com.sun.tools.jdeps.DependencyFinder.waitForTasksCompleted(DependencyFinder.java:267)\n    ... 8 more\nCaused by: com.sun.tools.jdeps.MultiReleaseException\n    at jdk.jdeps/com.sun.tools.jdeps.VersionHelper.add(VersionHelper.java:62)\n    at jdk.jdeps/com.sun.tools.jdeps.ClassFileReader$JarFileReader.readClassFile(ClassFileReader.java:360)\n    at jdk.jdeps/com.sun.tools.jdeps.ClassFileReader$JarFileIterator.hasNext(ClassFileReader.java:402)\n    at …
Run Code Online (Sandbox Code Playgroud)

java javafx java-platform-module-system jdeps java-17

10
推荐指数
1
解决办法
1558
查看次数

Java 模式变量作用域

我正在阅读 Oracle 的官方文档来了解Java 17 中的模式变量范围。在以下示例中,该方法testScope1按照文档中的说明工作,但该方法testScope2给出了编译错误。我无法弄清楚为什么void该方法的返回类型会导致问题?

interface Vehicle{}
class Car implements Vehicle{}

class Pattern{
    public int testScope1(Vehicle v){
        if(!(v instanceof Car c)){
            return 1;
        }
        System.out.println(c.toString());  //WORKS FINE
        return 2; 
    }
    public void testScope2(Vehicle v){
        if(!(v instanceof Car c)){
                 
        }
        System.out.println(c.toString());  //COMPILE TIME ERROR: Cannot resolve symbol c
    }
}
Run Code Online (Sandbox Code Playgroud)

java instanceof java-17

10
推荐指数
2
解决办法
1206
查看次数

AWS Ubuntu 标准 6.0 中 java 11 和 java 17 之间 Instant.now() 的变化

我们将从 Java 11 (correto11) 迁移到 Java 17 (correto17)。作为其中的一部分,我们还必须将 Ubuntu 升级到standard:6.0AWSstandard:4.0中,如此处所述

我们观察到 Java 11 和 Java 17 中的Instant.now()输出有点不同。

例如,

System.out.println("Instant: " + Instant.now());
Run Code Online (Sandbox Code Playgroud)

给出如下输出

  • Java 11 -Instant: 2022-12-12T18:04:27.267229Z
  • 爪哇 17 -Instant: 2022-12-12T18:04:27.267229114Z

有人可以让我知道是什么原因造成的吗?我怎样才能使这两种情况下的行为相同?

java amazon-web-services java-11 java-17

10
推荐指数
1
解决办法
5611
查看次数

Java 17 项目使用的 JAXB Jar 文件有哪些

我正在将我的项目从 Java 8 升级到 Java 17。我的项目使用 JAXB 相关的 JAR 文件。但是,我在编译项目时遇到很多错误,其中大部分与 JAXB 有关。任何人都可以帮助我处理与 JAXB 相关的 JAR 文件及其版本,我应该在 Java 17 项目中使用它们吗?另外,请建议我应该使用的兼容 JAVA EE 版本。

java jaxb java-8 java-17

10
推荐指数
2
解决办法
4万
查看次数

在 Java 17 中解析带有两位小数的时间时出错,但在 Java 8 中成功

以下代码片段在 Java 8 中运行没有错误。但是,当我在 Java 17 中运行相同的代码时,它会失败。

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;

public class Main2 {
    public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH[:mm[:ss[.SSS]]]X");
        OffsetDateTime offSetDateTime = OffsetDateTime.parse("2021-10-09T08:59:00.00Z", formatter);
        System.out.println(offSetDateTime);
    }
}
Run Code Online (Sandbox Code Playgroud)

在 Java 17 上运行时的输出:

Exception in thread "main" java.time.format.DateTimeParseException: Text '2021-10-09T08:59:00.00Z' could not be parsed at index 19
    at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2052)
    at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1954)
    at java.base/java.time.OffsetDateTime.parse(OffsetDateTime.java:404)
    at Main2.main(Main2.java:9)
Run Code Online (Sandbox Code Playgroud)

但是,如果我针对 Java 8 运行相同的代码,则会给出以下结果:

2021-10-09T08:59Z
Run Code Online (Sandbox Code Playgroud)

如果我将测试数据从 更改为"2021-10-09T08:59:00.00Z""2021-10-09T08:59:00.000Z"它可以在 Java 17 中运行。您知道 Java 17 中的哪些更改导致它失败吗?

java java-8 java-time java-17

10
推荐指数
1
解决办法
243
查看次数

在 Android Studio 中使用 JDK17 和记录(Java、Android)

在此输入图像描述

第1部分 :-

获得此版本的 Android Studio 后,我可以在我的项目中使用JDK17 。一切都工作得很好,没有构建失败,没有运行时错误等(就像增强型开关工作正常)......但是这个警告在每次构建期间不断出现。有什么办法可以抑制这种情况吗?

在此输入图像描述 (警告文本 -> “一个或多个类的文件版本 >= 56,不受官方支持”

这些是 build.gradle 文件:

(1):-

buildscript {

   repositories {
       google()
       mavenCentral()
   }
   dependencies {
       classpath 'com.android.tools.build:gradle:7.1.0-rc01'
       classpath 'com.google.android.gms:strict-version-matcher-plugin:1.2.2'

       // NOTE: Do not place your application dependencies here; they belong
       // in the individual module build.gradle files
   }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
Run Code Online (Sandbox Code Playgroud)

(2):-

apply plugin: 'com.android.application'
apply plugin: 'com.google.android.gms.strict-version-matcher-plugin'

android {
    compileSdkVersion 32 …
Run Code Online (Sandbox Code Playgroud)

java android android-studio java-record java-17

9
推荐指数
2
解决办法
6075
查看次数

由于 API 不兼容,无法加载插件 'org.apache.maven.plugins:maven-war-plugin:2.2' 中的 mojo 'war'

我正在尝试构建我的办公室项目,我已从 java 11 升级到 17。

我已经根据兼容的java版本更新了我的maven,并且在针对其余错误获得了大量帮助后,我仍然停留在这个问题上。

到目前为止我已经更新的东西:
Eclipse版本,java版本,java版本,surefire插件详细信息,settings.xml中的mirrorOf标签。

版本详情如下:

  • Java 版本 - 17 。

  • Java 主页 - C:\Program Files\Java\jdk-17.0.5

  • java 路径 - C:\Program Files\Java\jdk-17.0.5\bin -

  • 我的 pom 中的 java 版本 - 17

  • 我的系统中安装的 maven 版本 - 3.8.5

  • maven_home - C:\project\Softwares\Maven\apache-maven-3.8.5\bin

  • 我的 pom.xml 中的 Maven - 3.8.1

现在设置完所有内容后,这就是错误。请帮助我纠正这个问题:


Unable to load the mojo 'war' in the plugin 'org.apache.maven.plugins:maven-war-plugin:2.2' due to an API incompatibility: org.codehaus.plexus.component.repository.exception.ComponentLookupException: Cannot access defaults field of Properties
Run Code Online (Sandbox Code Playgroud)

编辑 1:添加 pom.xml 4.0.0

java maven-plugin pom.xml maven java-17

9
推荐指数
1
解决办法
1万
查看次数