SonarQube Server Community Edition Version 8.1.0.31237
Sonar Java Code Analyzer 6.3.2.22818
running on a Debian Linux 4.9.0 OS.
We have developed some custom rules based on the Java Code Analyzer.
As we are considering to update the SonarQube Server to Version 8.6, I tried to compile our custom rules plugin with the following Sonar API and Sonar Java rules versions, which are the latest versions according to Maven cetral:
Whe I compile the plugin with this configuration the following exception occurs when running the tests:
java.lang.NoSuchMethodError: org.sonar.api.batch.sensor.internal.SensorContextTester.setSettings(Lorg/sonar/api/config/Settings;)Lorg/sonar/api/batch/sensor/internal/SensorContextTester;
at org.sonar.java.testing.InternalCheckVerifier.sonarComponents(InternalCheckVerifier.java:551)
at org.sonar.java.testing.InternalCheckVerifier.verifyAll(InternalCheckVerifier.java:204)
at org.sonar.java.testing.InternalCheckVerifier.verifyIssues(InternalCheckVerifier.java:164)
at de.empic.sonar.EapRuleVerifier.verify(EapRuleVerifier.java:32)
at de.empic.sonar.rule.AvoidSpecificCDIBeanNameTest.detected(AvoidSpecificCDIBeanNameTest.java:10)
...
Whe I use the API version 8.2.0.32929, which is mentioned in the guide Writing Custom Java Rules 101, everything works fine. Any version higher than that, leads to the exception above.
That raises the following questions for me:
Is it possible to deploy an run the custom rules plugin having the code dependency on API version 8.2.0.32929 on a SonarQube Server with version 8.6?
When I scanned the server release upgrade notes, I found the following statement in Release 8.5:
Upgrade simplified: Languages, GIT and SVN support now built-in
Languages provided with your edition and support for GIT and SVN version control are now built-in and donāt require plugins. If you were using these plugins, you need to remove them from SonarQube before upgrading.
Does this require changes in how I have to develop, build and deploy our custom java rules?
How do I know, which version of the java analyzer is bundled with the SonarQube server version?
thank you for the hint where to find the API Changes of the sonar java plugin. But unfortunately this doesnāt solve my problem, as I donāt see any API Changes concerning my problem.
In the code snippet below, note the plugin API version (<sonar.version>) provided through the properties. It relates to the minimum version of SonarQube your plugin will support, and is generally aligned to your companyās SonarQube instance. In this template, we rely on the version 8.2.0.32929 (LTS version is 7.9, but compatibility to latest release is guaranteed when packaging the plugin). Note that latest released versions of the Java Analyzer are always compatible with the current LTS version of SonarQube.
I guess, my problem stems from an incompatibility in the plugin API between LTS version 7.9 and the latest version 8.6.
So for now, I will keep the dependency to plugin API Version 8.2.0.32929 which works and I will have to upgrade to the next plugin API Version with the next SonarQube LTS Release.
I ran into the exactly same problem.
Iād like to upgrade my SonarQube Community Edition installation to 8.6.1.40680 but Iām a bit confused when I try to update my custom Java plugin settings.
Which java.plugin.version should I use since Java plugin isnāt a plugin anymore or, at list, is ābuilt inā ?
That worked fine. I guess even if the Java plugin is now ābuilt inā, there will be a API version to use for custom plugins and I hope it will be documented somewhere, which version is compatible to which SonarQube version.
I donāt know if or when the guide for writing cusom java rules will be updated for the higher version of SonarQube.
just to let everyone know who follows this thread:
I just noticed that the guide for developing custom java rules was updated. If you look at it now, in chapter Custom Rules 101 - looking at the POM there is an incompatibility of the Java plugiin version 6.12.0.24852 and SonarQube Server API 8.7:
SonarQube 8.7 compatibility issue
SonarQube 8.7 embed version 6.12.0.24852 of the Java Analyzer, which unfortunately suffer from > a dependency-related-bug. This bug impacts custom-rules plugins compatibility with latest
SonarQube APIs. It might also prevent you to build or run tests of custom-rules plugins.
The issue has been fixed in ticket SONARJAVA-3690, but the fix has been shipped with version 6.13.0.2513 of the Java Analyzer, itself only available for SonarCloud users.
SonarQube 8.8 will embed a newer version of the Java Analyzer (probably version 6.14 ), and the issue will be solved for custom-rules plugins. However, in the meantime, we recommend you to use version 6.13 instead of 6.12 of the Java Analyzer to build your custom plugin. No new APIs has been introduced between these 2 versions, and deploying a custom-rules plugin relying on 6.13 Java Analyzer API on a SonarQube 8.7 having version 6.12 will work just fine.
Still, there is an error in the hint, the version of the Java plugin must be 6.13.0.25138
Indeed, we identified the issue (mainly thanks to this thread) and we were planning to update the tutorial again as soon as version 8.8 of SonarQube is released (planned for this week). It will embed version 6.14 of the java analyzer, released last Friday.
Thanks for noticing the typo. Iāll fix it right now!
I`m testing SonarQube7.9 update to 8.9.When testing there is a NoClassDefFoundError Found.
I add those dependency:
<dependency>
<groupId>org.sonarsource.sonarqube</groupId>
<artifactId>sonar-plugin-api-impl</artifactId>
<version>${sonarqube.version}</version> // This is my sonarqube version
<scope>test</scope>
</dependency>
And than test success.
Some package maybe changed.
wish can help u.