Lombok
添加lib后出现如下错误
An error has occurred. See error log for more details.
Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @1d1c37d5
Run Code Online (Sandbox Code Playgroud) 我有一个在 docker 容器中运行的 java 应用程序 (JDK13)。最近我将应用程序移至JDK17(OpenJDK17),发现docker容器的内存使用量逐渐增加。
在调查过程中,我发现“可维护性内存类别”NMT 不断增长(每小时 15mb)。我检查了页面https://docs.oracle.com/en/java/javase/17/troubleshoot/diagnostic-tools.html#GUID-5EF7BB07-C903-4EBD-A9C2-EC0E44048D37,但那里没有提到这个类别。
谁能解释一下这个可维护性类别意味着什么以及什么会导致这种逐渐增加?与 JDK13 相比,还有一些额外的新内存类别。也许有人知道我可以在哪里阅读有关他们的详细信息。
这是命令的结果jcmd 1 VM.native_memory summary
Native Memory Tracking:
(Omitting categories weighting less than 1KB)
Total: reserved=4431401KB, committed=1191617KB
- Java Heap (reserved=2097152KB, committed=479232KB)
(mmap: reserved=2097152KB, committed=479232KB)
- Class (reserved=1052227KB, committed=22403KB)
(classes #29547)
( instance classes #27790, array classes #1757)
(malloc=3651KB #79345)
(mmap: reserved=1048576KB, committed=18752KB)
( Metadata: )
( reserved=139264KB, committed=130816KB)
( used=130309KB)
( waste=507KB =0.39%)
( Class space:)
( reserved=1048576KB, committed=18752KB)
( used=18149KB)
( waste=603KB =3.21%)
- …
Run Code Online (Sandbox Code Playgroud) 我有一个 Spring Feign 客户端,它使用 POST 将 POJO 对象发送到远程端点,并且我的应用程序启动失败,出现以下异常。
java.lang.reflect.InaccessibleObjectException:无法使字段静态最终 java.lang.invoke.MethodHandles$Lookup java.lang.invoke.MethodHandles$Lookup.IMPL_LOOKUP 可访问:模块 java.base 不“打开 java.lang.invoke”到未命名模块@420a85c4
Below the dependencies I am using in my application.
java version: 17
spring boot version: 2.5.3
spring boot cloud version: 2020.0.3
spring boot starter openfeign version: 2.2.8.RELEASE
As recommended in https://github.com/OpenFeign/feign/issues/935, I had tried
workaround solution: Adding this jvm option '--add-opens java.base/java.lang.invoke=ALL-
UNNAMED' worked.
Run Code Online (Sandbox Code Playgroud)
除 jvm 参数之外的任何其他替代建议都是最受欢迎的。
这是 JDK 11 的当前 Github,运行良好。我已将我的项目迁移到 JDK 17。它在本地运行良好,但会破坏 Github 工作流程。我不知道该如何解决?
.github\workflows\docker-publish.yml:-
name: Docker
on:
push:
branches: [ master ]
# Publish semver tags as releases.
tags: [ 'v*.*.*' ]
pull_request:
branches: [ master ]
env:
# Use docker.io for Docker Hub if empty
REGISTRY: ghcr.io
# github.repository as <account>/<repo>
IMAGE_NAME: ${{ github.repository }}
TAG: 'latest'
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
# This is used to complete the identity challenge
# with sigstore/fulcio when running outside of PRs. …
Run Code Online (Sandbox Code Playgroud) 我使用 Java 16 通过 HTTP 向 API 发出请求。为了整体加快速度,我将其加载到自定义ForkJoinPool
. 我在下面编译了一个重现示例。
自从迁移到 Java 17(openjdk build 17.0.1+12-39)后,这会抛出 RejectedExecutionException:
Caused by: java.util.concurrent.RejectedExecutionException: Thread limit exceeded replacing blocked worker
at java.base/java.util.concurrent.ForkJoinPool.tryCompensate(ForkJoinPool.java:1819)
at java.base/java.util.concurrent.ForkJoinPool.compensatedBlock(ForkJoinPool.java:3446)
at java.base/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3432)
at java.base/java.util.concurrent.CompletableFuture.waitingGet(CompletableFuture.java:1898)
at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2072)
at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:553)
at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:119)
at Test.lambda$retrieveMany$1(Test.java:30)
Run Code Online (Sandbox Code Playgroud)
为什么会出现这种情况?ForkJoinPool 是否发生了我不知道的变化?
代码
Caused by: java.util.concurrent.RejectedExecutionException: Thread limit exceeded replacing blocked worker
at java.base/java.util.concurrent.ForkJoinPool.tryCompensate(ForkJoinPool.java:1819)
at java.base/java.util.concurrent.ForkJoinPool.compensatedBlock(ForkJoinPool.java:3446)
at java.base/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3432)
at java.base/java.util.concurrent.CompletableFuture.waitingGet(CompletableFuture.java:1898)
at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2072)
at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:553)
at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:119)
at Test.lambda$retrieveMany$1(Test.java:30)
Run Code Online (Sandbox Code Playgroud) TL,博士;是否有本地 Java17 解决方案来生成自签名证书,无论是通过标准库(不太可能)还是通过一些轻量级库?
还有一个类似的问题(我问过Access `sun.security.x509` in JDK 11 without module?),因为从 JDK11 开始,对内部 JDK 包的访问受到限制,因此无法使用sun.security.x509
. 直到 JDK17 为止,都可以通过某些编译器配置来标记打开这些包来规避它。JDK17 改变了这一点,删除了该选项。
从我能够收集到的当前解决方案是:
keytool
java工具,但这有两个缺点:调用外部工具速度较慢,并且需要创建密钥库文件。目前(2)在我的用例中似乎更方便,但我很想找到第三个选项 - 本机、轻量级解决方案。
编辑:有 OpenJDK 问题:JDK-8058778:用于创建证书和证书请求的新 API,我希望有一天它会被实现......
RandomGenerator 的默认算法即。从 JDK 18(自 17 起可用)开始,L32X64MixRandom 每次在单独调用时都会生成相同的数字。
jshell> java.util.random.RandomGenerator.getDefault().nextInt(100,999)
$10 ==> 526
jshell> java.util.random.RandomGenerator.getDefault().nextInt(100,999)
$11 ==> 526
jshell> java.util.random.RandomGenerator.of("L32X64MixRandom").nextInt(100, 999)
$14 ==> 526
jshell> java.util.random.RandomGenerator.of("L32X64MixRandom").nextInt(100, 999)
$15 ==> 526
Run Code Online (Sandbox Code Playgroud)
javadoc 听起来也没有任何特别的警告:
返回在指定原点(包括)和指定边界(不包括)之间伪随机选择的 int 值。
实现要求:默认实现检查origin 和bound 是否为正整数。然后调用 nextInt(),将结果限制为大于或等于原点且小于界限。如果bound是2的幂,那么限制就是一个简单的掩码操作。否则,通过调用 nextInt() 重新计算结果,直到结果大于或等于 origin 且小于bound。
而其他算法(包括遗留算法)似乎具有可感知的随机性水平,例如。
jshell> java.util.random.RandomGenerator.of("Random").nextInt(100,999)
$7 ==> 451
jshell> java.util.random.RandomGenerator.of("Random").nextInt(100,999)
$8 ==> 633
jshell> java.util.random.RandomGenerator.of("L64X128MixRandom").nextInt(100, 999)
$12 ==> 570
jshell> java.util.random.RandomGenerator.of("L64X128MixRandom").nextInt(100, 999)
$13 ==> 844
Run Code Online (Sandbox Code Playgroud)
默认选择的这种程度的决定论是否有原因?
编辑:行为。流非常相似,初始值似乎总是相同的
jshell> java.util.random.RandomGenerator.getDefault().ints(100,999).limit(5).toArray()
$22 ==> int[5] { 526, 860, 258, 558, 820 }
jshell> …
Run Code Online (Sandbox Code Playgroud) 我有一个 Java FX 项目,并使用以下 Azul Zulu Build of OpenJDK with JavaFX 将项目升级到 JDK 17
https://www.azul.com/downloads/?os=windows&package=jdk-fx
有谁知道为什么 Intellij 无法从 Azul Zulu Builds of OpenJDK with FX 中找到使用 JDK 17 的 JavaFX 包吗?
我正在尝试使用 JDK 17 和 Maven 3.8.4 编译现有的 Spring Boot 项目,但不断收到此错误。
无法使字段私有 com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs 可访问:模块 jdk.compiler 不会“打开 com.sun.tools.javac.processing “到未命名模块@521e3470
旧版本的 Maven(例如 3.6)也会出现此问题。java.version
JDK 16 也会发生这种情况。通过、maven.compiler.source
、 和在 pom.xml 中配置哪个版本的 Java 并不重要maven.compiler.target
。mvn -v
命令中仅显示用于进行编译的 JDK 版本...。
该项目使用 JDK 15 可以正常编译。编译开始时,错误立即发生,就在说明正在编译多少个类的 INFO 消息之后。我的 Windows 笔记本电脑和 Ubuntu CI 服务器上都会发生这种情况。
有什么想法吗?
编辑:添加更多 POM 文件。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>15</java.version>
<maven.compiler.source>15</maven.compiler.source>
<maven.compiler.target>15</maven.compiler.target>
<spring-cloud.version>2020.0.4</spring-cloud.version>
<ch.qos.logback.version>1.2.3</ch.qos.logback.version>
</properties>
Run Code Online (Sandbox Code Playgroud)
编辑:我也使用龙目岛
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version> …
Run Code Online (Sandbox Code Playgroud) 执行命令mvn clean package后出现以下错误:
Fatal error compiling: java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module @0x298bfadd) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module @0x298bfadd
Run Code Online (Sandbox Code Playgroud)
我使用的是 JDK 17.0.1,据我所知,这是 idk 16 中的一个常见错误。有什么想法如何修复它吗?我在 Mac 上工作,我的 mvn 版本是 3.8.4
% echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
Run Code Online (Sandbox Code Playgroud) openjdk-17 ×10
java ×8
java-17 ×4
maven ×2
azul-zulu ×1
certificate ×1
eclipse ×1
forkjoinpool ×1
github ×1
javafx ×1
lombok ×1
openfeign ×1
oracle ×1
spring-boot ×1