1. 下载sonarqube-6.7.6源码:https://github.com/SonarSource/sonarqube/tree/6.7.6
2. 通过命令mvn clean install -DskipTests -Dlicense.skip=true解决license问题,并打包,在D:\coding\sonarqube-6.7.6\sonar-application\target目录下生成sonarqube-6.7.6.zip。
3. 将sonarqube-6.7.6.zip解压,并将文件复制到D:\coding\sonarqube-6.7.6\sonar-application下,修改conf/sonar.properties中的配置;
4. 在sonar-application项目中,启动org.sonar.application.App下的main()方法,完成代码级别的sonar启动。
启动日志:
2019.01.08 15:41:07 INFO app[][o.s.a.AppFileSystem] Cleaning or creating temp directory D:\coding\sonarqube-6.7.6\sonar-application\temp
2019.01.08 15:41:07 INFO app[][o.s.a.es.EsSettings] Elasticsearch listening on /127.0.0.1:9001
2019.01.08 15:41:08 INFO app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='es', ipcIndex=1, logFilenamePrefix=es]] from [D:\coding\sonarqube-6.7.6\sonar-application\elasticsearch]: C:\Program Files\Java\jdk1.8.0_191\jre\bin\java -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -server -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -Djdk.io.permissionsUseCanonicalPath=true -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dlog4j.skipJansi=true -Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError -Delasticsearch -Des.path.home=D:\coding\sonarqube-6.7.6\sonar-application\elasticsearch -cp lib/* org.elasticsearch.bootstrap.Elasticsearch -Epath.conf=D:\coding\sonarqube-6.7.6\sonar-application\temp\conf\es
2019.01.08 15:41:08 INFO app[][o.s.a.SchedulerImpl] Waiting for Elasticsearch to be up and running
2019.01.08 15:41:10 INFO app[][o.e.p.PluginsService] no modules loaded
2019.01.08 15:41:10 INFO app[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.transport.Netty4Plugin]
2019.01.08 15:41:27 INFO app[][o.s.a.SchedulerImpl] Process[es] is up
2019.01.08 15:41:27 INFO app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='web', ipcIndex=2, logFilenamePrefix=web]] from [D:\coding\sonarqube-6.7.6\sonar-application]: C:\Program Files\Java\jdk1.8.0_191\jre\bin\java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=D:\coding\sonarqube-6.7.6\sonar-application\temp -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -cp ./lib/common/*;./lib/server/*;D:\coding\sonarqube-6.7.6\sonar-application\lib\jdbc\h2\h2-1.3.176.jar org.sonar.server.app.WebServer D:\coding\sonarqube-6.7.6\sonar-application\temp\sq-process276362758647946142properties
2019.01.08 15:41:59 INFO app[][o.s.a.SchedulerImpl] Process[web] is up
2019.01.08 15:41:59 INFO app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='ce', ipcIndex=3, logFilenamePrefix=ce]] from [D:\coding\sonarqube-6.7.6\sonar-application]: C:\Program Files\Java\jdk1.8.0_191\jre\bin\java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=D:\coding\sonarqube-6.7.6\sonar-application\temp -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -cp ./lib/common/*;./lib/server/*;./lib/ce/*;D:\coding\sonarqube-6.7.6\sonar-application\lib\jdbc\h2\h2-1.3.176.jar org.sonar.ce.app.CeServer D:\coding\sonarqube-6.7.6\sonar-application\temp\sq-process8989645072878585328properties
2019.01.08 15:42:12 INFO app[][o.s.a.SchedulerImpl] Process[ce] is up
2019.01.08 15:42:12 INFO app[][o.s.a.SchedulerImpl] SonarQube is up
启动问题可以通过D:\coding\sonarqube-6.7.6\sonar-application\logs查看web.log发现,并解决。
从上述日志看出, SonarQube的启动顺序为:
1. 创建临时目录${homeDir}/temp,即:D:\coding\sonarqube-6.7.6\sonar-application\temp;
2. 启动es进程(Elasticsearch),默认为本机的9001端口,即:Elasticsearch listening on /127.0.0.1:9001,可以通过conf/sonar.properties配置。加载插件org.elasticsearch.transport.Netty4Plugin,并等待进程启动;
3. 启动web进程,即org.sonar.server.app.WebServer,启动该进程需要依赖数据库,可以选择MySQL或者H2等数据库,通过conf/sonar.properties配置。等待web进程启动。
4. 启动ce进程,即org.sonar.ce.app.CeServer,并等待CeServer进程启动。
5. 上述es, web, ce进程启动后,即完成了SonarQube的启动。