我正在使用SonarQube进行代码分析.我想让Sonar连接到Oracle DB.我收到此错误 - 将上下文初始化事件发送到类org.sonar.server.platform.PlatformServletContextListener org.sonar.api.utils.MessageException的侦听器实例的异常:Oracle必须具有UTF8字符集和BINARY排序.NLS_CHARACTERSET是WE8MSWIN1252,NLS_SORT是BINARY. 除了UTF8之外,还有什么办法让Sonar使用Oracle charset?
利用 SonarQube 5.1,我一直在尝试利用 API 搜索功能来收集与我当前项目相关的所有问题,以显示在散热器上。在 Web 界面上,SonarQube 显示有 71 个主要问题和 161 个小问题。
使用此搜索字符串 https://sonarqube.url.com/api/issues/search?projectKeys=myproject 'skey
我收到了包含 100 个结果的响应。当我仅处理 OPEN 项目的这些结果时,我总共收到 55 个问题。36个大修,19个小修。
这是通过 Powershell 脚本实现的,该脚本对 SonarQube 服务器进行身份验证并传入查询,然后将响应反序列化为我可以处理的数组。(计算主要/次要问题)
抛开背景,我的问题的核心是:有谁知道为什么我收到的回复被锁定在 100?在我的研究中,我看到其他人表示,由于存在一个突出的错误,对问题搜索的响应将上限为 500。然而,我正在寻找的预期问题数量远远低于这个数字。API 的说明表明它将返回前 10,000 个问题。是否有服务器端设置限制它将返回到搜索查询的输出?
提前致谢,
我正在使用Gradle 3.1和SonarQube 2.1的Gradle插件.当我gradle sonarqube使用SonarQube 6.0和适用于Java 4.2的SonarQube插件运行时,一切都按预期工作.但是,当我将SonarQube升级到6.1-RC1时,我得到以下堆栈跟踪:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':sonarqube'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:233)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:215)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:74)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:55)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
Caused by: java.lang.IllegalStateException: Unable to load component class org.sonar.scanner.cpd.deprecated.DefaultCpdBlockIndexer
at org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer.getComponent(ComponentContainer.java:69)
at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:632)
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.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
at org.picocontainer.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:606)
at …Run Code Online (Sandbox Code Playgroud) 我通过Sonarqube在我们的代码上运行findbugs,我得到一个空指针取消引用的错误:
有一个语句分支,如果执行,则保证将取消引用空值.
错误的代码就是这样:
public static boolean isBigDecimalDifferent(BigDecimal x, BigDecimal y) {
return (x != null || y != null)
&& ((x != null && y == null) || (x == null && y != null) || x.compareTo(y) != 0);
}
Run Code Online (Sandbox Code Playgroud)
我想知道这是怎么可能的.唯一可以实现NPE的地方是调用x.compareTo(y),但如果x = null,那么Java永远不会分析那个分支,对吗?
这是一个错误,还是我错过了Java分析这个语句的方式?
UPDATE
感谢您的投入.我最后建议他们改变它:
if (x!=null && y != null)
return x.compare(y);
else
return x!=y;
Run Code Online (Sandbox Code Playgroud)
我觉得有点清楚.如果没有人同意这个改变,我会按照建议做,只是忽略这个问题,即使我宁愿避免这个.
是否可以使用命令行参数设置SonarQube的Web上下文路径?
通常你会sonar.web.context=/sonarqube在sonar.properties文件中设置属性(或类似).但我正在使用Docker,并希望避免编辑sonar.properties.
使用Docker Compose,我得到以下内容,就像其他命令行参数的魅力一样:
services:
sonarqube:
image: sonarqube:5.4
[...]
entrypoint:
- ./bin/run.sh
- -Dsonar.log.level=INFO
- -Dsonar.web.context=/sonarqube
Run Code Online (Sandbox Code Playgroud)
但似乎忽略了-Dsonar.web.context=/sonarqube:(有没有办法让SonarQube传递不同的上下文路径?
附加信息:这是相应的run.sh文件.
我正在使用sonarqube,我有点搞乱了声纳方式内的规则.有没有办法像往常一样把它放回去?就像更新java插件一样.因为我在sonarqube网站上的默认"声纳方式"配置文件中找不到规则列表.
谢谢.
启动声纳服务器时遇到 Java 进程启动器错误。请注意,我们使用了 Sonarqube-4.5.7、sonarqube-5.0.1、Sonarqube 5.6 和 JDK 7,8 组合。但仍然没有运气
以下是日志:
2016.06.20 18:31:24 INFO app[o.s.p.m.JavaProcessLauncher] Launch process[search]: C:\Program Files\Java\jre7\bin\java -Djava.awt.headless=true -Xmx1G -Xms256m -Xss256k -Djava.net.preferIPv4Stack=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -Djava.io.tmpdir=C:\Users\swmuthuk\Documents\sonarqube-5.0.1\temp -cp ./lib/common/*;./lib/search/* org.sonar.search.SearchServer C:\Users\swmuthuk\AppData\Local\Temp\sq-process2908084003470791693properties
2016.06.20 18:31:25 INFO sea[o.s.p.ProcessEntryPoint] Starting search
2016.06.20 18:31:25 INFO sea[o.s.s.SearchServer] Starting Elasticsearch[sonarqube] on port 9001
2016.06.20 18:31:25 INFO sea[o.elasticsearch.node] [sonar-1466427684530] version[1.1.2], pid[4912], build[e511f7b/2014-05-22T12:27:39Z]
2016.06.20 18:31:25 INFO sea[o.elasticsearch.node] [sonar-1466427684530] initializing ...
2016.06.20 18:31:25 INFO sea[o.e.plugins] [sonar-1466427684530] loaded [], sites []
2016.06.20 18:31:27 INFO sea[o.elasticsearch.node] [sonar-1466427684530] initialized
2016.06.20 18:31:27 …Run Code Online (Sandbox Code Playgroud) 我有一台运行多个不同服务器的机器,它位于中欧的特定时区.
我需要在UTC时间运行SonarQube(4.5.7).
我取消注释以下行web/WEB-INF/config/environment.rb并重新启动SonarQube但服务器仍然在"系统信息"页面上显示原始时区.
config.time_zone = 'UTC'
这应该足以改变SonarQube的时区吗?因为那并没有真正起作用.
有没有办法user.timezone通过编辑wrapper.conf文件将属性传递给JVM ?看起来它可以工作,但它看起来不像我应该触摸该文件.
谢谢.
我正在使用SonarQube 6.1,我正在使用Symfony 2.8项目.
当我使用声纳扫描仪运行分析时,我得到一个分析成功,但结果在我的日志中失败:
Error Details
org.sonar.server.computation.task.projectanalysis.component.VisitException: Visit of Component {key=ThisIsMyFuckingProjectKeyFor:XXXXXX:src/AdminBundle/AdminBundle.php,type=FILE} failed
at org.sonar.server.computation.task.projectanalysis.component.VisitException.rethrowOrWrap(VisitException.java:44)
at org.sonar.server.computation.task.projectanalysis.component.VisitorsCrawler.visit(VisitorsCrawler.java:74)
at org.sonar.server.computation.task.projectanalysis.component.VisitorsCrawler.visitChildren(VisitorsCrawler.java:110)
at org.sonar.server.computation.task.projectanalysis.component.VisitorsCrawler.visitImpl(VisitorsCrawler.java:97)
at org.sonar.server.computation.task.projectanalysis.component.VisitorsCrawler.visit(VisitorsCrawler.java:72)
at org.sonar.server.computation.task.projectanalysis.component.VisitorsCrawler.visitChildren(VisitorsCrawler.java:110)
at org.sonar.server.computation.task.projectanalysis.component.VisitorsCrawler.visitImpl(VisitorsCrawler.java:97)
at org.sonar.server.computation.task.projectanalysis.component.VisitorsCrawler.visit(VisitorsCrawler.java:72)
at org.sonar.server.computation.task.projectanalysis.step.ExecuteVisitorsStep.execute(ExecuteVisitorsStep.java:51)
at org.sonar.server.computation.task.step.ComputationStepExecutor.executeSteps(ComputationStepExecutor.java:64)
at org.sonar.server.computation.task.step.ComputationStepExecutor.execute(ComputationStepExecutor.java:52)
at org.sonar.server.computation.task.projectanalysis.taskprocessor.ReportTaskProcessor.process(ReportTaskProcessor.java:75)
at org.sonar.server.computation.taskprocessor.CeWorkerCallableImpl.executeTask(CeWorkerCallableImpl.java:84)
at org.sonar.server.computation.taskprocessor.CeWorkerCallableImpl.call(CeWorkerCallableImpl.java:57)
at org.sonar.server.computation.taskprocessor.CeWorkerCallableImpl.call(CeWorkerCallableImpl.java:35)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: The manDays for language php is not a valid long number
at org.sonar.server.computation.task.projectanalysis.qualitymodel.RatingSettings.getDevCost(RatingSettings.java:87)
at org.sonar.server.computation.task.projectanalysis.qualitymodel.QualityModelMeasuresVisitor.computeDevelopmentCost(QualityModelMeasuresVisitor.java:126)
at org.sonar.server.computation.task.projectanalysis.qualitymodel.QualityModelMeasuresVisitor.visitFile(QualityModelMeasuresVisitor.java:119)
at org.sonar.server.computation.task.projectanalysis.component.PathAwareVisitorWrapper.visitFile(PathAwareVisitorWrapper.java:66) …Run Code Online (Sandbox Code Playgroud) 我们正在运行安装程序以将 SonarQube 更新到版本 7.0 - 我们遇到数据库故障(请参阅下面的堆栈跟踪)。
知道我们如何才能克服这个问题吗?
2018.02.07 07:16:47 INFO web[][o.s.s.p.d.m.DatabaseMigrationImpl] Starting DB Migration and container restart
2018.02.07 07:16:47 INFO web[][DbMigrations] Executing DB migrations...
2018.02.07 07:16:47 INFO web[][DbMigrations] #1907 'Populate table live_measures'...
2018.02.07 07:16:48 ERROR web[][DbMigrations] #1907 'Populate table live_measures': failure | time=788ms
2018.02.07 07:16:48 ERROR web[][DbMigrations] Executed DB migrations: failure | time=790ms
2018.02.07 07:16:48 ERROR web[][o.s.s.p.d.m.DatabaseMigrationImpl] DB migration failed | time=902ms
2018.02.07 07:16:48 ERROR web[][o.s.s.p.d.m.DatabaseMigrationImpl] DB migration ended with an exception
org.sonar.server.platform.db.migration.step.MigrationStepExecutionException: Execution of migration step #1907 'Populate table …Run Code Online (Sandbox Code Playgroud) 我想下载SonarQube Eclipse插件并手动在Eclipse IDE上安装。(我知道可以通过Eclipse IDE的MarketPlace下载它,但是我需要手动进行。)有人知道在哪里可以实现吗?有任何官方网站吗?
我正在开发一个自定义的SonarQube插件来创建项目特定的规则集.已编写自定义规则,并且使用JUnit成功执行规则.以下是自定义声纳规则.
@Rule(key = StringConstants.AVOID_SOCKETS_API_KEY)
public class AvoidSocketsApiRule extends IssuableSubscriptionVisitor {
@Override
public List<Tree.Kind> nodesToVisit() {
return ImmutableList.of(Tree.Kind.VARIABLE);
}
@Override
public void visitNode(final Tree tree) {
final VariableTree variableTree = (VariableTree) tree;
final Type type = variableTree.symbol().type();
if (type.is(StringConstants.SOCKET_CHANNEL) || type.is(StringConstants.SERVER_SOCKET_CHANNEL)
|| type.is(StringConstants.ASYNC_SOCKET_CHANNEL) || type.is(StringConstants.ASYNC_SERVER_SOCKET_CHANNEL)) {
this.reportIssue(variableTree.simpleName(), StringConstants.AVOID_SOCKETS_API_MESSAGE);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我将应用程序打包到声纳插件并部署到sonarqube时,它给我一个非法的状态异常.我能够使用Junit复制该问题.
@Test
public void test() {
final CustomRulesDefinition rulesDefinition = new CustomRulesDefinition();
final RulesDefinition.Context context = new RulesDefinition.Context();
rulesDefinition.define(context);
final RulesDefinition.Repository repository = context.repository(StringConstants.REPOSITORY_KEY);
assertThat(repository.name()).isEqualTo(StringConstants.REPOSITORY_NAME);
assertThat(repository.language()).isEqualTo(StringConstants.LANG);
assertThat(repository.rules()).hasSize(RulesList.getChecks().size());
this.assertAllRuleParametersHaveDescription(repository);
}
private …Run Code Online (Sandbox Code Playgroud)