我们有一个设置,其中我们将SonarQube与Ant结合使用并连接到SonarCloud(https://sonarcloud.io)。此设置始终可以从本地开发人员机器以及bitbucket管道中进行。自从两天以来,我们一直在本地和比特桶管道上降低错误。下面是堆栈跟踪:
Project.sonar:
[sonar:sonar] Apache Ant(TM) version 1.10.5 compiled on July 10 2018
[sonar:sonar] SonarQube Ant Task version: 2.5
[sonar:sonar] Loaded from: file:<redacted_path>/sonarqube-ant-task-2.5.jar
[sonar:sonar] User cache: /Users/<user>/.sonar/cache
BUILD FAILED
<redacted_path>/build-sonar.xml:120: java.lang.IllegalStateException: not started
at org.sonarsource.scanner.api.EmbeddedScanner.checkLauncherExists(EmbeddedScanner.java:244)
at org.sonarsource.scanner.api.EmbeddedScanner.stop(EmbeddedScanner.java:164)
at org.sonarsource.scanner.ant.SonarQubeTask.launchAnalysis(SonarQubeTask.java:101)
at org.sonarsource.scanner.ant.SonarQubeTask.execute(SonarQubeTask.java:81)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
at org.apache.tools.ant.Task.perform(Task.java:350)
at org.apache.tools.ant.Target.execute(Target.java:449)
at org.apache.tools.ant.Target.performTasks(Target.java:470)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1388)
at org.apache.tools.ant.Project.executeTarget(Project.java:1361)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
at org.apache.tools.ant.Main.runBuild(Main.java:834)
at org.apache.tools.ant.Main.startAnt(Main.java:223)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:284)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:101)
下面是我们用于运行声纳的命令:
ant compile Project.sonar -Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=<org_name> -Dsonar.login=<token_which_has_all_privs>
我们尝试用一个新的更改sonar.login令牌(认为旧令牌可能已过期),但它也不适用于新的令牌。
由于此错误的内容不多,因此我无法在其他任何地方找到任何帮助。我看到了其他错误,例如“ WebApp无法启动”,但这似乎与SonarQube在本地运行的用例有关。但是在我们的情况下,我们正在连接到https://sonarcloud.io主机。我们还尝试了sonar.login和sonar.password,但仍然失败。
任何帮助将不胜感激。
为mc1arke问题更新1 就足够了吗?我可以创建一个新的基本build-sonar.xml并提供它,但是它将仅包含以下内容以及一些特定于我们环境的属性/变量。
从build-sonar.xml中提取的内容如下:
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
<classpath>
<pathelement location="${lib.dir}/sonarqube-ant-task-2.5.jar"/>
</classpath>
</taskdef>
<target name="Project.sonar">
<property name="sonar.projectKey" value="ProjectKey" />
<property name="sonar.projectName" value="ProjectName" />
<property name="sonar.projectVersion" value="1.0" />
<property name="sonar.sources" value="${src.dir}" />
<property name="sonar.binaries" value="${build.dir}" />
<property name="sonar.java.binaries" value="${build.dir}" />
<property name="sonar.java.libraries" value="${lib.dir}/*.jar"/>
<property name="sonar.java.test.libraries" value="${lib.dir}/*.jar"/>
<property name="sonar.java.source" value="1.8" />
<property name="sonar.exclusions" value="<some modules>"/>
<property name="sonar.jacoco.reportPath" value="${junit.reports}/coverage/jacoco.exec"/>
<property name="sonar.junit.reportsPath" value="${junit.reports}" />
<property name="sonar.jacoco.itReportPath" value="${junit.reports}/coverage/jacoco-it.exec"/>
<property name="sonar.coverage.exclusions" value="<some modules>"/>
<sonar:sonar/>
</target>
更新2:我查看了EmbeddedScanner.java,IsolatedLauncherFactory.java和IsolatedLauncherProxy.java中的声纳代码,它们实际上应该引发错误。我还在-v模式下运行了ant命令,下面是它的输出:
Project.sonar:
[antlib:org.sonar.ant] Could not load definitions from resource org/sonar/ant/antlib.xml. It could not be found.
[sonar:sonar] Apache Ant(TM) version 1.10.5 compiled on July 10 2018
[sonar:sonar] SonarQube Ant Task version: 2.5
[sonar:sonar] Loaded from: file:<redacted_path>/sonarqube-ant-task-2.5.jar
[sonar:sonar] keyStore is :
[sonar:sonar] keyStore type is : jks
[sonar:sonar] keyStore provider is :
[sonar:sonar] init keystore
[sonar:sonar] init keymanager of type SunX509
[sonar:sonar] User cache: /Users/<user.name>/.sonar/cache
[sonar:sonar] Extract sonar-scanner-api-batch in temp...
[sonar:sonar] Get bootstrap index...
[sonar:sonar] Download: https://sonarcloud.io/batch_bootstrap/index
[sonar:sonar] Get bootstrap completed
所以看一下代码及其输出,我认为下面是代码流:
EmbeddedScanner.checkLauncherExists() --> IsolatedLauncherFactory.createLauncher() --> JarDownloader.download() --> JarDownloader.getScannerEngineFiles() --> BootstrapIndexDownloader.getIndex()
从日志看来,索引已成功返回。但是 JarDownloader.getScannerEngineFiles()或 JarDownloader.download()都失败,因为日志语句 logger.debug(“创建隔离的类加载器...”); 紧接List<File> jarFiles = jarDownloader.download() in IsolatedLauncherFactory.createLauncher()
之后打印。
参考:声纳源代码可用here
答案 0 :(得分:3)
您的问题是sonar-ant-plugin
似乎不支持SonarCloud。该插件依赖于旧版本的sonar-scanner-api
,该版本尝试通过从远程SonarQube服务器中检索/batch_bootstrap/index
来检索要下载的Jar列表。 SonarCloud没有提供这样的URL,但是确实有newer versions of sonar-scanner-api do use的/bootstrap/index
。
更新:Ant扫描仪的版本2.6.0.1426已发布,可以解决此问题。