我刚刚部署了一个基于jenkins + sonarqube的CI系统。一旦Jenkins Sonnarscanner开始他的管道部分,我可以看到很多消息,如以下:
WARN: Invalid character encountered in file /var/jenkins_home/workspace/Pipeline Test/code/..../CodigoSitioDAO.java at line 3 for encoding UTF-8. Please fix file content or configure the encoding to be used using property 'sonar.sourceEncoding'.
嗯,我的声纳呼叫线是:
sh "${scannerHome}/bin/sonar-scanner
-Dsonar.sourceEnconding=UTF-8
-Dsonar.projectKey=My_Project
-Dsonar.sources=.
-Dsonar.java.binaries=.
-Dsonar.nodejs.executable=.
-Dsonar.login=c9bb378b2380af844c7465424933b942d10f5d18
-Dsonar.host.url=http://sonarqube:9000"
}
因此,一旦我检查了提到的文件,我可以在第3行看到的是我认为与警告消息无关的东西:import java.sql.Connection;
也配置了-Dsonar.sourceEncoding=UTF-8
,我不得不说我不知道发生了什么。
在我看来,文件不是UTF-8格式的。很有可能(特别是如果您使用Windows编辑器)文件以特定于平台的编码保存,其内容对UTF-8没有意义。考虑以下内容:
Clase de implementación del DAO de los códigos
相同的内容已保存为ANSI和UTF-8(保存时显式选择)。现在如果你比较字节内容,它们是不一样的:
$ hexdump -C test-ansi.txt
00000000 43 6c 61 73 65 20 64 65 20 69 6d 70 6c 65 6d 65 |Clase de impleme|
00000010 6e 74 61 63 69 f3 6e 20 64 65 6c 20 44 41 4f 20 |ntaci.n del DAO |
00000020 64 65 20 6c 6f 73 20 63 f3 64 69 67 6f 73 |de los c.digos|
0000002e
$ hexdump -C test-utf8.txt
00000000 43 6c 61 73 65 20 64 65 20 69 6d 70 6c 65 6d 65 |Clase de impleme|
00000010 6e 74 61 63 69 c3 b3 6e 20 64 65 6c 20 44 41 4f |ntaci..n del DAO|
00000020 20 64 65 20 6c 6f 73 20 63 c3 b3 64 69 67 6f 73 | de los c..digos|
00000030
注意,相同的字符ó
在ANSI中被编码为f3
,在UTF-8中被编码为c3 b3
。我相信这就是你的消息是关于:声明的编码是UTF-8(可能是默认的),但字符内容f3
在这种编码下无效。请用十六进制编辑器再次检查您的编码
边注:如果您直接从文件中复制并粘贴您的行,请注意Stack Overflow也无法解码它,确认它不是utf -8编码的。