Jira 9.5.0 Java 17 issues

Dear community,

We see that Jira 9.5.0 got released recently, which allegedly has support for Java 17, albeit only with the Eclipse Temurin distribution.

We always do internal compatibility testing of our apps as soon as possible, and release a new version if needed.
Yesterday I wanted to test our app with the new versions, so I downloaded a zip of Jira 9.5.0, and a zip of the Eclipse Temurin 17 JRE.
I set the JAVA_HOME environment variable to this newly downloaded JRE, set the JIRA_HOME in the setenv.bat to a new folder and started Jira with the start-jira.bat (nothing special, just the regular process for a new Jira install), but this is where things got interesting.

I got some huge exceptions like this while starting Jira:

Exception
http-nio-8100-exec-11 ERROR      [o.a.c.c.C.[.[localhost].[/].[action]] Servlet.service() for servlet [action] in context with path [] threw exception [Servlet execution threw an exception] with root cause
java.lang.IllegalAccessError: class com.atlassian.jira.issue.customfields.manager.xml.AllowlistedXStreamFactory (in unnamed module @0x4d5ea05) cannot access class sun.util.calendar.BaseCalendar$Date (in module java.base) because module java.base does not export sun.util.calendar to unnamed module @0x4d5ea05
	at com.atlassian.jira.issue.customfields.manager.xml.AllowlistedXStreamFactory.fillJiraDefaults(AllowlistedXStreamFactory.java:77)
	at com.atlassian.jira.issue.customfields.manager.xml.AllowlistedXStreamFactory.create(AllowlistedXStreamFactory.java:60)
	at com.atlassian.jira.issue.customfields.manager.xml.DefaultXmlConverter.<init>(DefaultXmlConverter.java:45)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
	at org.picocontainer.injectors.AbstractInjector.newInstance(AbstractInjector.java:145)
	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:342)
	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at com.atlassian.jira.component.pico.behaviors.ContainerSynchronizedBehavior.getComponentInstance(ContainerSynchronizedBehavior.java:25)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:698)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:646)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:631)
	at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
	at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
	at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
	at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at com.atlassian.jira.component.pico.behaviors.ContainerSynchronizedBehavior.getComponentInstance(ContainerSynchronizedBehavior.java:25)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:698)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:646)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:631)
	at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
	at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
	at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
	at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at com.atlassian.jira.component.pico.behaviors.ContainerSynchronizedBehavior.getComponentInstance(ContainerSynchronizedBehavior.java:25)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:698)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:646)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:631)
	at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
	at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
	at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
	at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at com.atlassian.jira.component.pico.behaviors.ContainerSynchronizedBehavior.getComponentInstance(ContainerSynchronizedBehavior.java:25)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:698)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:646)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:631)
	at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
	at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
	at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
	at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at com.atlassian.jira.component.pico.behaviors.ContainerSynchronizedBehavior.getComponentInstance(ContainerSynchronizedBehavior.java:25)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:698)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:646)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:631)
	at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
	at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
	at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
	at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at com.atlassian.jira.component.pico.behaviors.ContainerSynchronizedBehavior.getComponentInstance(ContainerSynchronizedBehavior.java:25)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:698)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:646)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:631)
	at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
	at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
	at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
	at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at com.atlassian.jira.component.pico.behaviors.ContainerSynchronizedBehavior.getComponentInstance(ContainerSynchronizedBehavior.java:25)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:698)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:646)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:631)
	at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
	at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
	at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
	at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at com.atlassian.jira.component.pico.behaviors.ContainerSynchronizedBehavior.getComponentInstance(ContainerSynchronizedBehavior.java:25)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:698)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:646)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:620)
	at com.atlassian.jira.component.pico.CachingMutablePicoContainer.getComponent(CachingMutablePicoContainer.java:124)
	at org.picocontainer.containers.ImmutablePicoContainer.getComponent(ImmutablePicoContainer.java:40)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:717)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:646)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:631)
	at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
	at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
	at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
	at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at com.atlassian.jira.component.pico.behaviors.ContainerSynchronizedBehavior.getComponentInstance(ContainerSynchronizedBehavior.java:25)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:698)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:646)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:677)
	at com.atlassian.jira.component.pico.CachingMutablePicoContainer.getComponent(CachingMutablePicoContainer.java:139)
	at com.atlassian.jira.component.pico.ComponentContainer.loadComponent(ComponentContainer.java:151)
	at com.atlassian.jira.component.pico.ComponentManager.loadComponent(ComponentManager.java:603)
	at com.atlassian.jira.issue.fields.DefaultFieldManager.buildSystemFieldMap(DefaultFieldManager.java:187)
	at com.atlassian.jira.issue.fields.DefaultFieldManager.<init>(DefaultFieldManager.java:165)
	at com.atlassian.jira.issue.fields.DefaultFieldManager.<init>(DefaultFieldManager.java:156)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
	at org.picocontainer.injectors.AbstractInjector.newInstance(AbstractInjector.java:145)
	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:342)
	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at com.atlassian.jira.component.pico.behaviors.ContainerSynchronizedBehavior.getComponentInstance(ContainerSynchronizedBehavior.java:25)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:698)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:646)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:631)
	at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
	at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
	at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
	at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at com.atlassian.jira.component.pico.behaviors.ContainerSynchronizedBehavior.getComponentInstance(ContainerSynchronizedBehavior.java:25)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:698)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:646)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:631)
	at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
	at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
	at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
	at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at com.atlassian.jira.component.pico.behaviors.ContainerSynchronizedBehavior.getComponentInstance(ContainerSynchronizedBehavior.java:25)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:698)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:646)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:631)
	at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
	at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
	at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
	at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at com.atlassian.jira.component.pico.behaviors.ContainerSynchronizedBehavior.getComponentInstance(ContainerSynchronizedBehavior.java:25)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:698)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:646)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:631)
	at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
	at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
	at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
	at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at com.atlassian.jira.component.pico.behaviors.ContainerSynchronizedBehavior.getComponentInstance(ContainerSynchronizedBehavior.java:25)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:698)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:646)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:631)
	at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
	at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
	at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
	at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at com.atlassian.jira.component.pico.behaviors.ContainerSynchronizedBehavior.getComponentInstance(ContainerSynchronizedBehavior.java:25)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:698)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:646)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:631)
	at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
	at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
	at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
	at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at com.atlassian.jira.component.pico.behaviors.ContainerSynchronizedBehavior.getComponentInstance(ContainerSynchronizedBehavior.java:25)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:698)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:646)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:631)
	at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
	at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
	at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
	at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at com.atlassian.jira.component.pico.behaviors.ContainerSynchronizedBehavior.getComponentInstance(ContainerSynchronizedBehavior.java:25)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:698)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:646)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:631)
	at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
	at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
	at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
	at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at com.atlassian.jira.component.pico.behaviors.ContainerSynchronizedBehavior.getComponentInstance(ContainerSynchronizedBehavior.java:25)
	at org.picocontainer.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:605)
	at org.picocontainer.DefaultPicoContainer.getComponents(DefaultPicoContainer.java:586)
	at com.atlassian.jira.component.pico.CachingMutablePicoContainer.getComponents(CachingMutablePicoContainer.java:193)
	at com.atlassian.jira.component.pico.ComponentContainer.getComponents(ComponentContainer.java:281)
	at com.atlassian.jira.component.pico.ComponentManager.runInitializingComponents(ComponentManager.java:219)
	at com.atlassian.jira.component.pico.ComponentManager.createFullContainer(ComponentManager.java:212)
	at com.atlassian.jira.startup.ComponentContainerLauncher.populateFullPicoContainer(ComponentContainerLauncher.java:50)
	at com.atlassian.jira.startup.ComponentContainerLauncher.start(ComponentContainerLauncher.java:30)
	at com.atlassian.jira.startup.DefaultJiraLauncher.lambda$postDbLaunch$2(DefaultJiraLauncher.java:142)
	at com.atlassian.jira.config.database.DatabaseConfigurationManagerImpl.runPostDbSetupRunnables(DatabaseConfigurationManagerImpl.java:287)
	at com.atlassian.jira.config.database.DatabaseConfigurationManagerImpl.activateDatabase(DatabaseConfigurationManagerImpl.java:280)
	at com.atlassian.jira.config.database.DatabaseConfigurationManagerImpl.activateDatabase(DatabaseConfigurationManagerImpl.java:245)
	at com.atlassian.jira.web.action.setup.SetupDatabase.doExecute(SetupDatabase.java:224)
	... 1 filtered
	at com.atlassian.jira.web.action.JiraWebActionSupport.execute(JiraWebActionSupport.java:1364)
	... 7 filtered
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:779)
	... 49 filtered
	at com.atlassian.jira.security.JiraSecurityFilter.lambda$doFilter$0(JiraSecurityFilter.java:66)
	... 1 filtered
	at com.atlassian.jira.security.JiraSecurityFilter.doFilter(JiraSecurityFilter.java:64)
	... 31 filtered
	at com.atlassian.jira.servermetrics.CorrelationIdPopulatorFilter.doFilter(CorrelationIdPopulatorFilter.java:30)
	... 27 filtered
	at com.atlassian.jira.servermetrics.MetricsCollectorFilter.doFilter(MetricsCollectorFilter.java:25)
	... 25 filtered
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:833)

I found this link, which tells there might be issues with Java 17, so I went ahead and added the listed --add-opens commands to the JVM_SUPPORT_RECOMMENDED_ARGS section of the setenv.bat.
This didn’t help, and I didn’t find any way to nudge the system to a working state.

In my desperation I went ahead, and downloaded the JDK of Eclipse Temurin 17, instead of the JRE, and this did turn out to be helpful, but still not quite right.
When I start Jira for the first time with this JDK, the huge exception still appears, and the setup process fails. But if I restart Jira, it will continue running a bit further, it tries to start the plugin system multiple times, and finally, the system boots up “correctly”. (for this process to not get stuck, there’s a time when I have to try opening the url of Jira in the browser, this seems to kick it out of a stuck state, and retry some stuff that failed…?)
At this point, Jira seems to work correctly.
Note: I found that adding the mentioned --add-opens parameters is needed even with the JDK for Jira to work.

My question is the following:
Has anyone of you tried running the new Jira with Java 17? If so, how was the experience?
What am I doing wrong, or is this really the current state of the Java 17 support we should expect?

Thanks for reading this far.

Máté

5 Likes

It is important to mention that:

  1. When we tried Jira 9.5.0 with pre-17 Java, things were fine.

  2. Also, the Java version shipped with the installer is some earlier version (11, to be precise).

Is it only us, or the Java 17 compatibility is somewhat half-baked?

3 Likes

In the meantime, I realised why did we even have to input these --add-opens parameters manually:

The start-jira.bat checks the Java version by calling the “java -version” command, but after that, it proceeds to start Jira with the Java that’s in the JAVA_HOME directory.

Which means, if for example, you have Java 8 on your PATH, but the JAVA_HOME is set to Java 17, the script will think that it’s running on Java 8, therefore it doesn’t add the necessary parameters, and then proceeds to run with the Java 17 in the JAVA_HOME directory…

This definitely needs to be fixed.

We had a problem starting Jira 9.5.0 with Java 17. After installation the server did not respond after the step for inserting database parameters through the GUI. Though as the error occurred in just this step might be a coincidence. In the log we saw the following error.

2022-12-14 16:04:41,980+0100 JIRA-Bootstrap ERROR [c.a.jira.startup.LauncherContextListener] Unable to start JIRA.
java.lang.IllegalAccessError: class com.atlassian.jira.issue.customfields.manager.xml.AllowlistedXStreamFactory (in unnamed module @0x46a2aaac) cannot access class sun.util.calendar.BaseCalendar$Date (in module java.base) because module java.base does not export sun.util.calendar to unnamed module @0x46a2aaac

Sergey Vyacheslavovich Brunov wrote an answer in stackoverflow to a similar problem. This turned out to be the solution to our problem with starting Jira. We added these lines below (in catalina.sh) and the server started and runs as expected.

JDK_JAVA_OPTIONS=“$JDK_JAVA_OPTIONS --add-opens=java.base/java.lang=ALL-UNNAMED
–add-opens=java.base/java.lang.invoke=ALL-UNNAMED
–add-opens=java.base/java.lang.reflect=ALL-UNNAMED
–add-opens=java.base/java.io=ALL-UNNAMED
–add-opens=java.base/java.net=ALL-UNNAMED
–add-opens=java.base/java.nio=ALL-UNNAMED
–add-opens=java.base/java.util=ALL-UNNAMED
–add-opens=java.base/java.util.concurrent=ALL-UNNAMED
–add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED
–add-opens=java.base/sun.nio.ch=ALL-UNNAMED
–add-opens=java.base/sun.nio.cs=ALL-UNNAMED
–add-opens=java.base/sun.security.action=ALL-UNNAMED
–add-opens=java.base/sun.util.calendar=ALL-UNNAMED
–add-opens=java.security.jgss/sun.security.krb5=ALL-UNNAMED”

There might be other solutions to this, but it should be addressed.

3 Likes

Try to delete the content that is inside the custom jira home directory and then restart.

the reason old home zips fail is covered on Jira 9.5.0 amps no longer able to boot from from old resource zip

Am also digging through JDK17 support, whilst I have a stable Jira 9.5.x amps based build with integration tests based on a resource.zip running just fine in JDK11, changing to JDK11 bombs out an AMPS build launched with just atlas-debug, this is after the required maven update to the SDK to 3.8.x for 9.5.x building, so the sdk may need some love before we can even test jdk17.

[INFO] [talledLocalContainer] Unrecognized VM option 'MaxPermSize=256m'
[INFO] [talledLocalContainer] Error: Could not create the Java Virtual Machine.
[INFO] [talledLocalContainer] Error: A fatal exception has occurred. Program will exit.

EDIT, as is always the way, 2m later, you figure it out, seems that the cause was a param from our build pom , so it appears to boot, going on to show:

[INFO] [talledLocalContainer] Tomcat 9.x started on port [2990]
[INFO] jira started successfully in 36s at http://localhost:2990/jira
[INFO] Type Ctrl-C to shutdown gracefully

There I hit what Skule describes, but am as yet unclear how this can be applied to the AMPS build. For what it’s worth I’ve logged Log in with Atlassian account