将 spring boot 项目从 2.0 移动到 3.0 并升级到 java 17 后,hibernate-jpamodelgen 不会生成元模型类。
我添加了这个依赖,但仍然不起作用。有人可以帮忙吗?
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud) 从 JDK 11 升级到 17 后,Javassist(版本 3.28.0-GA)停止工作。
调用CtClass#toClass会出现以下错误:
...
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @63e31ee
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
at javassist.util.proxy.SecurityActions.setAccessible(SecurityActions.java:159)
at javassist.util.proxy.DefineClassHelper$JavaOther.defineClass(DefineClassHelper.java:213)
at javassist.util.proxy.DefineClassHelper$Java11.defineClass(DefineClassHelper.java:52)
at javassist.util.proxy.DefineClassHelper.toClass(DefineClassHelper.java:260)
at javassist.ClassPool.toClass(ClassPool.java:1240)
at javassist.CtClass.toClass(CtClass.java:1392)
Run Code Online (Sandbox Code Playgroud)
有人知道解决方法吗?
我使用 Java 17 和 JavaFX 16 库制作了一个应用程序。有没有办法使用 JPackage 制作可安装的 32 位版本?由于自 Java 9 以来 Java 一直都是 64 位(与 JavaFX 库相同),我怀疑这是不可能的,但是有什么办法可以做到吗?
作为对方法参数的调查的一部分,我尝试了新的switch 模式匹配(预览版)。使用传统条件,它可以完美运行:
Method firstMethod = BitSet.class.getDeclaredMethods()[0];
Parameter firstParameter = firstMethod.getParameters()[0];
if (firstParameter.getType() == Integer.class) {
System.out.println("Integer");
}
Run Code Online (Sandbox Code Playgroud)
当我尝试重构它以使用switch语句时,它没有编译:
Method firstMethod = BitSet.class.getDeclaredMethods()[0];
Parameter firstParameter = firstMethod.getParameters()[0];
switch (firstParameter.getType()) {
case Integer.class: System.out.println("Integer");
case int.class: System.out.println("int");
default: System.out.println("other");
}
Run Code Online (Sandbox Code Playgroud)
错误是:
error: incompatible types: Class<Integer> cannot be converted to Class<CAP#1>
case Integer.class: System.out.println("Integer");
^
where CAP#1 is a fresh type-variable:
CAP#1 extends Object from capture of ?
Run Code Online (Sandbox Code Playgroud)
这是无法完成的事情,还是只是语法错误?
我正在学习 Java 17,通过 JEP334(JVM Constants API),我知道如何获取ClassDesc, MethodTypeDesc, MethodHandleDesc, DynamicConstantDesc.
但这些物体能做什么呢?
在什么应用场景下需要这些对象?
我不明白我出了什么问题。我正在尝试运行 Spigot Server Core 1.18.2,但这个库经常出现问题。
[19:21:50 INFO]:[STDERR]:java.lang.UnsatisfiedLinkError:/opt/jdk17/lib/libawt_xawt.so:libXrender.so.1:无法打开共享对象文件:没有这样的文件或目录[19: 21:50 信息]: [STDERR]: 在 java.base/jdk.internal.loader.NativeLibraries.load(本机方法) [19:21:50 信息]: [STDERR]: 在 java.base/jdk.internal。 loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:388) [19:21:50 INFO]: [STDERR]: 在 java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:232) [19 :21:50 信息]: [STDERR]: 在 java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:174) [19:21:50 信息]: [STDERR]: 在 java.base/ java.lang.ClassLoader.loadLibrary(ClassLoader.java:2389) [19:21:50 信息]: [STDERR]: 在 java.base/java.lang.Runtime.load0(Runtime.java:755) [19:21 :50 INFO]: [STDERR]: 在 java.base/java.lang.System.load(System.java:1953) [19:21:50 INFO]: [STDERR]: 在 java.base/jdk.internal。 loader.NativeLibraries.load(本机方法)[19:21:50信息]:[STDERR]:在java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:388)[19:21: 50信息]:[STDERR]:在java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:232)[19:21:50信息]:[STDERR]:在java.base/jdk.internal .loader.NativeLibraries.loadLibrary(NativeLibraries.java:174) [19:21:50 INFO]: [STDERR]: 在 java.base/jdk.internal.loader.NativeLibraries.findFromPaths(NativeLibraries.java:315) [19: 21:50 信息]: [STDERR]: 在 java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:285) [19:21:50 信息]: [STDERR]: 在 java.base/java .lang.ClassLoader.loadLibrary(ClassLoader.java:2398) [19:21:50 INFO]: [STDERR]: 在 java.base/java.lang.Runtime.loadLibrary0(Runtime.java:818) [19:21: 50 INFO]:[STDERR]:在 java.base/java.lang.System.loadLibrary(System.java:1989) …
Path file = Paths.get("New Text Document.txt");
try {
System.out.println(Files.readString(file, StandardCharsets.UTF_8));
System.out.println(Files.readString(file, StandardCharsets.UTF_16));
} catch (Exception e) {
System.out.println("yep it's an exception");
}
Run Code Online (Sandbox Code Playgroud)
可能会产生
some text
Exception in thread "main" java.lang.Error: java.nio.charset.MalformedInputException: Input length = 1
at java.base/java.lang.String.decodeWithDecoder(String.java:1212)
at java.base/java.lang.String.newStringNoRepl1(String.java:786)
at java.base/java.lang.String.newStringNoRepl(String.java:738)
at java.base/java.lang.System$2.newStringNoRepl(System.java:2390)
at java.base/java.nio.file.Files.readString(Files.java:3369)
at test.Test2.main(Test2.java:13)
Caused by: java.nio.charset.MalformedInputException: Input length = 1
at java.base/java.nio.charset.CoderResult.throwException(CoderResult.java:274)
at java.base/java.lang.String.decodeWithDecoder(String.java:1205)
... 5 more
Run Code Online (Sandbox Code Playgroud)
这个错误“不应该发生”。方法如下java.lang.String:
private static int decodeWithDecoder(CharsetDecoder cd, char[] dst, byte[] src, int offset, int length) {
ByteBuffer bb …Run Code Online (Sandbox Code Playgroud) 以下正确解析文本输入“2022-12-29 01:16:03 GMT+08:00”。
public ZonedDateTime parseZonedDateTime(String timeStr) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss O");
ZonedDateTime zonedDateTime = ZonedDateTime.parse(timeStr, dtf);
return zonedDateTime;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果输入字符串是“2022-12-29 01:16:03 UTC-08:00”,ZonedDateTime.parse() 方法会抛出异常
java.time.format.DateTimeParseException: Text '2022-12-29 01:16:03 UTC-08:00' could not be parsed at index 20
Run Code Online (Sandbox Code Playgroud)
请访问 Ideone.com 查看在 Java 12 上运行的代码。
根据 DateTimeFormatter 文档,https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html
“GMT+08:00”和“UTC-08:00”都被视为本地化区域偏移“O”。
正确的模式应该是什么,以便解析器接受 GMT 和 UTC 输入?
我尝试使用格式“yyyy-MM-dd HH:mm:ss OOOO”,但行为是相同的。
有一个类似的问题为什么“GMT+8”无法用模式“O”解析,尽管直接从文档中复制出来?据此,该错误已在 Java 9 build b116 中修复。
不过我正在使用 java 17.0.4.1-librca
正如标题所述,在 Ubuntu 20.04 中如何设置 Tomcat 9 使用 Java 17 ?
最近,我使用 Spring Boot 3.0.1 重新打包了我的 Web 项目的war文件,该项目需要 Java 17 才能运行,并尝试将其部署到 Ubuntu 20.04 服务器上的 Tomcat 9 容器。
看来最好的办法就是利用setenv.sh.
我跟踪了一些文档,bin在 中创建了一个文件夹/usr/share/tomcat9,触摸了 的文件setenv.sh,并用 编辑了其内容JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64。
然后运行sudo systemctl start tomcat9,但是失败。
sudo systemctl status tomcat9说“找不到 JDK 或 JRE - 请设置 JAVA_HOME 变量或安装 default-jdk 包”,
首先安装了openjdk-17-jre-headless,并删除了openjdk-11-jre-headless 。Tomcat9 和 JRE 17 都是通过apt包管理器安装的。
我不明白为什么第一个片段编译得很好:
var res = getResult(s);
public static double getResult(Shape s) {
switch(s) {
case Rectangle r : return 2* r.largeur() + 2* r.longueur();
case Circle c : return 2*c.radius();
default : throw new RuntimeException("not a shape");
}
}
Run Code Online (Sandbox Code Playgroud)
但不是这个:
var res = switch(s) {
case Rectangle r : return 2* r.largeur() + 2* r.longueur();
case Circle c : return 2*c.radius();
default : throw new RuntimeException("not a shape");
};
Run Code Online (Sandbox Code Playgroud)
对我来说看起来是一样的。