You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

build.gradle 25KB

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
4 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
3 years ago
6 years ago
4 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
SONAR-12686 upgrade es client to 7.9.3 and move to HTTP - add should minimum match eq 1 to user index queries ES 7.X changed behaviour in case filter query with bool it defaults to '0' https://www.elastic.co/guide/en/elasticsearch/reference/7.x/breaking-changes-7.0.html#_the_filter_context_has_been_removed - fix issue index routing param ES 7.X helped discover this bug as new setting has been auto configured which is 'index.number_of_routing_shards'. This has changed how documents are distributed across shards depending on how many shards the index has. Without that change issues docs has been incorrectly routed to the same shard hash as projects and it worked no matter what routing key you used projectUuid or auth_projectUuid. - update ngram and edge_ngram names to match with es 7.x nGram and edgeNgram has been deprecated in favour of ngram and edge_ngram https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes-7.0.html#deprecated-ngram-edgengram-token-filter-cannot-be-used - remove `_all : enabled` usage from UT This field was already deprecated in 6.X, now it has been removed. https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes-7.0.html#all-meta-field-removed - add Elasticsearch High Level REST client dependency - use sonar.search.port for ES HTTP - main process use ES Rest client to check ES status - sonar.cluster.search.hosts has HTTP ports on APP nodes also sonar.search.port and sonar.search.host MUST be configured on each Search node with the host and HTTP port of the current node - use Elasticsearch high level rest client - use in EsTester - use as primary es client - use indices api to get all indices name instead of cluster api - use cluster health api to check cluster state - support raw requests for 'nodes/_stats' and '_cluster/stats' - support raw requests for 'indices/_stats' - leave netty4plugin as testCompile dependency it is used in UTs - all ES non-test calls go through EsClient class - add rest client ES profiling
4 years ago
6 years ago
SONAR-12686 upgrade es client to 7.9.3 and move to HTTP - add should minimum match eq 1 to user index queries ES 7.X changed behaviour in case filter query with bool it defaults to '0' https://www.elastic.co/guide/en/elasticsearch/reference/7.x/breaking-changes-7.0.html#_the_filter_context_has_been_removed - fix issue index routing param ES 7.X helped discover this bug as new setting has been auto configured which is 'index.number_of_routing_shards'. This has changed how documents are distributed across shards depending on how many shards the index has. Without that change issues docs has been incorrectly routed to the same shard hash as projects and it worked no matter what routing key you used projectUuid or auth_projectUuid. - update ngram and edge_ngram names to match with es 7.x nGram and edgeNgram has been deprecated in favour of ngram and edge_ngram https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes-7.0.html#deprecated-ngram-edgengram-token-filter-cannot-be-used - remove `_all : enabled` usage from UT This field was already deprecated in 6.X, now it has been removed. https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes-7.0.html#all-meta-field-removed - add Elasticsearch High Level REST client dependency - use sonar.search.port for ES HTTP - main process use ES Rest client to check ES status - sonar.cluster.search.hosts has HTTP ports on APP nodes also sonar.search.port and sonar.search.host MUST be configured on each Search node with the host and HTTP port of the current node - use Elasticsearch high level rest client - use in EsTester - use as primary es client - use indices api to get all indices name instead of cluster api - use cluster health api to check cluster state - support raw requests for 'nodes/_stats' and '_cluster/stats' - support raw requests for 'indices/_stats' - leave netty4plugin as testCompile dependency it is used in UTs - all ES non-test calls go through EsClient class - add rest client ES profiling
4 years ago
4 years ago
SONAR-12686 upgrade es client to 7.9.3 and move to HTTP - add should minimum match eq 1 to user index queries ES 7.X changed behaviour in case filter query with bool it defaults to '0' https://www.elastic.co/guide/en/elasticsearch/reference/7.x/breaking-changes-7.0.html#_the_filter_context_has_been_removed - fix issue index routing param ES 7.X helped discover this bug as new setting has been auto configured which is 'index.number_of_routing_shards'. This has changed how documents are distributed across shards depending on how many shards the index has. Without that change issues docs has been incorrectly routed to the same shard hash as projects and it worked no matter what routing key you used projectUuid or auth_projectUuid. - update ngram and edge_ngram names to match with es 7.x nGram and edgeNgram has been deprecated in favour of ngram and edge_ngram https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes-7.0.html#deprecated-ngram-edgengram-token-filter-cannot-be-used - remove `_all : enabled` usage from UT This field was already deprecated in 6.X, now it has been removed. https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes-7.0.html#all-meta-field-removed - add Elasticsearch High Level REST client dependency - use sonar.search.port for ES HTTP - main process use ES Rest client to check ES status - sonar.cluster.search.hosts has HTTP ports on APP nodes also sonar.search.port and sonar.search.host MUST be configured on each Search node with the host and HTTP port of the current node - use Elasticsearch high level rest client - use in EsTester - use as primary es client - use indices api to get all indices name instead of cluster api - use cluster health api to check cluster state - support raw requests for 'nodes/_stats' and '_cluster/stats' - support raw requests for 'indices/_stats' - leave netty4plugin as testCompile dependency it is used in UTs - all ES non-test calls go through EsClient class - add rest client ES profiling
4 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613
  1. plugins {
  2. // Ordered alphabeticly
  3. id 'com.github.ben-manes.versions' version '0.33.0'
  4. id 'com.github.hierynomus.license' version '0.15.0'
  5. id 'com.github.johnrengelman.shadow' version '5.2.0' apply false
  6. id 'com.google.protobuf' version '0.8.12' apply false
  7. id 'com.jfrog.artifactory' version '4.15.1'
  8. id 'com.github.node-gradle.node' version '1.5.3' apply false
  9. id 'io.spring.dependency-management' version '1.0.10.RELEASE'
  10. id "com.asarkar.gradle.build-time-tracker" version "2.0.4" apply false
  11. id 'org.owasp.dependencycheck' version '6.0.1'
  12. id 'org.sonarqube' version '2.8'
  13. }
  14. // display a summary of task durations at the end of the build
  15. if (project.hasProperty('time-tracker')) {
  16. apply plugin: 'com.asarkar.gradle.build-time-tracker'
  17. buildTimeTracker {
  18. sort = true
  19. maxWidth = 80
  20. minTaskDuration = Duration.ofSeconds(1)
  21. }
  22. }
  23. if (!JavaVersion.current().java11Compatible) {
  24. throw new GradleException("JDK 11+ is required to perform this build. It's currently " + System.getProperty("java.home") + ".")
  25. }
  26. apply plugin: 'org.owasp.dependencycheck'
  27. dependencyCheck {
  28. analyzers {
  29. assemblyEnabled = false
  30. autoconfEnabled = false
  31. bundleAuditEnabled = false
  32. cmakeEnabled = false
  33. cocoapodsEnabled = false
  34. composerEnabled = false
  35. cocoapodsEnabled = false
  36. golangDepEnabled = false
  37. golangModEnabled = false
  38. nodeAudit {
  39. skipDevDependencies = true
  40. }
  41. nuspecEnabled = false
  42. nugetconfEnabled = false
  43. rubygemsEnabled = false
  44. swiftEnabled = false
  45. }
  46. format = 'ALL'
  47. junitFailOnCVSS = 0
  48. failBuildOnCVSS = 0
  49. suppressionFiles = ["${project.rootDir}/private/owasp/suppressions.xml", "${project.rootDir}/private/owasp/vulnerabilities.xml"]
  50. skipProjects = project.subprojects
  51. .findAll {it.name.contains('testing') ||
  52. it.name.startsWith('it-') ||
  53. it.name.contains('-test') ||
  54. it.name == 'sonar-ws-generator'}
  55. .collect { it.path }
  56. }
  57. allprojects {
  58. apply plugin: 'com.jfrog.artifactory'
  59. apply plugin: 'maven-publish'
  60. ext.versionInSources = version
  61. ext.buildNumber = System.getProperty("buildNumber")
  62. // when no buildNumber is provided, then project version must end with '-SNAPSHOT'
  63. if (ext.buildNumber == null) {
  64. version = "${version}-SNAPSHOT".toString()
  65. ext.versionWithoutBuildNumber = version
  66. } else {
  67. ext.versionWithoutBuildNumber = version
  68. version = (version.toString().count('.') == 1 ? "${version}.0.${ext.buildNumber}" : "${version}.${ext.buildNumber}").toString()
  69. }
  70. ext {
  71. release = project.hasProperty('release') && project.getProperty('release')
  72. official = project.hasProperty('official') && project.getProperty('official')
  73. }
  74. repositories {
  75. def repository = project.hasProperty('qa') ? 'sonarsource-qa' : 'sonarsource'
  76. maven {
  77. // The environment variables ARTIFACTORY_PRIVATE_USERNAME and ARTIFACTORY_PRIVATE_PASSWORD are used on QA env (Jenkins)
  78. // On local box, please add artifactoryUsername and artifactoryPassword to ~/.gradle/gradle.properties
  79. def artifactoryUsername = System.env.'ARTIFACTORY_PRIVATE_USERNAME' ?: (project.hasProperty('artifactoryUsername') ? project.getProperty('artifactoryUsername') : '')
  80. def artifactoryPassword = System.env.'ARTIFACTORY_PRIVATE_PASSWORD' ?: (project.hasProperty('artifactoryPassword') ? project.getProperty('artifactoryPassword') : '')
  81. if (artifactoryUsername && artifactoryPassword) {
  82. credentials {
  83. username artifactoryUsername
  84. password artifactoryPassword
  85. }
  86. } else {
  87. // Workaround for artifactory
  88. // https://www.jfrog.com/jira/browse/RTFACT-13797
  89. repository = 'public'
  90. }
  91. url "https://repox.jfrog.io/repox/${repository}"
  92. }
  93. }
  94. task allDependencies {
  95. dependsOn 'dependencies'
  96. }
  97. artifactory {
  98. clientConfig.setIncludeEnvVars(true)
  99. clientConfig.setEnvVarsExcludePatterns('*password*,*PASSWORD*,*secret*,*MAVEN_CMD_LINE_ARGS*,sun.java.command,*token*,*TOKEN*,*LOGIN*,*login*,*key*,*KEY*')
  100. contextUrl = System.getenv('ARTIFACTORY_URL')
  101. publish {
  102. repository {
  103. repoKey = System.getenv('ARTIFACTORY_DEPLOY_REPO')
  104. username = System.getenv('ARTIFACTORY_DEPLOY_USERNAME') ?: project.properties.artifactoryUsername
  105. password = System.getenv('ARTIFACTORY_DEPLOY_PASSWORD') ?: project.properties.artifactoryPaswword
  106. }
  107. defaults {
  108. properties = [
  109. 'build.name': 'sonar-enterprise',
  110. 'build.number': System.getenv('BUILD_NUMBER'),
  111. 'pr.branch.target': System.getenv('GITHUB_BASE_BRANCH'),
  112. 'pr.number': System.getenv('PULL_REQUEST'),
  113. 'vcs.branch': System.getenv('GITHUB_BRANCH'),
  114. 'vcs.revision': System.getenv('GIT_SHA1'),
  115. 'version': version
  116. ]
  117. publications('mavenJava')
  118. publishPom = true
  119. publishIvy = false
  120. }
  121. }
  122. clientConfig.info.setBuildName('sonar-enterprise')
  123. clientConfig.info.setBuildNumber(System.getenv('BUILD_NUMBER'))
  124. // Define the artifacts to be deployed to https://binaries.sonarsource.com on releases
  125. clientConfig.info.addEnvironmentProperty('ARTIFACTS_TO_PUBLISH',
  126. "${project.group}:sonar-application:zip," +
  127. "com.sonarsource.sonarqube:sonarqube-developer:zip," +
  128. "com.sonarsource.sonarqube:sonarqube-datacenter:zip," +
  129. "com.sonarsource.sonarqube:sonarqube-enterprise:zip")
  130. // The name of this variable is important because it's used by the delivery process when extracting version from Artifactory build info.
  131. clientConfig.info.addEnvironmentProperty('PROJECT_VERSION', "${version}")
  132. }
  133. }
  134. apply plugin: 'org.sonarqube'
  135. sonarqube {
  136. properties {
  137. property 'sonar.projectName', projectTitle
  138. property 'sonar.projectVersion', "${versionInSources}-SNAPSHOT"
  139. property 'sonar.buildString', version
  140. }
  141. }
  142. subprojects {
  143. apply plugin: 'com.github.hierynomus.license'
  144. apply plugin: 'io.spring.dependency-management'
  145. apply plugin: 'jacoco'
  146. apply plugin: 'java'
  147. apply plugin: 'idea'
  148. sourceCompatibility = 1.8
  149. targetCompatibility = 1.8
  150. // do not deploy to Artifactory by default
  151. artifactoryPublish.skip = true
  152. def testFixtureSrc = 'src/testFixtures'
  153. if (file(testFixtureSrc).exists()) {
  154. apply plugin: 'java-test-fixtures'
  155. }
  156. ext {
  157. protobufVersion = '3.11.4'
  158. }
  159. sonarqube {
  160. properties {
  161. property 'sonar.moduleKey', project.group + ':' + project.name
  162. }
  163. }
  164. // Central place for definition dependency versions and exclusions.
  165. dependencyManagement {
  166. dependencies {
  167. // bundled plugin list -- keep it alphabetically ordered
  168. // comment is used by the Plugin Update bot to identify bundled plugins to check updates for
  169. //
  170. // !!! do not use variable for version number, bot in charge of updating plugin does not support them !!
  171. //
  172. // comment format is: // bundled_plugin:[updateCenterKey]:[githubRepository]
  173. // updateCenterKey: Update Center Plugin key, last release will be resolved from repox when not provided
  174. // githubRepository: name of github repository of the plugin in the SonarSource organisation
  175. dependency 'com.sonarsource.abap:sonar-abap-plugin:3.9.0.2739' // bundled_plugin:abap:sonar-abap
  176. dependency 'com.sonarsource.cobol:sonar-cobol-plugin:4.6.0.4639' // bundled_plugin:cobol:sonar-cobol
  177. dependency 'com.sonarsource.cpp:sonar-cfamily-plugin:6.15.0.25047' // bundled_plugin:cpp:sonar-cpp
  178. dependency 'com.sonarsource.pli:sonar-pli-plugin:1.10.0.1880' // bundled_plugin:pli:sonar-pli
  179. dependency 'com.sonarsource.plsql:sonar-plsql-plugin:3.5.0.3437' // bundled_plugin:plsql:sonar-plsql
  180. dependency 'com.sonarsource.plugins.vb:sonar-vb-plugin:2.7.0.2497' // bundled_plugin:vb:sonar-vb
  181. dependency 'com.sonarsource.rpg:sonar-rpg-plugin:2.5.0.2338' // bundled_plugin:rpg:sonar-rpg
  182. dependency 'com.sonarsource.security:sonar-security-csharp-frontend-plugin:8.6.0.6438' // bundled_plugin::sonar-security
  183. dependency 'com.sonarsource.security:sonar-security-java-frontend-plugin:8.6.0.6438' // bundled_plugin::sonar-security
  184. dependency 'com.sonarsource.security:sonar-security-php-frontend-plugin:8.6.0.6438' // bundled_plugin::sonar-security
  185. dependency 'com.sonarsource.security:sonar-security-plugin:8.6.0.6438' // bundled_plugin::sonar-security
  186. dependency 'com.sonarsource.security:sonar-security-python-frontend-plugin:8.6.0.6438' // bundled_plugin::sonar-security
  187. dependency 'com.sonarsource.security:sonar-security-js-frontend-plugin:8.6.0.6438' // bundled_plugin::sonar-security
  188. dependency 'com.sonarsource.slang:sonar-apex-plugin:1.8.1.1804' // bundled_plugin:sonarapex:slang-enterprise
  189. dependency 'com.sonarsource.swift:sonar-swift-plugin:4.3.0.4687' // bundled_plugin:swift:sonar-swift
  190. dependency 'com.sonarsource.tsql:sonar-tsql-plugin:1.5.0.3958' // bundled_plugin:tsql:sonar-tsql
  191. dependency 'org.sonarsource.css:sonar-css-plugin:1.3.1.1642' // bundled_plugin:cssfamily:sonar-css
  192. dependency 'org.sonarsource.dotnet:sonar-csharp-plugin:8.15.0.24505' // bundled_plugin:csharp:sonar-dotnet
  193. dependency 'org.sonarsource.dotnet:sonar-vbnet-plugin:8.15.0.24505' // bundled_plugin:vbnet:sonar-dotnet
  194. dependency 'org.sonarsource.flex:sonar-flex-plugin:2.6.0.2294' // bundled_plugin:flex:sonar-flex
  195. dependency 'org.sonarsource.html:sonar-html-plugin:3.3.0.2534' // bundled_plugin:web:sonar-html
  196. dependency 'org.sonarsource.jacoco:sonar-jacoco-plugin:1.1.0.898' // bundled_plugin:jacoco:sonar-jacoco
  197. dependency 'org.sonarsource.java:sonar-java-plugin:6.9.0.23563' // bundled_plugin:java:sonar-java
  198. dependency 'org.sonarsource.javascript:sonar-javascript-plugin:7.0.1.14561' // bundled_plugin:javascript:SonarJS
  199. dependency 'org.sonarsource.php:sonar-php-plugin:3.13.0.6849' // bundled_plugin:php:sonar-php
  200. dependency 'org.sonarsource.python:sonar-python-plugin:3.1.0.7619' // bundled_plugin:python:sonar-python
  201. dependency 'org.sonarsource.slang:sonar-go-plugin:1.8.1.1804' // bundled_plugin:go:slang-enterprise
  202. dependency 'org.sonarsource.slang:sonar-kotlin-plugin:1.8.1.1804' // bundled_plugin:kotlin:slang-enterprise
  203. dependency 'org.sonarsource.slang:sonar-ruby-plugin:1.8.1.1804' // bundled_plugin:ruby:slang-enterprise
  204. dependency 'org.sonarsource.slang:sonar-scala-plugin:1.8.1.1804' // bundled_plugin:sonarscala:slang-enterprise
  205. dependency 'org.sonarsource.xml:sonar-xml-plugin:2.0.1.2020' // bundled_plugin:xml:sonar-xml
  206. // please keep this list alphabetically ordered
  207. dependencySet(group: 'ch.qos.logback', version: '1.2.3') {
  208. entry 'logback-access'
  209. entry 'logback-classic'
  210. entry 'logback-core'
  211. }
  212. dependency('commons-beanutils:commons-beanutils:1.8.3') {
  213. exclude 'commons-logging:commons-logging'
  214. }
  215. dependency 'commons-codec:commons-codec:1.14'
  216. dependency 'commons-dbutils:commons-dbutils:1.7'
  217. dependency 'commons-io:commons-io:2.8.0'
  218. dependency 'commons-lang:commons-lang:2.6'
  219. imports { mavenBom 'com.fasterxml.jackson:jackson-bom:2.10.4' }
  220. dependencySet(group: 'com.fasterxml.jackson.dataformat', version: '2.10.4') {
  221. entry 'jackson-dataformat-cbor'
  222. entry 'jackson-dataformat-smile'
  223. entry 'jackson-dataformat-yaml'
  224. }
  225. dependency 'com.eclipsesource.minimal-json:minimal-json:0.9.5'
  226. dependencySet(group: 'com.github.scribejava', version: '6.9.0') {
  227. entry 'scribejava-apis'
  228. entry 'scribejava-core'
  229. }
  230. // This project is no longer maintained and was forked
  231. // by https://github.com/java-diff-utils/java-diff-utils
  232. // (io.github.java-diff-utils:java-diff-utils).
  233. dependency 'com.googlecode.java-diff-utils:diffutils:1.2'
  234. dependency('com.googlecode.json-simple:json-simple:1.1.1') {
  235. exclude 'junit:junit'
  236. }
  237. dependency 'com.google.code.findbugs:jsr305:3.0.2'
  238. dependency 'com.google.code.gson:gson:2.8.6'
  239. dependency('com.google.guava:guava:28.2-jre') {
  240. exclude 'com.google.errorprone:error_prone_annotations'
  241. exclude 'com.google.guava:listenablefuture'
  242. exclude 'com.google.j2objc:j2objc-annotations'
  243. exclude 'org.checkerframework:checker-qual'
  244. exclude 'org.codehaus.mojo:animal-sniffer-annotations'
  245. }
  246. dependency "com.google.protobuf:protobuf-java:${protobufVersion}"
  247. // Do not upgrade H2 to 1.4.200 because of instability: https://github.com/h2database/h2database/issues/2205
  248. dependency 'com.h2database:h2:1.4.199'
  249. dependencySet(group: 'com.hazelcast', version: '3.12.9') {
  250. entry 'hazelcast'
  251. entry 'hazelcast-client'
  252. }
  253. dependency 'com.ibm.icu:icu4j:3.4.4'
  254. dependency 'com.microsoft.sqlserver:mssql-jdbc:7.4.1.jre11'
  255. dependency 'com.oracle.database.jdbc:ojdbc8:19.3.0.0'
  256. dependencySet(group: 'com.squareup.okhttp3', version: '4.9.0') {
  257. entry 'okhttp'
  258. entry 'mockwebserver'
  259. }
  260. dependency 'com.tngtech.java:junit-dataprovider:1.13.1'
  261. dependency 'info.picocli:picocli:3.6.1'
  262. dependencySet(group: 'io.jsonwebtoken', version: '0.11.2') {
  263. entry 'jjwt-api'
  264. entry 'jjwt-impl'
  265. entry 'jjwt-jackson'
  266. }
  267. dependency 'io.netty:netty-all:4.1.48.Final'
  268. dependency 'com.sun.mail:javax.mail:1.5.6'
  269. dependency 'javax.annotation:javax.annotation-api:1.3.2'
  270. dependency 'javax.servlet:javax.servlet-api:3.1.0'
  271. dependency 'javax.xml.bind:jaxb-api:2.3.0'
  272. dependency 'junit:junit:4.13.1'
  273. dependency 'org.junit.jupiter:junit-jupiter-api:5.6.0'
  274. dependency 'org.xmlunit:xmlunit-core:2.6.4'
  275. dependency 'org.xmlunit:xmlunit-matchers:2.6.4'
  276. dependency 'net.jpountz.lz4:lz4:1.3.0'
  277. dependency 'net.lightbody.bmp:littleproxy:1.1.0-beta-bmp-17'
  278. dependency 'org.awaitility:awaitility:4.0.2'
  279. dependency 'org.apache.commons:commons-csv:1.7'
  280. dependency 'org.apache.commons:commons-email:1.5'
  281. dependency 'org.apache.commons:commons-dbcp2:2.7.0'
  282. dependency('org.apache.httpcomponents:httpclient:4.5.13'){
  283. exclude 'commons-logging:commons-logging'
  284. }
  285. // Be aware that Log4j is used by Elasticsearch client
  286. dependencySet(group: 'org.apache.logging.log4j', version: '2.8.2') {
  287. entry 'log4j-api'
  288. entry 'log4j-to-slf4j'
  289. entry 'log4j-core'
  290. }
  291. dependencySet(group: 'org.apache.tomcat.embed', version: '8.5.60') {
  292. entry 'tomcat-embed-core'
  293. entry('tomcat-embed-jasper') {
  294. exclude 'org.eclipse.jdt.core.compiler:ecj'
  295. }
  296. }
  297. dependency 'org.assertj:assertj-core:3.15.0'
  298. dependency 'org.assertj:assertj-guava:3.3.0'
  299. dependency('org.codehaus.sonar:sonar-channel:4.2') {
  300. exclude 'org.slf4j:slf4j-api'
  301. }
  302. dependency 'org.codehaus.sonar:sonar-classloader:1.0'
  303. dependency('org.codehaus.woodstox:woodstox-core-lgpl:4.4.1') {
  304. exclude 'javax.xml.stream:stax-api'
  305. }
  306. dependency 'org.codehaus.sonar.runner:sonar-runner-api:2.4'
  307. dependency('org.codehaus.sonar:sonar-squid:4.1') {
  308. exclude 'org.codehaus.sonar:sonar-check-api'
  309. }
  310. dependency('org.codehaus.staxmate:staxmate:2.0.1') {
  311. exclude 'org.codehaus.woodstox:stax2-api'
  312. exclude 'stax:stax-api'
  313. exclude 'org.codehaus.woodstox:woodstox-core-asl'
  314. }
  315. dependency('org.codehaus.woodstox:stax2-api:3.1.4') {
  316. exclude 'stax:stax-api'
  317. }
  318. dependencySet(group: 'org.eclipse.jetty', version: '9.4.6.v20170531') {
  319. entry 'jetty-proxy'
  320. entry 'jetty-server'
  321. entry 'jetty-servlet'
  322. }
  323. dependency('org.elasticsearch.client:elasticsearch-rest-high-level-client:7.9.3') {
  324. exclude 'commons-logging:commons-logging'
  325. }
  326. dependency 'org.elasticsearch.plugin:transport-netty4-client:7.9.3'
  327. dependency 'org.elasticsearch:mocksocket:1.0'
  328. dependency 'org.codelibs.elasticsearch.module:analysis-common:7.9.3'
  329. dependency 'org.eclipse.jgit:org.eclipse.jgit:5.9.0.202009080501-r'
  330. dependency 'org.tmatesoft.svnkit:svnkit:1.10.1'
  331. dependency 'org.hamcrest:hamcrest-all:1.3'
  332. dependency 'org.jsoup:jsoup:1.13.1'
  333. dependency 'org.mindrot:jbcrypt:0.4'
  334. dependency('org.mockito:mockito-core:3.3.3') {
  335. exclude 'org.hamcrest:hamcrest-core'
  336. }
  337. dependency 'org.mybatis:mybatis:3.5.6'
  338. dependency 'org.nanohttpd:nanohttpd:2.3.1'
  339. dependency 'org.picocontainer:picocontainer:2.15'
  340. dependencySet(group: 'org.slf4j', version: '1.7.30') {
  341. entry 'jcl-over-slf4j'
  342. entry 'jul-to-slf4j'
  343. entry 'log4j-over-slf4j'
  344. entry 'slf4j-api'
  345. }
  346. dependency 'org.postgresql:postgresql:42.2.17'
  347. dependency 'org.reflections:reflections:0.9.12'
  348. dependency 'org.simpleframework:simple:4.1.21'
  349. dependency 'org.sonarsource.orchestrator:sonar-orchestrator:3.34.0.2692'
  350. dependency 'org.sonarsource.update-center:sonar-update-center-common:1.23.0.723'
  351. dependency 'org.subethamail:subethasmtp:3.1.7'
  352. dependency 'org.yaml:snakeyaml:1.26'
  353. dependency 'xml-apis:xml-apis:1.4.01'
  354. // please keep this list alphabetically ordered
  355. }
  356. }
  357. // global exclusions
  358. configurations.all {
  359. // do not conflict with com.sun.mail:javax.mail
  360. exclude group: 'javax.mail', module: 'mail'
  361. }
  362. tasks.withType(JavaCompile) {
  363. options.compilerArgs.addAll(['--release', '8'])
  364. options.encoding = 'UTF-8'
  365. }
  366. tasks.withType(Javadoc) {
  367. options.addStringOption('Xdoclint:none', '-quiet')
  368. options.encoding = 'UTF-8'
  369. title = project.name + ' ' + versionWithoutBuildNumber
  370. }
  371. task sourcesJar(type: Jar, dependsOn: classes) {
  372. classifier = 'sources'
  373. from sourceSets.main.allSource
  374. }
  375. task javadocJar(type: Jar, dependsOn: javadoc) {
  376. classifier = 'javadoc'
  377. from javadoc.destinationDir
  378. }
  379. // generate code before opening project in IDE (Eclipse or Intellij)
  380. task ide() {
  381. // empty by default. Dependencies are added to the task
  382. // when needed (see protobuf modules for example)
  383. }
  384. jacocoTestReport {
  385. reports {
  386. xml.enabled true
  387. csv.enabled false
  388. html.enabled false
  389. }
  390. }
  391. normalization {
  392. runtimeClasspath {
  393. // Following classpath resources contain volatile data that changes in each CI build (build number, commit id, time),
  394. // so we exclude them from calculation of build cache key of test tasks:
  395. ignore 'META-INF/MANIFEST.MF'
  396. ignore 'sonar-api-version.txt'
  397. ignore 'sq-version.txt'
  398. }
  399. }
  400. ext.failedTests = []
  401. test {
  402. jvmArgs '-Dfile.encoding=UTF8'
  403. maxHeapSize = '1G'
  404. systemProperty 'java.awt.headless', true
  405. testLogging {
  406. events "skipped", "failed" // verbose log for failed and skipped tests (by default the name of the tests are not logged)
  407. exceptionFormat 'full' // log the full stack trace (default is the 1st line of the stack trace)
  408. }
  409. jacoco {
  410. enabled = true // do not disable recording of code coverage, so that remote Gradle cache entry can be used locally
  411. includes = ['com.sonar.*', 'com.sonarsource.*', 'org.sonar.*', 'org.sonarqube.*', 'org.sonarsource.*']
  412. }
  413. if (project.hasProperty('maxParallelTests')) {
  414. maxParallelForks = project.maxParallelTests as int
  415. }
  416. if (project.hasProperty('parallelTests')) {
  417. // See https://guides.gradle.org/performance/#parallel_test_execution
  418. maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1
  419. }
  420. afterTest { descriptor, result ->
  421. if (result.resultType == TestResult.ResultType.FAILURE) {
  422. String failedTest = " ${descriptor.className} > ${descriptor.name}"
  423. failedTests << failedTest
  424. }
  425. }
  426. }
  427. gradle.buildFinished {
  428. if (!failedTests.empty) {
  429. println "\nFailed tests:"
  430. failedTests.each { failedTest ->
  431. println failedTest
  432. }
  433. println ""
  434. }
  435. }
  436. def protoMainSrc = 'src/main/protobuf'
  437. def protoTestSrc = 'src/test/protobuf'
  438. if (file(protoMainSrc).exists() || file(protoTestSrc).exists()) {
  439. // protobuf must be applied after java
  440. apply plugin: 'com.google.protobuf'
  441. sourceSets.main.proto.srcDir protoMainSrc // in addition to the default 'src/main/proto'
  442. sourceSets.test.proto.srcDir protoTestSrc // in addition to the default 'src/test/proto'
  443. protobuf {
  444. protoc {
  445. artifact = "com.google.protobuf:protoc:${protobufVersion}"
  446. }
  447. }
  448. jar {
  449. exclude('**/*.proto')
  450. }
  451. idea {
  452. module {
  453. sourceDirs += file("${protobuf.generatedFilesBaseDir}/main/java")
  454. testSourceDirs += file("${protobuf.generatedFilesBaseDir}/test/java")
  455. generatedSourceDirs += file("${protobuf.generatedFilesBaseDir}/main/java")
  456. generatedSourceDirs += file("${protobuf.generatedFilesBaseDir}/test/java")
  457. }
  458. }
  459. ide.dependsOn(['generateProto', 'generateTestProto'])
  460. }
  461. if (file('package.json').exists()) {
  462. apply plugin: 'com.github.node-gradle.node'
  463. node {
  464. version = '10.22.1'
  465. yarnVersion = '1.22.0'
  466. download = true
  467. }
  468. // the OWASP tool does not support yarn, and its yarn.lock files, so node modules
  469. // should be explicitly installed (yarn task) before running the audit
  470. // See https://github.com/jeremylong/DependencyCheck/issues/2393
  471. dependencyCheckAggregate.dependsOn(yarn)
  472. }
  473. if (official) {
  474. jar {
  475. // do not break incremental build on non official versions
  476. manifest {
  477. attributes(
  478. 'Version': "${version}",
  479. 'Implementation-Build': System.getenv('GIT_SHA1'),
  480. 'Build-Time': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
  481. )
  482. }
  483. }
  484. }
  485. license {
  486. header = rootProject.file('HEADER')
  487. strictCheck true
  488. mapping {
  489. java = 'SLASHSTAR_STYLE'
  490. js = 'SLASHSTAR_STYLE'
  491. ts = 'SLASHSTAR_STYLE'
  492. tsx = 'SLASHSTAR_STYLE'
  493. css = 'SLASHSTAR_STYLE'
  494. }
  495. includes(['**/*.java', '**/*.js', '**/*.ts', '**/*.tsx', '**/*.css'])
  496. }
  497. tasks.withType(GenerateModuleMetadata) {
  498. enabled = false
  499. }
  500. publishing {
  501. publications {
  502. mavenJava(MavenPublication) {
  503. pom {
  504. name = 'SonarQube'
  505. description = project.description
  506. url = 'http://www.sonarqube.org/'
  507. organization {
  508. name = 'SonarSource'
  509. url = 'http://www.sonarsource.com'
  510. }
  511. licenses {
  512. license {
  513. name = 'GNU LGPL 3'
  514. url = 'http://www.gnu.org/licenses/lgpl.txt'
  515. distribution = 'repo'
  516. }
  517. }
  518. scm {
  519. url = 'https://github.com/SonarSource/sonarqube'
  520. }
  521. developers {
  522. developer {
  523. id = 'sonarsource-team'
  524. name = 'SonarSource Team'
  525. }
  526. }
  527. }
  528. }
  529. }
  530. }
  531. }
  532. // Yarn doesn't support concurrent access to its global cache,
  533. // i.e. parallel execution of several "yarn install" tasks,
  534. // since these tasks are independent, we can establish arbitrary total order
  535. // to prevent their concurrent execution.
  536. // Note that "task1.mustRunAfter(task2)" ordering has an effect only when both
  537. // tasks are scheduled for execution, therefore should be established between
  538. // all pairs of "yarn install" tasks to define their total order and to prevent
  539. // their concurrent execution even in case when one or more of these tasks not
  540. // scheduled.
  541. def yarnInstallTasks = allprojects.findResults { it -> it.tasks.findByName('yarn') }
  542. yarnInstallTasks.drop(1).eachWithIndex { it, i -> it.mustRunAfter(yarnInstallTasks[0..i]) }
  543. // by default, Yarn will update lock file if it is not up to date with "package.json"
  544. // using option "--frozen-lockfile" will disable this behavior and "yarn install" will fail if lock file is out of date
  545. // all "yarn install" tasks should be executed with this option for reproducibility of builds
  546. // and to prevent developers from forgetting to update lock file when they update "package.json"
  547. yarnInstallTasks.each { it -> it.args = ['--frozen-lockfile'] }
  548. // https://github.com/ben-manes/gradle-versions-plugin
  549. apply plugin: 'com.github.ben-manes.versions'
  550. dependencyUpdates {
  551. rejectVersionIf {
  552. // Exclude dev versions from the list of dependency upgrades, for
  553. // example to replace:
  554. // org.slf4j:log4j-over-slf4j [1.7.25 -> 1.8.0-beta4]
  555. // by
  556. // org.slf4j:log4j-over-slf4j [1.7.25 -> 1.7.26]
  557. boolean rejected = ['alpha', 'beta', 'rc', 'cr', 'm', 'preview', 'jre12'].any { qualifier ->
  558. it.candidate.version ==~ /(?i).*[.-]${qualifier}[.\d-]*/
  559. }
  560. // Exclude upgrades on new major versions :
  561. // com.hazelcast:hazelcast [3.12.3 -> 4.0.0]
  562. rejected |= !it.candidate.version.substring(0, 2).equals(it.currentVersion.substring(0, 2))
  563. rejected
  564. }
  565. }