这令人惊讶:我能够用该名称声明一个变量,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 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) 我们有一个基于 JavaFX 的应用程序,它没有模块化(有原因,涉及遗留库),但我们使用jdeps和构建了一个自定义运行时jlink。
我们最近重写了该应用程序并添加了一些新的依赖项,并删除了其他依赖项。现在,正在构建应用程序的脚本在jdeps通话期间突然停止工作。
注意:这种情况发生在 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\nRun Code Online (Sandbox Code Playgroud)\n结果总是
\nException 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) 我正在阅读 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 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)
给出如下输出
Instant: 2022-12-12T18:04:27.267229ZInstant: 2022-12-12T18:04:27.267229114Z有人可以让我知道是什么原因造成的吗?我怎样才能使这两种情况下的行为相同?
我正在将我的项目从 Java 8 升级到 Java 17。我的项目使用 JAXB 相关的 JAR 文件。但是,我在编译项目时遇到很多错误,其中大部分与 JAXB 有关。任何人都可以帮助我处理与 JAXB 相关的 JAR 文件及其版本,我应该在 Java 17 项目中使用它们吗?另外,请建议我应该使用的兼容 JAVA EE 版本。
以下代码片段在 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 中的哪些更改导致它失败吗?
获得此版本的 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 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 ×10
java-17 ×10
java-8 ×2
java-record ×2
maven ×2
android ×1
gradle ×1
instanceof ×1
java-11 ×1
java-platform-module-system ×1
java-time ×1
javafx ×1
jaxb ×1
jdeps ×1
jls ×1
maven-plugin ×1
pom.xml ×1