SonarQube扫描程序执行期间出错:java.lang.IllegalArgumentException:79不是指针的有效行偏移量

在C#项目上运行SonarQube时出现此错误消息:

... INFO: ------------------------------------------------------------------------ INFO: EXECUTION FAILURE INFO: ------------------------------------------------------------------------ INFO: Total time: 30.377s INFO: Final Memory: 58M/828M INFO: ------------------------------------------------------------------------ ERROR: Error during SonarQube Scanner execution java.lang.IllegalArgumentException: 79 is not a valid line offset for pointer. File [moduleKey=dot-net_SCHLUMBERGER-Helios, relative=wtap_nextgen/Src/Component/WebSolution/MMS/wwwroot/css/bootwatch-paper.css, basedir=/builds/dot-net/SCHLUMBERGER-Helios] has 78 character(s) at line 1 at org.sonar.api.internal.google.common.base.Preconditions.checkArgument(Preconditions.java:148) at org.sonar.api.batch.fs.internal.DefaultInputFile.checkValid(DefaultInputFile.java:218) at org.sonar.api.batch.fs.internal.DefaultInputFile.newPointer(DefaultInputFile.java:209) at org.sonar.api.batch.fs.internal.DefaultInputFile.newRange(DefaultInputFile.java:240) at org.sonar.css.issue.PreciseIssue.save(PreciseIssue.java:119) at org.sonar.plugins.css.CssSquidSensor.saveIssues(CssSquidSensor.java:121) at org.sonar.plugins.css.CssSquidSensor.save(CssSquidSensor.java:105) at org.sonar.plugins.css.CssSquidSensor.analyse(CssSquidSensor.java:89) at org.sonar.batch.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:58) at org.sonar.batch.phases.SensorsExecutor.execute(SensorsExecutor.java:50) at org.sonar.batch.phases.AbstractPhaseExecutor.execute(AbstractPhaseExecutor.java:83) at org.sonar.batch.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:192) at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:142) at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:127) at org.sonar.batch.scan.ProjectScanContainer.scan(ProjectScanContainer.java:241) at org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:236) at org.sonar.batch.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:226) at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:142) at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:127) at org.sonar.batch.task.ScanTask.execute(ScanTask.java:47) at org.sonar.batch.task.TaskContainer.doAfterStart(TaskContainer.java:86) at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:142) at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:127) at org.sonar.batch.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:106) at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:119) at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:62) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60) at com.sun.proxy.$Proxy0.execute(Unknown Source) at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:240) at org.sonarsource.scanner.api.EmbeddedScanner.runAnalysis(EmbeddedScanner.java:151) at org.sonarsource.scanner.cli.Main.runAnalysis(Main.java:110) at org.sonarsource.scanner.cli.Main.execute(Main.java:72) at org.sonarsource.scanner.cli.Main.main(Main.java:60) ERROR: Build failed: exit code 1 

有没有人知道这是从哪里来的? 看起来扫描仪正在尝试访问XXX/bootwatch-paper.css第一行的字符79,它只有78个字符。 为什么要尝试阅读第79个字符? 这可能是编码问题吗? 如何解决这个问题?

干杯!

我的一个AssemblyInfo.cs文件遇到了类似的问题。 这绝对是编码。 我在Sublime Text中打开文件并用不同的编码保存它以查看哪些有效。 这是我发现的,虽然它可能与你不同,因为我使用的是C#插件,而你使用的是css插件。

  1. UTF-8 – 成功
  2. 带BOM的UTF-8 – 成功
  3. UTF-16 LE – 成功
  4. UTF-16 LE带BOM – 故障
  5. UTF-16 BE – 成功
  6. UTF-16 BE带BOM – 失败
  7. 西方(Windows 1252) – 成功

可能是文件编码是:带BOM的UTF-8编码,您应该将文件更改为没有BOM的UTF-8编码

 #coding=utf-8 ''' # prerequisite: python2.7 # usage: # python utf8-convert.py -h # python utf8-convert.py -f file_path_you_want_to_convert # reference links: # # http://stackoverflow.com/questions/8898294/convert-utf-8-with-bom-to-utf-8-with-no-bom-in-python # http://stackoverflow.com/questions/3207219/how-to-list-all-files-of-a-directory-in-python ''' import os import codecs import chardet from optparse import OptionParser def utf8_converter(file_path, universal_endline=True): ''' Convert any type of file to UTF-8 without BOM and using universal endline by default. Parameters ---------- file_path : string, file path. universal_endline : boolean (True), by default convert endlines to universal format. ''' # Fix file path file_path = os.path.realpath(os.path.expanduser(file_path)) if not os.path.isfile(file_path): print '[WARN] filepath is not a file: ' + file_path # Read from file file_open = open(file_path) raw = file_open.read() file_open.close() file_encoding = str(chardet.detect(raw)['encoding']) if raw.startswith(codecs.BOM_UTF8): print '[INFO] convert :encoding('+file_encoding+ ") " + file_path else: print '[INFO] skipped :encoding('+file_encoding+") " + file_path return 0 # Decode raw = raw.decode(chardet.detect(raw)['encoding']) # Remove windows end line if universal_endline: raw = raw.replace('\r\n', '\n') # Encode to UTF-8 raw = raw.encode('utf8') # Remove BOM if raw.startswith(codecs.BOM_UTF8): raw = raw.replace(codecs.BOM_UTF8, '', 1) while raw.startswith(codecs.BOM_UTF8): raw = raw.replace(codecs.BOM_UTF8, '', 1) # Write to file file_open = open(file_path, 'w') file_open.write(raw) file_open.close() return 0 if __name__ == "__main__": PARSER = OptionParser() PARSER.add_option("-f", "--file", action="store", type="string", \ dest="filename", help="file you want to convert") OPTIONS, ARGS = PARSER.parse_args() if OPTIONS.filename: utf8_converter(OPTIONS.filename)