SonarQube 8.4.2 & Java Coverage: A Quandary

The SonarQube 8.4.2 released topic says:

This sounds a bit more benign than the description in JIRA of the issue in which the change was implemented. See SONAR-13604

Please can you explain exactly what this MEANS in terms of functionality? Will it “just” break (say) PR decoration… or will it break the entire check (which is required in our organisation):

In other words, is an upgrade to 8.4.2 mandatory for us? Can I suggest that an update to the release announcement would be helpful?

The reason for concern is that we are currently using SonarQube EE Server 8.2 and we are using it with sonar-java-plugin Code Analyzer for Java v5.14 because we are really struggling with the transition from JaCoCo exec to XML.

The documentation for the plugin states that this version is not compatible with SQ 8.2… but it does work. We just cannot take advantage of all the new java rules (which we would love to be able to do).

I have upgraded our test SQ server to 8.4.2 but found that the sonar-java-plugin 5.14 no longer works:

2020.09.27 13:43:33 ERROR web[][o.s.s.p.Platform] Background initialization failed. Stopping SonarQube
java.lang.NoClassDefFoundError: org/sonar/plugins/java/api/JspCodeVisitor
	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
	at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
	at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:550)
	at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:458)
	at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:452)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:451)
	at org.sonar.classloader.ClassRealm.loadClassFromSelf(ClassRealm.java:125)
	at org.sonar.classloader.ParentFirstStrategy.loadClass(ParentFirstStrategy.java:37)
	at org.sonar.classloader.ClassRealm.loadClass(ClassRealm.java:87)
	at org.sonar.classloader.ClassRealm.loadClass(ClassRealm.java:76)
	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
	at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
	at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:550)
	at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:458)
	at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:452)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:451)
	at org.sonar.classloader.ClassRealm.loadClassFromSelf(ClassRealm.java:125)
	at org.sonar.classloader.ParentFirstStrategy.loadClass(ParentFirstStrategy.java:37)
	at org.sonar.classloader.ClassRealm.loadClass(ClassRealm.java:87)
	at org.sonar.classloader.ClassRealm.loadClass(ClassRealm.java:76)
	at A.A.A.A.A.J.<clinit>(na:422)
	at A.A.A.A.A.C.define(na:933)
	at org.sonar.server.rule.RuleDefinitionsLoader.load(RuleDefinitionsLoader.java:53)
	at org.sonar.server.rule.RegisterRules.start(RegisterRules.java:120)
	at org.sonar.core.platform.StartableCloseableSafeLifecyleStrategy.start(StartableCloseableSafeLifecyleStrategy.java:40)
	at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.start(AbstractInjectionFactory.java:84)
	at org.picocontainer.behaviors.AbstractBehavior.start(AbstractBehavior.java:169)
	at org.picocontainer.behaviors.Stored$RealComponentLifecycle.start(Stored.java:132)
	at org.picocontainer.behaviors.Stored.start(Stored.java:110)
	at org.picocontainer.DefaultPicoContainer.potentiallyStartAdapter(DefaultPicoContainer.java:1016)
	at org.picocontainer.DefaultPicoContainer.startAdapters(DefaultPicoContainer.java:1009)
	at org.picocontainer.DefaultPicoContainer.start(DefaultPicoContainer.java:767)
	at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136)
	at org.sonar.server.platform.platformlevel.PlatformLevel.start(PlatformLevel.java:90)
	at org.sonar.server.platform.platformlevel.PlatformLevelStartup.access$001(PlatformLevelStartup.java:48)
	at org.sonar.server.platform.platformlevel.PlatformLevelStartup$1.doPrivileged(PlatformLevelStartup.java:85)
	at org.sonar.server.user.DoPrivileged.execute(DoPrivileged.java:46)
	at org.sonar.server.platform.platformlevel.PlatformLevelStartup.start(PlatformLevelStartup.java:82)
	at org.sonar.server.platform.PlatformImpl.executeStartupTasks(PlatformImpl.java:198)
	at org.sonar.server.platform.PlatformImpl.access$400(PlatformImpl.java:46)
	at org.sonar.server.platform.PlatformImpl$1.lambda$doRun$1(PlatformImpl.java:122)
	at org.sonar.server.platform.PlatformImpl$AutoStarterRunnable.runIfNotAborted(PlatformImpl.java:370)
	at org.sonar.server.platform.PlatformImpl$1.doRun(PlatformImpl.java:122)
	at org.sonar.server.platform.PlatformImpl$AutoStarterRunnable.run(PlatformImpl.java:354)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.ClassNotFoundException: org.sonar.plugins.java.api.JspCodeVisitor
	at org.sonar.classloader.ParentFirstStrategy.loadClass(ParentFirstStrategy.java:39)
	at org.sonar.classloader.ClassRealm.loadClass(ClassRealm.java:87)
	at org.sonar.classloader.ClassRealm.loadClass(ClassRealm.java:76)
	... 49 common frames omitted

So, what to do? If Github integration really will break then should there not be a SQ 8.2.1 hotfix (and for other versions as well)?

On the subject of JaCoCo coverage, I found the topic Jacoco XML format cannot work as good as the binary format for multi-module maven useful. Can it be re-opened? Note also that topic’s link to JaCoCo issue #974. Can nothing be done to advance that? ie, just go ahead and submit the PR that was offered.

Hi,

Sorry, but you need to upgrade to 8.4.2 if you want to continue using PR decoration on GitHub.

The LTS and the latest version are supported (i.e. there’s a possibility of issuing bug fixes on them). 8.2.1 is neither the LTS nor the latest, so there’s no plan to patch it.

Maybe you could open a separate thread for that?

 
:woman_shrugging:
Ann

Thanks for the response.

So, if we can live OK without PR decoration then we will be OK? We won’t lose the Quality Gate check (as displayed in screenshot above)? I just want to be double-sure about this.

I suggested an update to documentation (such as the release notes) in the hope that others might avoid some of the pain that I have gone through.

I mentioned our travails with coverage so that you would better understand why upgrading is a problem and thus why it is maybe not so unreasonable to suggest a 8.2.1. After all, the “new” GitHub Apps endpoints were introduced before the release of SonarQube 7.5.

Yes, I can open a separate thread for JaCoCo issues.

Hi,

I used “PR decoration” broadly. You should assume that none of it will work.

 
Ann