我在我的项目中使用了龙目岛,但我的同事不同意使用它,他的理由是(来自lombok文件的争议)
这两个项目Lombok都利用非公共API来完成他们的巫术.这意味着使用后续IDE或JDK版本可能会破坏Project Lombok的风险.
但这是一篇2010年写的非常古老的文档,也许现在已经解决了这个问题,所以我想知道Lombok是否支持Java 9并且它仍然使用非公共API:s?
我创建了一个 Cucumber 功能文件和步骤文件,然后单击功能文件的“运行配置”,我在控制台中看到以下内容。我怎么解决这个问题?
\n*Feature: Login into account\n Existing user should be able to login to account using correct credentials\n \nScenario: Login into account with correct credentials # C:/Users/MI/Desktop/CucumberFramework/CucumberFramework/src/test/java/CucumberFramework/featureFiles/Login.feature:4\n \nGiven User navigates to stackoverflow website # LoginSteps.user_navigates_to_stackoverflow_website()\n java.lang.ExceptionInInitializerError\n at cucumber.deps.com.thoughtworks.xstream.XStream.setupConverters(XStream.java:820)\n at cucumber.deps.com.thoughtworks.xstream.XStream.<init>(XStream.java:574)\n at cucumber.deps.com.thoughtworks.xstream.XStream.<init>(XStream.java:530)\n at cucumber.runtime.xstream.LocalizedXStreams$LocalizedXStream.<init>(LocalizedXStreams.java:50)\n at cucumber.runtime.xstream.LocalizedXStreams.newXStream(LocalizedXStreams.java:37)\n at cucumber.runtime.xstream.LocalizedXStreams.get(LocalizedXStreams.java:29)\n at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)\n at cucumber.runtime.Runtime.runStep(Runtime.java:300)\n at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)\n at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)\n at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)\n at cucumber.runtime.model.CucumberFeature.run(CucumberFeature.java:165)\n at cucumber.runtime.Runtime.run(Runtime.java:122)\n at cucumber.api.cli.Main.run(Main.java:36)\n at cucumber.api.cli.Main.main(Main.java:18)\n at \xe2\x9c\xbd.Given User navigates to stackoverflow website(C:/Users/MI/Desktop/CucumberFramework/CucumberFramework/src/test/java/CucumberFramework/featureFiles/Login.feature:5)\n \n Caused by: java.lang.reflect.InaccessibleObjectException: Unable …Run Code Online (Sandbox Code Playgroud) 目前我有一个执行运行程序的任务,比如
task runApp(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
main = 'com.eonmux.somepackage'
jvmArgs '-Xmx4096m'
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试将 --add-opens 添加到 JVM 参数列表中,以便允许从我的 gradle 包进行反射访问
就像是
task runApp(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
main = 'com.eonmux.somepackage'
jvmArgs '-Xmx4096m','--add-opens java.base/jdk.internal.loader=ALL-UNNAMED'
}
Run Code Online (Sandbox Code Playgroud)
但是,这会出现以下错误,指出命令行选项无法识别
2020-12-09T16:30:56.285-0500 [INFO] [org.gradle.process.internal.DefaultExecHandle] Successfully started process 'command 'C:\Program Files\AdoptOpenJDK\jdk-11.0.6.10-openj9\bin\java.exe''
2020-12-09T16:30:56.286-0500 [DEBUG] [org.gradle.process.internal.ExecHandleRunner] waiting until streams are handled...
2020-12-09T16:30:56.360-0500 [ERROR] [system.err] JVMJ9VM007E Command-line option unrecognised: --add-opens java.base/jdk.internal.loader=ALL-UNNAMED
2020-12-09T16:30:56.361-0500 [ERROR] [system.err] Error: Could not create the Java Virtual Machine.
Could not create the Java Virtual …Run Code Online (Sandbox Code Playgroud) 这是我的第一个黄瓜项目,我在设置所有内容时遵循了教程。一切似乎都是一样的,但出于某种原因我得到了这个:
\njava.lang.ExceptionInInitializerError。\n原因:java.lang.reflect.InaccessibleObjectException:无法使字段私有最终java.util.Comparator java.util.TreeMap.comparator可访问:模块java.base不“打开java.util”到未命名模块@74ad1f1f
\n知道如何解决这个错误吗?
\n下面我发布了控制台中出现的所有内容以及我的 pom 文件,以防我的依赖项出现问题,尽管教程的 pom 文件中的人员是相同的。
\n这就是我的控制台中显示的所有内容。
\n[31mFailed scenarios:[0m\n[31muni/login/Login.feature:3 [0m# Scenario: Enter the system.\n1 Scenarios ([31m1 failed[0m)\n5 Steps ([31m1 failed[0m, [36m4 skipped[0m)\n0m0.185s\n\njava.lang.ExceptionInInitializerError\n at cucumber.deps.com.thoughtworks.xstream.XStream.setupConverters(XStream.java:820)\n at cucumber.deps.com.thoughtworks.xstream.XStream.<init>(XStream.java:574)\n at cucumber.deps.com.thoughtworks.xstream.XStream.<init>(XStream.java:530)\n at cucumber.runtime.xstream.LocalizedXStreams$LocalizedXStream.<init>(LocalizedXStreams.java:50)\n at cucumber.runtime.xstream.LocalizedXStreams.newXStream(LocalizedXStreams.java:37)\n at cucumber.runtime.xstream.LocalizedXStreams.get(LocalizedXStreams.java:29)\n at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)\n at cucumber.runtime.Runtime.runStep(Runtime.java:300)\n at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)\n at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)\n at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)\n at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:102)\n at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)\n at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)\n at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\n at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\n at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\n at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\n at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\n at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\n at org.junit.runners.ParentRunner.run(ParentRunner.java:413)\n at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)\n at cucumber.api.junit.Cucumber.runChild(Cucumber.java:95)\n at cucumber.api.junit.Cucumber.runChild(Cucumber.java:38)\n at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\n …Run Code Online (Sandbox Code Playgroud) java.lang.reflect.InaccessibleObjectException尝试 Mock 一个对象一段时间
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 @238e0d81
Run Code Online (Sandbox Code Playgroud) 我已经使用 java 16 启动了一个项目,但项目中到处都出现错误:
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 @6dfcffb5
Run Code Online (Sandbox Code Playgroud)
看来我从不同版本的 java 获得的代码在这个特定版本中不起作用。知道我需要在 pojo 类中更改什么吗?我的应用程序中只有 1 个 pojo,因为它是微服务。
谢谢。
Hibernate是否已准备好使用Java 9的可用版本?
我记得我已经尝试过但失败了.不幸的是我不记得具体原因.
顺便说一下,Hibernate Validator 5.2.3已经可以与Java 9一起使用了.
运行测试时出现错误,我无法理解为什么会出现此错误,此代码在 java 8 中运行良好,而在 java 17 中运行时出现错误。谷歌搜索了这个错误,但没有发现任何有用的东西。请帮助我理解这个错误。提前致谢:)
@RunWith(PowerMockRunner.class)
@PrepareForTest({PopulatedAuthorizedUser.class})
@SpringBootTest(classes = MockServletContext.class)
@PowerMockIgnore({"javax.management.*", "javax.net.ssl.*",
"jdk.internal.reflect.*"})
public class ProjectUserControllerTest {
private ProjectUserController controller;
private UUID projectId = UUID.randomUUID();
private UUID groupId = UUID.randomUUID();
private String email = "project.user@email.com";
@Mock
private ProjectUserService projectUserService;
private ObjectMapper objectMapper = new ObjectMapper();
@Mock
protected AuthorizedUser au;
@Before
public void setUp() throws Exception {
controller = new ProjectUserController();
FieldUtils.writeField(controller, "projectUserService", projectUserService, true);
FieldUtils.writeField(controller, "objectMapper", objectMapper, true);
PowerMockito.mockStatic(PopulatedAuthorizedUser.class);
Mockito.when(PopulatedAuthorizedUser.get()).thenReturn(mockAuthorizedUser());
}
@Test
public void testGetProjectUsers() {
Mockito.doReturn(Arrays.asList(mockProjectUser())).when(projectUserService)
.findProjectUsersByProjectId(projectId); …Run Code Online (Sandbox Code Playgroud) 我正在尝试将以下库转换为Java 9模块:https://github.com/sskorol/test-data-supplier
遵循本指南:https://guides.gradle.org/building-java-9-modules
经过一些操作和重构(无法管理lombok问题,所以只是临时删除它),我有以下module-info.java:
module io.github.sskorol {
exports io.github.sskorol.core;
exports io.github.sskorol.model;
requires testng;
requires vavr;
requires streamex;
requires joor;
requires aspectjrt;
}
Run Code Online (Sandbox Code Playgroud)
它甚至可以在测试跳过的情况下进行编译/构建.但是,当我尝试运行测试任务时,我收到以下异常:
org.gradle.api.internal.tasks.testing.TestSuiteExecutionException: Could not complete execution for Gradle Test Executor 2.
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy1.stop(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.stop(TestWorker.java:120)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) …Run Code Online (Sandbox Code Playgroud) 我已经将java从8更新到9-ea并从2.13更新为3.4.1.以下是gradle --version输出.
------------------------------------------------------------
Gradle 3.4.1
------------------------------------------------------------
Build time: 2017-03-03 19:45:41 UTC
Revision: 9eb76efdd3d034dc506c719dac2955efb5ff9a93
Groovy: 2.4.7
Ant: Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM: 9-ea (Oracle Corporation 9-ea+158)
OS: Linux 4.8.0-36-generic amd64
Run Code Online (Sandbox Code Playgroud)
遇到以下错误时编译:
FAILURE: Build failed with an exception.
* What went wrong:
java.lang.ExceptionInInitializerError (no error message)
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
Run Code Online (Sandbox Code Playgroud)
输出gradle --stacktrace如下:
java.lang.ExceptionInInitializerError
at org.gradle.initialization.DefaultClassLoaderRegistry.restrictTo(DefaultClassLoaderRegistry.java:40) …Run Code Online (Sandbox Code Playgroud)