]> source.dussan.org Git - sonarqube.git/commitdiff
Move To Gradle
authorDavid Rautureau <david.rautureau@sonarsource.com>
Thu, 8 Feb 2018 14:01:19 +0000 (15:01 +0100)
committerDavid Rautureau <david.rautureau@sonarsource.com>
Fri, 9 Mar 2018 10:33:38 +0000 (11:33 +0100)
207 files changed:
.gitignore
.travis.yml
build.gradle [new file with mode: 0644]
build.sh
cix.sh
cve-false-positives.xml [deleted file]
find-classpath-conflicts.sh [deleted file]
format-headers.sh [deleted file]
gradle.properties [new file with mode: 0644]
gradle/wrapper/gradle-wrapper.jar [new file with mode: 0644]
gradle/wrapper/gradle-wrapper.properties [new file with mode: 0644]
gradlew [new file with mode: 0755]
gradlew.bat [new file with mode: 0644]
plugins/build.gradle [new file with mode: 0644]
plugins/sonar-xoo-plugin/build.gradle [new file with mode: 0644]
plugins/sonar-xoo-plugin/pom.xml [deleted file]
pom.xml [deleted file]
quick-build.sh [deleted file]
run-db-unit-tests.sh
run-integration-tests.sh
run-perf-tests.sh
run-upgrade-tests.sh
scripts/logs.sh
scripts/start.sh
server/build.gradle [new file with mode: 0644]
server/pom.xml [deleted file]
server/sonar-ce/build.gradle [new file with mode: 0644]
server/sonar-ce/pom.xml [deleted file]
server/sonar-ce/src/main/java/org/sonar/ce/queue/InternalCeQueueImpl.java
server/sonar-db-core/build.gradle [new file with mode: 0644]
server/sonar-db-core/pom.xml [deleted file]
server/sonar-db-core/src/test/java/org/sonar/db/CreateDb.java [new file with mode: 0644]
server/sonar-db-dao/build.gradle [new file with mode: 0644]
server/sonar-db-dao/pom.xml [deleted file]
server/sonar-db-migration/build.gradle [new file with mode: 0644]
server/sonar-db-migration/pom.xml [deleted file]
server/sonar-db-testing/build.gradle [new file with mode: 0644]
server/sonar-db-testing/pom.xml [deleted file]
server/sonar-main/build.gradle [new file with mode: 0644]
server/sonar-main/pom.xml [deleted file]
server/sonar-main/src/main/java/org/sonar/application/command/CommandFactoryImpl.java
server/sonar-main/src/test/java/org/sonar/application/command/CommandFactoryImplTest.java
server/sonar-plugin-bridge/build.gradle [new file with mode: 0644]
server/sonar-plugin-bridge/pom.xml [deleted file]
server/sonar-process/build.gradle [new file with mode: 0644]
server/sonar-process/pom.xml [deleted file]
server/sonar-qa-util/build.gradle [new file with mode: 0644]
server/sonar-qa-util/pom.xml [deleted file]
server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/SelenideConfig.java
server/sonar-server/build.gradle [new file with mode: 0644]
server/sonar-server/pom.xml [deleted file]
server/sonar-server/src/main/java/org/sonar/ce/log/CeLogging.java
server/sonar-server/src/main/java/org/sonar/server/app/EmbeddedTomcat.java
server/sonar-server/src/main/java/org/sonar/server/es/EsClientProvider.java
server/sonar-web/build.gradle [new file with mode: 0644]
server/sonar-web/pom.xml [deleted file]
settings.gradle [new file with mode: 0644]
sonar-application/assembly-common.xml [deleted file]
sonar-application/assembly.xml [deleted file]
sonar-application/build.gradle [new file with mode: 0644]
sonar-application/pom.xml [deleted file]
sonar-application/src/main/assembly/logs/README.txt [new file with mode: 0644]
sonar-check-api/build.gradle [new file with mode: 0644]
sonar-check-api/pom.xml [deleted file]
sonar-core/build.gradle [new file with mode: 0644]
sonar-core/pom.xml [deleted file]
sonar-duplications/build.gradle [new file with mode: 0644]
sonar-duplications/pom.xml [deleted file]
sonar-home/build.gradle [new file with mode: 0644]
sonar-home/pom.xml [deleted file]
sonar-markdown/build.gradle [new file with mode: 0644]
sonar-markdown/pom.xml [deleted file]
sonar-plugin-api-deps/build.gradle [new file with mode: 0644]
sonar-plugin-api-deps/pom.xml [deleted file]
sonar-plugin-api/build.gradle [new file with mode: 0644]
sonar-plugin-api/pom.xml [deleted file]
sonar-plugin-api/src/main/resources/sonar-api-version.txt
sonar-plugin-api/src/main/resources/sq-version.txt
sonar-scanner-engine-shaded/build.gradle [new file with mode: 0644]
sonar-scanner-engine-shaded/pom.xml [deleted file]
sonar-scanner-engine/build.gradle [new file with mode: 0644]
sonar-scanner-engine/pom.xml [deleted file]
sonar-scanner-protocol/build.gradle [new file with mode: 0644]
sonar-scanner-protocol/pom.xml [deleted file]
sonar-testing-harness/build.gradle [new file with mode: 0644]
sonar-testing-harness/pom.xml [deleted file]
sonar-testing-harness/src/main/java/org/sonar/test/i18n/BundleSynchronizedMatcher.java
sonar-ws-generator/build.gradle [new file with mode: 0644]
sonar-ws-generator/pom.xml [deleted file]
sonar-ws-generator/run.sh
sonar-ws-generator/src/main/java/org/sonarqube/wsgenerator/ApiDefinitionDownloader.java
sonar-ws-generator/src/main/java/org/sonarqube/wsgenerator/Helper.java
sonar-ws/build.gradle [new file with mode: 0644]
sonar-ws/pom.xml [deleted file]
stop.sh
tests/build.gradle [new file with mode: 0644]
tests/plugins/access-secured-props-plugin/build.gradle [new file with mode: 0644]
tests/plugins/access-secured-props-plugin/pom.xml [deleted file]
tests/plugins/backdating-customplugin/build.gradle [new file with mode: 0644]
tests/plugins/backdating-customplugin/pom.xml [deleted file]
tests/plugins/backdating-plugin-v1/build.gradle [new file with mode: 0644]
tests/plugins/backdating-plugin-v1/pom.xml [deleted file]
tests/plugins/backdating-plugin-v2/build.gradle [new file with mode: 0644]
tests/plugins/backdating-plugin-v2/pom.xml [deleted file]
tests/plugins/base-auth-plugin/build.gradle [new file with mode: 0644]
tests/plugins/base-auth-plugin/pom.xml [deleted file]
tests/plugins/batch-plugin/build.gradle [new file with mode: 0644]
tests/plugins/batch-plugin/pom.xml [deleted file]
tests/plugins/extension-lifecycle-plugin/build.gradle [new file with mode: 0644]
tests/plugins/extension-lifecycle-plugin/pom.xml [deleted file]
tests/plugins/fake-billing-plugin/build.gradle [new file with mode: 0644]
tests/plugins/fake-billing-plugin/pom.xml [deleted file]
tests/plugins/fake-governance-plugin/build.gradle [new file with mode: 0644]
tests/plugins/fake-governance-plugin/pom.xml [deleted file]
tests/plugins/foo-plugin-v1/build.gradle [new file with mode: 0644]
tests/plugins/foo-plugin-v1/pom.xml [deleted file]
tests/plugins/foo-plugin-v2/build.gradle [new file with mode: 0644]
tests/plugins/foo-plugin-v2/pom.xml [deleted file]
tests/plugins/global-property-change-plugin/build.gradle [new file with mode: 0644]
tests/plugins/global-property-change-plugin/pom.xml [deleted file]
tests/plugins/issue-filter-plugin/build.gradle [new file with mode: 0644]
tests/plugins/issue-filter-plugin/pom.xml [deleted file]
tests/plugins/l10n-fr-pack/build.gradle [new file with mode: 0644]
tests/plugins/l10n-fr-pack/pom.xml [deleted file]
tests/plugins/license-plugin/build.gradle [new file with mode: 0644]
tests/plugins/license-plugin/pom.xml [deleted file]
tests/plugins/oauth2-auth-plugin/build.gradle [new file with mode: 0644]
tests/plugins/oauth2-auth-plugin/pom.xml [deleted file]
tests/plugins/pom.xml [deleted file]
tests/plugins/posttask-plugin/build.gradle [new file with mode: 0644]
tests/plugins/posttask-plugin/pom.xml [deleted file]
tests/plugins/project-builder-plugin/build.gradle [new file with mode: 0644]
tests/plugins/project-builder-plugin/pom.xml [deleted file]
tests/plugins/property-relocation-plugin/build.gradle [new file with mode: 0644]
tests/plugins/property-relocation-plugin/pom.xml [deleted file]
tests/plugins/property-sets-plugin/build.gradle [new file with mode: 0644]
tests/plugins/property-sets-plugin/pom.xml [deleted file]
tests/plugins/security-plugin/build.gradle [new file with mode: 0644]
tests/plugins/security-plugin/pom.xml [deleted file]
tests/plugins/server-plugin/build.gradle [new file with mode: 0644]
tests/plugins/server-plugin/pom.xml [deleted file]
tests/plugins/settings-encryption-plugin/build.gradle [new file with mode: 0644]
tests/plugins/settings-encryption-plugin/pom.xml [deleted file]
tests/plugins/settings-plugin/build.gradle [new file with mode: 0644]
tests/plugins/settings-plugin/pom.xml [deleted file]
tests/plugins/sonar-fake-plugin/build.gradle [new file with mode: 0644]
tests/plugins/sonar-fake-plugin/pom.xml [deleted file]
tests/plugins/sonar-subcategories-plugin/build.gradle [new file with mode: 0644]
tests/plugins/sonar-subcategories-plugin/pom.xml [deleted file]
tests/plugins/ui-extensions-plugin/build.gradle [new file with mode: 0644]
tests/plugins/ui-extensions-plugin/pom.xml [deleted file]
tests/plugins/wait-at-platform-level4-plugin/build.gradle [new file with mode: 0644]
tests/plugins/wait-at-platform-level4-plugin/pom.xml [deleted file]
tests/plugins/ws-plugin/build.gradle [new file with mode: 0644]
tests/plugins/ws-plugin/pom.xml [deleted file]
tests/pom.xml [deleted file]
tests/src/test/java/org/sonarqube/tests/Byteman.java
tests/src/test/java/org/sonarqube/tests/Category1Suite.java
tests/src/test/java/org/sonarqube/tests/Category3Suite.java
tests/src/test/java/org/sonarqube/tests/Category4Suite.java
tests/src/test/java/org/sonarqube/tests/Category6Suite.java
tests/src/test/java/org/sonarqube/tests/analysis/AnalysisEsResilienceTest.java
tests/src/test/java/org/sonarqube/tests/authorization/AuthorizationSuite.java
tests/src/test/java/org/sonarqube/tests/ce/CeShutdownTest.java
tests/src/test/java/org/sonarqube/tests/ce/CeWorkersTest.java
tests/src/test/java/org/sonarqube/tests/component/ComponentSuite.java
tests/src/test/java/org/sonarqube/tests/duplication/DuplicationSuite.java
tests/src/test/java/org/sonarqube/tests/issue/IssueCreationDatePluginChangedTest.java
tests/src/test/java/org/sonarqube/tests/issue/IssueSuite.java
tests/src/test/java/org/sonarqube/tests/issue/OrganizationIssueSuite.java
tests/src/test/java/org/sonarqube/tests/lite/LiteTest.java
tests/src/test/java/org/sonarqube/tests/marketplace/UpdateCenterTest.java
tests/src/test/java/org/sonarqube/tests/measure/MeasureSuite.java
tests/src/test/java/org/sonarqube/tests/organization/OrganizationSuite.java
tests/src/test/java/org/sonarqube/tests/performance/scanner/ScannerPerformanceSuite.java
tests/src/test/java/org/sonarqube/tests/performance/server/ComputeEnginePerfTest.java
tests/src/test/java/org/sonarqube/tests/performance/server/ServerPerfTest.java
tests/src/test/java/org/sonarqube/tests/plugins/CompressPluginsTest.java
tests/src/test/java/org/sonarqube/tests/plugins/PluginsTest.java
tests/src/test/java/org/sonarqube/tests/project/ProjectSuite.java
tests/src/test/java/org/sonarqube/tests/project/SonarCloudProjectSuite.java
tests/src/test/java/org/sonarqube/tests/qualityGate/OrganizationQualityGateSuite.java
tests/src/test/java/org/sonarqube/tests/qualityGate/QualityGateSuite.java
tests/src/test/java/org/sonarqube/tests/qualityModel/QualityModelSuite.java
tests/src/test/java/org/sonarqube/tests/qualityProfile/ActiveRuleEsResilienceTest.java
tests/src/test/java/org/sonarqube/tests/qualityProfile/BuiltInQualityProfilesNotificationTest.java
tests/src/test/java/org/sonarqube/tests/rule/RuleEsResilienceTest.java
tests/src/test/java/org/sonarqube/tests/rule/RuleReKeyingTest.java
tests/src/test/java/org/sonarqube/tests/serverSystem/RestartTest.java
tests/src/test/java/org/sonarqube/tests/serverSystem/ServerSystemRestartingOrchestrator.java
tests/src/test/java/org/sonarqube/tests/serverSystem/SystemStateTest.java
tests/src/test/java/org/sonarqube/tests/settings/SettingsTestRestartingOrchestrator.java
tests/src/test/java/org/sonarqube/tests/source/SourceSuite.java
tests/src/test/java/org/sonarqube/tests/startup/StartupIndexationTest.java
tests/src/test/java/org/sonarqube/tests/telemetry/TelemetryOptOutTest.java
tests/src/test/java/org/sonarqube/tests/telemetry/TelemetryUploadTest.java
tests/src/test/java/org/sonarqube/tests/test/TestSuite.java
tests/src/test/java/org/sonarqube/tests/upgrade/UpgradeTest.java
tests/src/test/java/org/sonarqube/tests/user/OnboardingTest.java
tests/src/test/java/org/sonarqube/tests/user/RealmAuthenticationTest.java
tests/src/test/java/org/sonarqube/tests/user/SsoAuthenticationTest.java
tests/src/test/java/org/sonarqube/tests/user/UserEsResilienceTest.java
tests/src/test/java/org/sonarqube/tests/user/UserSuite.java
tests/src/test/java/org/sonarqube/tests/webhook/WebhooksSuite.java
tests/src/test/java/util/ItUtils.java
third-party-licenses.sh [deleted file]
travis.sh

index fadc2446785a98660e5185b981df2f9251ab5cd7..80ca88f2fc1fb4f8615fb7a2bae6d7c8b902d460 100644 (file)
@@ -7,14 +7,13 @@ server/sonar-web/src/main/webapp/WEB-INF/log/
 server/sonar-web/src/main/webapp/deploy/*.jar
 server/sonar-web/src/main/webapp/deploy/jdbc-driver.txt
 
+# ---- Gradle
+build/
+.gradle/
 
 # ---- Javadoc
 docs.tar
 
-# ---- Maven
-target/
-dependency-reduced-pom.xml
-
 # ---- IntelliJ IDEA
 *.iws
 *.iml
index 960ab66f8d77f908a69c59b5a0228455ba51d152..1b1eb2378192d36684251f8c02fd8ca85ea36623 100644 (file)
@@ -14,17 +14,16 @@ matrix:
 
 cache:
   directories:
-    - $HOME/.m2/repository
     - $HOME/.sonar
-    - server/sonar-web/node
-    - server/sonar-web/node_modules
     - $HOME/jvm
-    - $HOME/maven
+    - $HOME/.gradle/caches/
+    - $HOME/.gradle/wrapper/
 
 before_cache:
-  # remove all the artifacts (JAR, ZIP) that are installed in local repo because of mvn deploy
-  - rm -rf $HOME/.m2/repository/org/sonarsource/sonarqube
-  - find $HOME/.m2 -name resolver-status.properties -exec rm {} \;
+  - rm -f  $HOME/.gradle/caches/modules-2/modules-2.lock
+  - rm -fr $HOME/.gradle/caches/*/plugin-resolution/
+  - rm -fr $HOME/.gradle/caches/*/fileHashes/
+  - rm -fr $HOME/.gradle/caches/*/scripts/
 
 notifications:
   email: false
diff --git a/build.gradle b/build.gradle
new file mode 100644 (file)
index 0000000..4ba1085
--- /dev/null
@@ -0,0 +1,296 @@
+buildscript {
+  repositories {
+    maven {
+      url 'https://plugins.gradle.org/m2/'
+    }
+  }
+  dependencies {
+    // check updates with https://plugins.gradle.org/
+    // Ordered alphabeticly to avoid duplication
+    classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.2'
+    classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.4'
+    classpath 'com.moowork.gradle:gradle-node-plugin:1.2.0'
+    classpath 'io.spring.gradle:dependency-management-plugin:1.0.4.RELEASE'
+    classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:4.6.2'
+    classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.6.2'
+  }
+}
+
+// Analyze SonarQube with SonarQube!
+apply plugin: 'org.sonarqube'
+sonarqube {
+  properties {
+    property 'sonar.projectName', projectTitle
+  }
+}
+
+allprojects {
+  apply plugin: 'com.jfrog.artifactory'
+  apply plugin: 'maven-publish'
+
+  // Replaces the version defined in sources, usually x.y-SNAPSHOT, by a version identifying the build.
+  def buildNumber = System.getProperty("buildNumber")
+  if (version.endsWith('-SNAPSHOT') && buildNumber != null) {
+    version = version.replace('-SNAPSHOT', ".0.$buildNumber")
+  }
+
+  ext {
+    release = project.hasProperty('release') && project.getProperty('release')
+  }
+
+  repositories {
+    def repository = project.hasProperty('cix') ? 'sonarsource-qa' : 'sonarsource'
+    maven {
+      url "https://repox.sonarsource.com/${repository}"
+      def artifactoryUsername = System.env.'ARTIFACTORY_PRIVATE_USERNAME'
+      def artifactoryPassword = System.env.'ARTIFACTORY_PRIVATE_PASSWORD'
+      if (artifactoryUsername && artifactoryPassword) {
+        credentials {
+          username artifactoryUsername
+          password artifactoryPassword
+        }
+      }
+    }
+  }
+}
+
+subprojects {
+  apply plugin: 'io.spring.dependency-management'
+  apply plugin: 'java'
+  // protobuf must be applied after java
+  apply plugin: 'com.google.protobuf'
+  apply plugin: "jacoco"
+  apply plugin: 'idea'
+
+  // do not deploy to Artifactory by default
+  artifactoryPublish.skip = true
+
+  ext {
+    elasticsearchVersion = '5.6.3'
+    protobufVersion = '3.5.1'
+  }
+
+  sonarqube {
+    properties {
+      property 'sonar.moduleKey', project.group + ':' + project.name
+    }
+  }
+
+  // Central place for definition dependency versions and exclusions.
+  dependencyManagement {
+    dependencies {
+      // please keep this list alphabetically ordered
+      dependencySet(group: 'ch.qos.logback', version: '1.2.3') {
+        entry 'logback-access'
+        entry 'logback-classic'
+        entry 'logback-core'
+      }
+      dependency('commons-beanutils:commons-beanutils:1.8.3') {
+        exclude 'commons-logging:commons-logging'
+      }
+      dependency 'commons-codec:commons-codec:1.8'
+      dependency 'commons-dbcp:commons-dbcp:1.4'
+      dependency 'commons-dbutils:commons-dbutils:1.5'
+      dependency 'commons-io:commons-io:2.4'
+      dependency 'commons-lang:commons-lang:2.6'
+      dependencySet(group: 'com.fasterxml.jackson.core', version: '2.6.6') {
+        entry 'jackson-core'
+        entry 'jackson-databind'
+        entry 'jackson-annotations'
+      }
+      dependency 'com.github.kevinsawicki:http-request:5.4.1'
+      dependency 'com.github.tlrx:elasticsearch-test:1.2.1'
+      dependency 'com.googlecode.java-diff-utils:diffutils:1.2'
+      dependency('com.googlecode.json-simple:json-simple:1.1.1') {
+        exclude 'junit:junit'
+      }
+      dependency 'com.google.code.findbugs:jsr305:3.0.2'
+      dependency 'com.google.code.gson:gson:2.3.1'
+      dependency 'com.google.guava:guava:18.0'
+      dependency "com.google.protobuf:protobuf-java:${protobufVersion}"
+      dependency 'com.h2database:h2:1.3.176'
+      dependencySet(group: 'com.hazelcast', version: '3.8.6') {
+        entry 'hazelcast'
+        entry 'hazelcast-client'
+      }
+      dependency 'com.ibm.icu:icu4j:3.4.4'
+      dependency 'com.microsoft.sqlserver:mssql-jdbc:6.2.2.jre8'
+      dependency 'com.oracle.jdbc:ojdbc8:12.2.0.1.0'
+      dependencySet(group: 'com.squareup.okhttp3', version: '3.7.0') {
+        entry 'okhttp'
+        entry 'mockwebserver'
+      }
+      dependency 'com.tngtech.java:junit-dataprovider:1.9.2'
+      dependency 'io.jsonwebtoken:jjwt:0.9.0'
+      dependency 'javax.servlet:javax.servlet-api:3.0.1'
+      dependency 'javax.xml.bind:jaxb-api:2.3.0'
+      dependency 'junit:junit:4.12'
+      dependency 'mysql:mysql-connector-java:5.1.42'
+      dependency 'net.jpountz.lz4:lz4:1.3.0'
+      dependency 'org.apache.commons:commons-csv:1.4'
+      dependency 'org.apache.commons:commons-email:1.5'
+      dependency('org.apache.httpcomponents:httpclient:4.5.2'){
+        exclude 'commons-logging:commons-logging'
+      }
+      // Be aware that Log4j is used by Elasticsearch client
+      dependencySet(group: 'org.apache.logging.log4j', version: '2.8.2') {
+        entry 'log4j-api'
+        entry 'log4j-to-slf4j'
+        entry 'log4j-core'
+      }
+      dependencySet(group: 'org.apache.tomcat.embed', version: '8.5.23') {
+        entry 'tomcat-embed-core'
+        entry('tomcat-embed-jasper') {
+          exclude 'org.eclipse.jdt.core.compiler:ecj'
+        }
+      }
+      dependency 'org.assertj:assertj-core:3.9.0'
+      dependency 'org.assertj:assertj-guava:3.1.0'
+      dependency('org.codehaus.sonar:sonar-channel:4.1') {
+        exclude 'org.slf4j:slf4j-api'
+      }
+      dependency 'org.codehaus.sonar:sonar-classloader:1.0'
+      dependency('org.codehaus.woodstox:woodstox-core-lgpl:4.4.0') {
+        exclude 'javax.xml.stream:stax-api'
+      }
+      dependency 'org.codehaus.sonar.runner:sonar-runner-api:2.4'
+      dependency('org.codehaus.sonar:sonar-squid:4.1') {
+        exclude 'org.codehaus.sonar:sonar-check-api'
+      }
+      dependency('org.codehaus.staxmate:staxmate:2.0.1') {
+        exclude 'org.codehaus.woodstox:stax2-api'
+        exclude 'stax:stax-api'
+        exclude 'org.codehaus.woodstox:woodstox-core-asl'
+      }
+      dependency('org.codehaus.woodstox:stax2-api:3.1.4') {
+        exclude 'stax:stax-api'
+      }
+      dependency('org.dbunit:dbunit:2.4.5') {
+        exclude 'commons-lang:commons-lang'
+        exclude 'xerces:xmlParserAPIs'
+        exclude 'xerces:xercesImpl'
+      }
+      dependency 'org.eclipse.jetty:jetty-server:8.1.12.v20130726'
+      dependency 'org.eclipse.jetty:test-jetty-servlet:8.1.12.v20130726'
+      dependency("org.elasticsearch.client:transport:${elasticsearchVersion}") {
+        exclude 'org.elasticsearch.plugin:lang-mustache-client'
+        exclude 'org.elasticsearch.plugin:transport-netty3-client'
+        exclude 'commons-logging:commons-logging'
+        exclude 'org.elasticsearch.plugin:reindex-client'
+      }
+      dependency 'org.freemarker:freemarker:2.3.20'
+      dependency 'org.hamcrest:hamcrest-all:1.3'
+      dependency('org.mockito:mockito-core:2.13.0') {
+        exclude 'org.hamcrest:hamcrest-core'
+      }
+      dependency 'org.mybatis:mybatis:3.4.4'
+      dependency 'org.nanohttpd:nanohttpd:2.3.0'
+      dependency 'org.picocontainer:picocontainer:2.15'
+      dependencySet(group: 'org.slf4j', version: '1.7.25') {
+        entry 'slf4j-api'
+        entry 'jul-to-slf4j'
+        entry 'log4j-over-slf4j'
+      }
+      dependency 'org.postgresql:postgresql:42.2.1'
+      dependency 'org.reflections:reflections:0.9.9'
+      dependency 'org.simpleframework:simple:4.1.21'
+      dependency 'org.sonarsource.orchestrator:sonar-orchestrator:3.16.1.1446'
+      dependency('org.sonarsource:sonar-persistit:3.3.2') {
+        exclude 'commons-logging:commons-logging'
+      }
+      dependency 'org.sonarsource.update-center:sonar-update-center-common:1.18.0.487'
+      dependency 'org.subethamail:subethasmtp:3.1.7'
+      dependency 'xml-apis:xml-apis:1.4.01'
+
+      // please keep this list alphabetically ordered
+    }
+  }
+
+  sourceCompatibility = 1.8
+  tasks.withType(JavaCompile) {
+    options.encoding = 'UTF-8'
+  }
+
+  tasks.withType(Javadoc) {
+    options.addStringOption('Xdoclint:none', '-quiet')
+  }
+
+  task sourcesJar(type: Jar, dependsOn: classes) {
+    classifier = 'sources'
+    from sourceSets.main.allSource
+  }
+
+  task javadocJar(type: Jar, dependsOn: javadoc) {
+    classifier = 'javadoc'
+    from javadoc.destinationDir
+  }
+
+  test {
+    systemProperty 'java.awt.headless', true
+    jacoco.enabled = project.hasProperty('jacocoEnabled')
+    testLogging {
+      exceptionFormat 'full' // log the full stack trace (default is the 1st line of the stack trace)
+      events "skipped", "failed" // verbose log for failed and skipped tests (by default the name of the tests are not logged)
+    }
+  }
+
+  def protoMainSrc = 'src/main/protobuf'
+  def protoTestSrc = 'src/test/protobuf'
+  if (file(protoMainSrc).exists() || file(protoTestSrc).exists()) {
+    sourceSets.main.proto.srcDir protoMainSrc  // in addition to the default 'src/main/proto'
+    sourceSets.test.proto.srcDir protoTestSrc  // in addition to the default 'src/test/proto'
+    protobuf {
+      protoc {
+        artifact = "com.google.protobuf:protoc:${protobufVersion}"
+      }
+    }
+    idea {
+      module {
+        sourceDirs += file("${protobuf.generatedFilesBaseDir}/main/java")
+        testSourceDirs += file("${protobuf.generatedFilesBaseDir}/test/java")
+      }
+    }
+  }
+
+  if (release) {
+    jar {
+      // do not break incremental build on non-release versions
+      manifest {
+        attributes(
+          'Version': "${version}",
+          'Implementation-Build': 'git rev-parse HEAD'.execute().text.trim(),
+          'Build-Time': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
+        )
+      }
+    }
+  }
+}
+
+artifactory {
+  clientConfig.setIncludeEnvVars(true)
+  clientConfig.setEnvVarsExcludePatterns('*password*,*PASSWORD*,*secret*,*MAVEN_CMD_LINE_ARGS*,sun.java.command,*token*,*TOKEN*,*LOGIN*,*login*')
+  contextUrl = System.getenv('ARTIFACTORY_URL')
+  publish {
+    repository {
+      repoKey = System.getenv('ARTIFACTORY_DEPLOY_REPO')
+      username = System.getenv('ARTIFACTORY_DEPLOY_USERNAME')
+      password = System.getenv('ARTIFACTORY_DEPLOY_PASSWORD')
+    }
+    defaults {
+      properties = [
+        'vcs.revision': System.getenv('GIT_COMMIT'),
+        'vcs.branch': System.getenv('GIT_BRANCH'),
+        'build.name': 'sonarqube',
+        'build.number': (System.getenv('BUILD_ID') ?: System.getenv('BUILD_NUMBER'))
+      ]
+      publications('mavenJava')
+      publishPom = true
+      publishIvy = false
+    }
+  }
+  clientConfig.info.setBuildNumber(System.getenv('BUILD_NUMBER'))
+  // Define the artifacts to be deployed to https://sonarsource.bintray.com on releases
+  clientConfig.info.addEnvironmentProperty('ARTIFACTS_TO_PUBLISH', "${project.group}:sonar-application:zip")
+  // The name of this variable is important because it's used by the delivery process when extracting version from Artifactory build info.
+  clientConfig.info.addEnvironmentProperty('PROJECT_VERSION', "${version}")
+}
index 47bc89e9e2b2765fdc2841888e685b893e18b11e..91b40fb51666a6e8dfec5769da135b652ea4e3f9 100755 (executable)
--- a/build.sh
+++ b/build.sh
@@ -2,6 +2,4 @@
 
 ./stop.sh
 
-# Parallel executions of maven modules and tests.
-# Half of CPU core are used in to keep other half for OS and other programs.
-mvn clean install -e -B -T0.5C -DforkCount=0.5C $*
+./gradlew build $*
diff --git a/cix.sh b/cix.sh
index a6d4f3a2491d82e00eea299bc0481fa4d11d43a5..51d388eaab07ea5463500ce4286026b8dd4ba399 100755 (executable)
--- a/cix.sh
+++ b/cix.sh
@@ -3,16 +3,20 @@
 
 set -euo pipefail
 
+REPOX_ARGS="-Dorchestrator.artifactory.apiKey=$REPOX_API_KEY -Dorchestrator.artifactory.repositories=sonarsource-qa"
+TEST_ARGS="-Pcix=true -DbuildNumber=$CI_BUILD_NUMBER $REPOX_ARGS"
+
 case "$RUN_ACTIVITY" in
 
   run-db-unit-tests-*)
     DB_ENGINE=$(sed "s/run-db-unit-tests-//g" <<< $RUN_ACTIVITY)
-    ./run-db-unit-tests.sh "http://infra.internal.sonarsource.com/jenkins/orch-${DB_ENGINE}.properties"
+    ./run-db-unit-tests.sh "http://infra.internal.sonarsource.com/jenkins/orch-${DB_ENGINE}.properties" \
+        ${TEST_ARGS}
     ;;
 
   run-db-integration-tests-*)
     DB_ENGINE=$(sed "s/run-db-integration-tests-//g" <<< $RUN_ACTIVITY | cut -d \- -f 1)
-    CATEGORY_GROUP=$(sed "s/run-db-integration-tests-//g" <<< $RUN_ACTIVITY | cut -d \- -f 2)
+    CATEGORY=$(sed "s/run-db-integration-tests-//g" <<< $RUN_ACTIVITY | cut -d \- -f 2)
 
     if [[ "$GITHUB_BRANCH" != "PULLREQUEST-"* ]] && [[ "$GITHUB_BRANCH" != "master" ]] && [[ "$GITHUB_BRANCH" != "branch-"* ]] && [[ "$GITHUB_BRANCH" != "dogfood-on-next" ]]; then
       # do not execute QA tests on feature branch outside pull request
@@ -27,70 +31,28 @@ case "$RUN_ACTIVITY" in
       exit 0
 
     else
-      mvn clean package -B -e -V -f tests/plugins/pom.xml
-
-      case "$CATEGORY_GROUP" in
-        Category1)
-          CATEGORY="Category1|authorization|measure|qualityGate|source"
-          ;;
-
-        Category2)
-          CATEGORY="issue|test|qualityModel"
-          ;;
-
-        Category3)
-          CATEGORY="Category3|component|project"
-          ;;
-
-        Category4)
-          CATEGORY="Category4|duplication|user|webhook"
-          ;;
-
-        Category5)
-          CATEGORY="Category5"
-          ;;
-
-        Category6)
-          CATEGORY="Category6|organization"
-          ;;
-
-        *)
-          echo "unknown CATEGORY_GROUP: $CATEGORY_GROUP"
-          exit 1
-          ;;
-      esac
-
-      mvn verify \
-          -f tests/pom.xml \
+      ./gradlew --no-daemon --console plain -i \
+          :tests:integrationTest \
           -Dcategory="$CATEGORY" \
           -Dorchestrator.configUrl="http://infra.internal.sonarsource.com/jenkins/orch-$DB_ENGINE.properties" \
-          -Pwith-db-drivers \
-          -B -e -V
+          ${TEST_ARGS}
     fi
     ;;
 
   run-it-released-plugins)
-    ./run-integration-tests.sh "Plugins" "http://infra.internal.sonarsource.com/jenkins/orch-h2.properties"
+    ./run-integration-tests.sh "Plugins" "http://infra.internal.sonarsource.com/jenkins/orch-h2.properties" \
+        ${TEST_ARGS}
     ;;
 
   run-perf-tests)
-    if [[ "$GITHUB_BRANCH" == "PULLREQUEST-"* ]]; then
-        # do not execute Perf tests on feature branch outside pull request
-        exit 0
-    else
-      ./run-perf-tests.sh
-    fi
+    ./run-perf-tests.sh \
+        ${TEST_ARGS}
     ;;
 
   run-upgrade-tests-*)
     DB_ENGINE=$(sed "s/run-upgrade-tests-//g" <<< $RUN_ACTIVITY)
-    if [[ "$GITHUB_BRANCH" != "master" ]] && [[ "$GITHUB_BRANCH" != "branch-"* ]] && [[ "$DB_ENGINE" != "postgresql93" ]]; then
-      # restrict upgrade tests to PostgreSQL on feature branches and dogfood
-      exit 0
-
-    else    
-      ./run-upgrade-tests.sh "http://infra.internal.sonarsource.com/jenkins/orch-${DB_ENGINE}.properties"
-    fi
+      ./run-upgrade-tests.sh "http://infra.internal.sonarsource.com/jenkins/orch-${DB_ENGINE}.properties" \
+          ${TEST_ARGS}
     ;;
 
   *)
diff --git a/cve-false-positives.xml b/cve-false-positives.xml
deleted file mode 100644 (file)
index 39a01d9..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<suppressions xmlns="https://www.owasp.org/index.php/OWASP_Dependency_Check_Suppression">
-  <suppress>
-    <notes><![CDATA[
-      file name: gson-2.3.1.jar
-      ]]></notes>
-    <sha1>ECB6E1F8E4B0E84C4B886C2F14A1500CAF309757</sha1>
-    <cpe>cpe:/a:google:v8:2.3.1</cpe>
-  </suppress>
-  <suppress>
-    <notes><![CDATA[
-   file name: geronimo-spec-jta-1.0-M1.jar
-   ]]></notes>
-    <sha1>1F01F94B5B83C33950E22CDE224868407FDF8B99</sha1>
-    <cpe>cpe:/a:apache:geronimo:1.0.m1</cpe>
-  </suppress>
-</suppressions>
diff --git a/find-classpath-conflicts.sh b/find-classpath-conflicts.sh
deleted file mode 100755 (executable)
index 866de0e..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-
-# Search for duplication of classes in classpath
-# This check can not be automated in build yet as current
-# conflicts must be fixed.
-
-mvn org.basepom.maven:duplicate-finder-maven-plugin:check
diff --git a/format-headers.sh b/format-headers.sh
deleted file mode 100755 (executable)
index e354ddf..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-# Set correct copyright headers
-
-mvn license:format -Ptests
diff --git a/gradle.properties b/gradle.properties
new file mode 100644 (file)
index 0000000..6ecff8d
--- /dev/null
@@ -0,0 +1,4 @@
+group = org.sonarsource.sonarqube
+version = 7.1-SNAPSHOT
+description = 'Open source platform for continuous inspection of code quality'
+projectTitle = SonarQube
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644 (file)
index 0000000..c44b679
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644 (file)
index 0000000..568c50b
--- /dev/null
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.5.1-bin.zip
diff --git a/gradlew b/gradlew
new file mode 100755 (executable)
index 0000000..cccdd3d
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+    echo "$*"
+}
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+  NONSTOP* )
+    nonstop=true
+    ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Escape application args
+save () {
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+    echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+  cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644 (file)
index 0000000..e95643d
--- /dev/null
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off\r
+@rem ##########################################################################\r
+@rem\r
+@rem  Gradle startup script for Windows\r
+@rem\r
+@rem ##########################################################################\r
+\r
+@rem Set local scope for the variables with windows NT shell\r
+if "%OS%"=="Windows_NT" setlocal\r
+\r
+set DIRNAME=%~dp0\r
+if "%DIRNAME%" == "" set DIRNAME=.\r
+set APP_BASE_NAME=%~n0\r
+set APP_HOME=%DIRNAME%\r
+\r
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\r
+set DEFAULT_JVM_OPTS=\r
+\r
+@rem Find java.exe\r
+if defined JAVA_HOME goto findJavaFromJavaHome\r
+\r
+set JAVA_EXE=java.exe\r
+%JAVA_EXE% -version >NUL 2>&1\r
+if "%ERRORLEVEL%" == "0" goto init\r
+\r
+echo.\r
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\r
+echo.\r
+echo Please set the JAVA_HOME variable in your environment to match the\r
+echo location of your Java installation.\r
+\r
+goto fail\r
+\r
+:findJavaFromJavaHome\r
+set JAVA_HOME=%JAVA_HOME:"=%\r
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe\r
+\r
+if exist "%JAVA_EXE%" goto init\r
+\r
+echo.\r
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\r
+echo.\r
+echo Please set the JAVA_HOME variable in your environment to match the\r
+echo location of your Java installation.\r
+\r
+goto fail\r
+\r
+:init\r
+@rem Get command-line arguments, handling Windows variants\r
+\r
+if not "%OS%" == "Windows_NT" goto win9xME_args\r
+\r
+:win9xME_args\r
+@rem Slurp the command line arguments.\r
+set CMD_LINE_ARGS=\r
+set _SKIP=2\r
+\r
+:win9xME_args_slurp\r
+if "x%~1" == "x" goto execute\r
+\r
+set CMD_LINE_ARGS=%*\r
+\r
+:execute\r
+@rem Setup the command line\r
+\r
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar\r
+\r
+@rem Execute Gradle\r
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\r
+\r
+:end\r
+@rem End local scope for the variables with windows NT shell\r
+if "%ERRORLEVEL%"=="0" goto mainEnd\r
+\r
+:fail\r
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\r
+rem the _cmd.exe /c_ return code!\r
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1\r
+exit /b 1\r
+\r
+:mainEnd\r
+if "%OS%"=="Windows_NT" endlocal\r
+\r
+:omega\r
diff --git a/plugins/build.gradle b/plugins/build.gradle
new file mode 100644 (file)
index 0000000..6b01df3
--- /dev/null
@@ -0,0 +1,3 @@
+sonarqube {
+  skipProject = true
+}
diff --git a/plugins/sonar-xoo-plugin/build.gradle b/plugins/sonar-xoo-plugin/build.gradle
new file mode 100644 (file)
index 0000000..ff4cd6c
--- /dev/null
@@ -0,0 +1,44 @@
+configurations {
+  testCompile.extendsFrom(compileOnly)
+}
+
+dependencies {
+  compile 'com.google.guava:guava'
+  compile 'commons-io:commons-io'
+  compile 'commons-lang:commons-lang'
+  compileOnly 'com.google.code.findbugs:jsr305'
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+
+  testCompile 'junit:junit'
+  testCompile 'org.assertj:assertj-core'
+  testCompile 'org.mockito:mockito-core'
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'xoo',
+      'Plugin-Version': project.version,
+      'Plugin-Class': 'org.sonar.xoo.XooPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': project.version,
+      'SonarLint-Supported': 'true',
+      'Plugin-Name': 'Xoo'
+    )
+  }
+  into('META-INF/lib') {
+    from configurations.compile
+  }
+}
+
+artifactoryPublish.skip = false
+
+publishing {
+  publications {
+    mavenJava(MavenPublication) {
+      from components.java
+      artifact sourcesJar
+      artifact javadocJar
+    }
+  }
+}
diff --git a/plugins/sonar-xoo-plugin/pom.xml b/plugins/sonar-xoo-plugin/pom.xml
deleted file mode 100644 (file)
index 0dcffa8..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-    <relativePath>../..</relativePath>
-  </parent>
-  <artifactId>sonar-xoo-plugin</artifactId>
-  <name>SonarQube :: Plugins :: Xoo</name>
-  <packaging>sonar-plugin</packaging>
-  <description>Sample of plugin to document and test available APIs</description>
-
-  <properties>
-    <sonar.skip>true</sonar.skip>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <scope>provided</scope>
-    </dependency>
-
-    <!-- unit testing -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <configuration>
-          <pluginKey>xoo</pluginKey>
-          <pluginName>Xoo</pluginName>
-          <pluginClass>org.sonar.xoo.XooPlugin</pluginClass>
-          <sonarLintSupported>true</sonarLintSupported>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/pom.xml b/pom.xml
deleted file mode 100644 (file)
index 6adcdfb..0000000
--- a/pom.xml
+++ /dev/null
@@ -1,1554 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.parent</groupId>
-    <artifactId>parent</artifactId>
-    <version>44</version>
-  </parent>
-  <groupId>org.sonarsource.sonarqube</groupId>
-  <artifactId>sonarqube</artifactId>
-  <packaging>pom</packaging>
-  <version>7.1-SNAPSHOT</version>
-  <name>SonarQube</name>
-  <url>http://www.sonarqube.org/</url>
-  <description>Open source platform for continuous inspection of code quality</description>
-
-  <modules>
-    <module>sonar-plugin-api-deps</module>
-    <module>sonar-application</module>
-    <module>sonar-scanner-engine</module>
-    <module>sonar-scanner-protocol</module>
-    <module>sonar-scanner-engine-shaded</module>
-    <module>sonar-check-api</module>
-    <module>sonar-core</module>
-    <module>sonar-duplications</module>
-    <module>sonar-home</module>
-    <module>sonar-markdown</module>
-    <module>sonar-plugin-api</module>
-    <module>server</module>
-    <module>sonar-ws</module>
-    <module>sonar-ws-generator</module>
-    <module>sonar-testing-harness</module>
-    <module>plugins/sonar-xoo-plugin</module>
-  </modules>
-
-  <organization>
-    <name>SonarSource</name>
-    <url>http://www.sonarsource.com</url>
-  </organization>
-  <inceptionYear>2009</inceptionYear>
-
-  <issueManagement>
-    <system>jira</system>
-    <url>http://jira.sonarsource.com/browse/SONAR</url>
-  </issueManagement>
-
-  <properties>
-    <!-- see http://repo1.maven.org/maven2/org/sonarsource/dotnet/sonar-csharp-plugin/ -->
-    <!-- Do not forget to exclude any new transitive dependencies -->
-    <sonarCSharp.version>6.7.1.4347</sonarCSharp.version>
-    <!-- see http://repo1.maven.org/maven2/org/sonarsource/java/sonar-java-plugin/ -->
-    <!-- Do not forget to exclude any new transitive dependencies -->
-    <sonarJava.version>5.1.0.13090</sonarJava.version>
-    <!-- see http://repo1.maven.org/maven2/org/sonarsource/javascript/sonar-javascript-plugin/ -->
-    <!-- Do not forget to exclude any new transitive dependencies -->
-    <sonarJavaScript.version>4.0.0.5862</sonarJavaScript.version>
-    <!-- see http://repo1.maven.org/maven2/org/sonarsource/php/sonar-php-plugin/ -->
-    <!-- Do not forget to exclude any new transitive dependencies -->
-    <sonarPhp.version>2.12.1.3018</sonarPhp.version>
-    <!-- see http://repo1.maven.org/maven2/org/sonarsource/python/sonar-python-plugin/ -->
-    <!-- Do not forget to exclude any new transitive dependencies -->
-    <sonarPython.version>1.9.0.2010</sonarPython.version>
-    <!-- see http://repo1.maven.org/maven2/org/sonarsource/flex/sonar-flex-plugin/ -->
-    <!-- Do not forget to exclude any new transitive dependencies -->
-    <sonarFlex.version>2.3</sonarFlex.version>
-    <!-- see http://repo1.maven.org/maven2/org/sonarsource/xml/sonar-xml-plugin/ -->
-    <!-- Do not forget to exclude any new transitive dependencies -->
-    <sonarXml.version>1.4.3.1027</sonarXml.version>
-    <!-- see https://repo1.maven.org/maven2/org/sonarsource/typescript/sonar-typescript-plugin/ -->
-    <sonarTs.version>1.5.0.2122</sonarTs.version>
-    <!-- see http://repo1.maven.org/maven2/org/sonarsource/scm/git/sonar-scm-git-plugin/ -->
-    <sonarGit.version>1.3.0.869</sonarGit.version>
-    <!-- see http://repo1.maven.org/maven2/org/sonarsource/scm/svn/sonar-scm-svn-plugin/ -->
-    <sonarSvn.version>1.6.0.860</sonarSvn.version>
-    <sonarUpdateCenter.version>1.18.0.487</sonarUpdateCenter.version>
-    <h2.version>1.3.176</h2.version>
-    <jetty.version>8.1.12.v20130726</jetty.version>
-    <logback.version>1.2.3</logback.version>
-    <slf4j.version>1.7.25</slf4j.version>
-
-    <!-- Be aware that Log4j is used by Elasticsearch client -->
-    <log4j.version>2.8.2</log4j.version>
-    <tomcat.version>8.5.23</tomcat.version>
-    <elasticsearch.version>5.6.3</elasticsearch.version>
-    <orchestrator.version>3.15.2.1322</orchestrator.version>
-    <okhttp.version>3.7.0</okhttp.version>
-    <jackson.version>2.6.6</jackson.version>
-    <jjwt.version>0.9.0</jjwt.version>
-    <protobuf.version>3.5.1</protobuf.version>
-
-    <hazelcast.version>3.8.6</hazelcast.version>
-
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <maven.min.version>3.3.9</maven.min.version>
-    <timestamp>${maven.build.timestamp}</timestamp>
-    <maven.build.timestamp.format>yyyy-MM-dd'T'HH:mm:ssZ</maven.build.timestamp.format>
-    <license.title>SonarQube</license.title>
-
-    <skipSanityChecks>false</skipSanityChecks>
-
-    <argLine>-Xmx512m -Djava.awt.headless=true</argLine>
-    <maven.test.redirectTestOutputToFile>true</maven.test.redirectTestOutputToFile>
-
-    <!-- used for deployment to SonarSource Artifactory -->
-    <gitRepositoryName>sonarqube</gitRepositoryName>
-    <!-- Release: enable publication to Bintray -->
-    <artifactsToPublish>${project.groupId}:sonar-application:zip</artifactsToPublish>
-  </properties>
-
-  <build>
-    <extensions>
-      <extension>
-        <groupId>kr.motd.maven</groupId>
-        <artifactId>os-maven-plugin</artifactId>
-        <version>1.5.0.Final</version>
-      </extension>
-    </extensions>
-
-    <pluginManagement>
-      <!-- Plugins ordered by shortname (assembly, antrun ...) -->
-      <plugins>
-        <plugin>
-          <groupId>com.github.eirslett</groupId>
-          <artifactId>frontend-maven-plugin</artifactId>
-          <version>1.6</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-assembly-plugin</artifactId>
-          <version>3.1.0</version>
-          <configuration>
-            <archiverConfig>
-              <!-- Workaround for http://jira.codehaus.org/browse/MASSEMBLY-422 -->
-              <!-- 420(dec) = 644(oct) -->
-              <fileMode>420</fileMode>
-              <!-- 493(dec) = 755(oct) -->
-              <directoryMode>493</directoryMode>
-              <defaultDirectoryMode>493</defaultDirectoryMode>
-            </archiverConfig>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.codehaus.mojo</groupId>
-          <artifactId>build-helper-maven-plugin</artifactId>
-          <version>3.0.0</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-clean-plugin</artifactId>
-          <version>3.0.0</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-dependency-plugin</artifactId>
-          <version>3.0.2</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-enforcer-plugin</artifactId>
-          <version>3.0.0-M1</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-gpg-plugin</artifactId>
-          <version>1.6</version>
-        </plugin>
-        <plugin>
-          <groupId>org.jacoco</groupId>
-          <artifactId>jacoco-maven-plugin</artifactId>
-          <version>0.7.9</version>
-          <configuration>
-            <excludes>
-              <exclude>*_javassist_*</exclude>
-            </excludes>
-            <includes>
-              <include>org.sonar.*</include>
-              <include>org.sonarqube.*</include>
-            </includes>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-javadoc-plugin</artifactId>
-          <version>3.0.0-M1</version>
-          <configuration>
-            <author>false</author>
-            <linksource>true</linksource>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-jar-plugin</artifactId>
-          <version>3.0.2</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-jxr-plugin</artifactId>
-          <version>2.5</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-resources-plugin</artifactId>
-          <version>3.0.2</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-shade-plugin</artifactId>
-          <version>3.1.0</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-source-plugin</artifactId>
-          <version>3.0.1</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-surefire-plugin</artifactId>
-          <version>2.20.1</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-war-plugin</artifactId>
-          <version>3.2.0</version>
-        </plugin>
-        <plugin>
-          <!-- not thread safe -->
-          <groupId>org.codehaus.sonar</groupId>
-          <artifactId>sonar-dev-maven-plugin</artifactId>
-          <version>1.8</version>
-        </plugin>
-        <plugin>
-          <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-          <artifactId>sonar-packaging-maven-plugin</artifactId>
-          <version>1.18.0.372</version>
-        </plugin>
-        <plugin>
-          <groupId>org.owasp</groupId>
-          <artifactId>dependency-check-maven</artifactId>
-          <version>3.0.1</version>
-          <configuration>
-            <failBuildOnCVSS>8</failBuildOnCVSS>
-            <suppressionFile>dependency-check-suppressions.xml</suppressionFile>
-            <enableExperimental>true</enableExperimental>
-          </configuration>
-        </plugin>
-        <plugin>
-          <!--
-          Detection of conflicts in classpath.
-          Command line is: mvn org.basepom.maven:duplicate-finder-maven-plugin:check
-          See https://github.com/basepom/duplicate-finder-maven-plugin
-          -->
-          <groupId>org.basepom.maven</groupId>
-          <artifactId>duplicate-finder-maven-plugin</artifactId>
-          <version>1.1.1</version>
-          <configuration>
-            <printEqualFiles>true</printEqualFiles>
-            <!--
-            <failBuildInCaseOfDifferentContentConflict>true</failBuildInCaseOfDifferentContentConflict>
-            <failBuildInCaseOfEqualContentConflict>true</failBuildInCaseOfEqualContentConflict>
-            <failBuildInCaseOfConflict>true</failBuildInCaseOfConflict>
-            -->
-            <checkCompileClasspath>true</checkCompileClasspath>
-            <checkRuntimeClasspath>true</checkRuntimeClasspath>
-            <checkTestClasspath>false</checkTestClasspath>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.xolstice.maven.plugins</groupId>
-          <artifactId>protobuf-maven-plugin</artifactId>
-          <version>0.5.1</version>
-        </plugin>
-        <plugin>
-          <groupId>com.github.genthaler</groupId>
-          <artifactId>beanshell-maven-plugin</artifactId>
-          <version>1.4</version>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-enforcer-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>enforce-rules</id>
-            <goals>
-              <goal>enforce</goal>
-            </goals>
-            <configuration>
-              <rules>
-                <requirePluginVersions>
-                  <message>Build reproducibility : always define plugin versions</message>
-                  <banLatest>true</banLatest>
-                  <banRelease>true</banRelease>
-                  <phases>clean,deploy</phases>
-                </requirePluginVersions>
-                <requireReleaseDeps>
-                  <message>No SNAPSHOT versions allowed for dependencies</message>
-                  <onlyWhenRelease>true</onlyWhenRelease>
-                </requireReleaseDeps>
-                <requireJavaVersion>
-                  <message>To build this project JDK ${jdk.min.version} (or upper) is required. Please install it.
-                  </message>
-                  <version>${jdk.min.version}</version>
-                </requireJavaVersion>
-                <requireMavenVersion>
-                  <version>[${maven.min.version},)</version>
-                </requireMavenVersion>
-                <bannedDependencies>
-                  <!-- See SONAR-2512 -->
-                  <message>commons-beanutils:commons-beanutils should be used instead</message>
-                  <excludes>
-                    <exclude>commons-beanutils:commons-beanutils-core</exclude>
-                  </excludes>
-                  <searchTransitive>true</searchTransitive>
-                </bannedDependencies>
-                <requireNoRepositories>
-                  <message>Definition of new repositories is not allowed in order to deploy to central repository.
-                  </message>
-                </requireNoRepositories>
-              </rules>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <!--
-      Choosing a random timezone when executing tests allows to detect
-      early the tests that are coupled with local environment.
-      -->
-      <plugin>
-        <groupId>com.github.genthaler</groupId>
-        <artifactId>beanshell-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>randomize-environment</id>
-            <phase>validate</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <quiet>true</quiet>
-              <script>
-                <![CDATA[
-                String[] timezones = new String[] {"GMT-9", "UTC", "GMT+9"};
-                String testTimezone = timezones[new java.util.Random().nextInt(timezones.length)];
-                project.getProperties().setProperty("testTimezone", testTimezone);
-                logger.info("Timezone used for tests: " + testTimezone);
-                ]]>
-              </script>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jxr-plugin</artifactId>
-        <configuration>
-          <aggregate>true</aggregate>
-          <linkJavadoc>true</linkJavadoc>
-          <javadocDir>${project.reporting.outputDirectory}/${project.version}/apidocs</javadocDir>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <runOrder>random</runOrder>
-          <systemPropertyVariables>
-            <!-- keep system temp directory clean -->
-            <java.io.tmpdir>${project.build.directory}</java.io.tmpdir>
-            <!--
-            See profile 'randomize-environment'
-            -->
-            <user.timezone>${testTimezone}</user.timezone>
-          </systemPropertyVariables>
-          <threadCount>1</threadCount>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
-  <dependencyManagement>
-    <dependencies>
-      <!-- SonarQube modules -->
-      <dependency>
-        <groupId>org.codehaus.sonar</groupId>
-        <artifactId>sonar-channel</artifactId>
-        <version>4.1</version>
-        <exclusions>
-          <exclusion>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>org.codehaus.sonar</groupId>
-        <artifactId>sonar-classloader</artifactId>
-        <version>1.0</version>
-      </dependency>
-      <dependency>
-        <groupId>${project.groupId}</groupId>
-        <artifactId>sonar-markdown</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>${project.groupId}</groupId>
-        <artifactId>sonar-core</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>${project.groupId}</groupId>
-        <artifactId>sonar-db-dao</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>${project.groupId}</groupId>
-        <artifactId>sonar-db-migration</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>${project.groupId}</groupId>
-        <artifactId>sonar-db-testing</artifactId>
-        <version>${project.version}</version>
-        <type>pom</type>
-      </dependency>
-      <dependency>
-        <groupId>${project.groupId}</groupId>
-        <artifactId>sonar-scanner-protocol</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>${project.groupId}</groupId>
-        <artifactId>sonar-ws</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>${project.groupId}</groupId>
-        <artifactId>sonar-home</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>${project.groupId}</groupId>
-        <artifactId>sonar-plugin-api</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>${project.groupId}</groupId>
-        <artifactId>sonar-process</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>${project.groupId}</groupId>
-        <artifactId>sonar-server</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.sonarsource.update-center</groupId>
-        <artifactId>sonar-update-center-common</artifactId>
-        <version>${sonarUpdateCenter.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.sonarsource.orchestrator</groupId>
-        <artifactId>sonar-orchestrator</artifactId>
-        <version>${orchestrator.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.codehaus.sonar</groupId>
-        <artifactId>sonar-squid</artifactId>
-        <version>4.1</version>
-        <exclusions>
-          <exclusion>
-            <!--
-            Provided at runtime by sonar-plugin-api.
-            Do not use transitive version 4.1 but the current version.
-             -->
-            <groupId>org.codehaus.sonar</groupId>
-            <artifactId>sonar-check-api</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>org.sonarsource.sonarqube</groupId>
-        <artifactId>sonar-xoo-plugin</artifactId>
-        <version>${project.version}</version>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
-        <groupId>org.sonarsource.scm.git</groupId>
-        <artifactId>sonar-scm-git-plugin</artifactId>
-        <version>${sonarGit.version}</version>
-        <type>sonar-plugin</type>
-        <exclusions>
-          <!--
-          no need for transitive dependencies as only the JAR file
-          is needed for the zip bundle
-          -->
-          <exclusion>
-            <groupId>org.eclipse.jgit</groupId>
-            <artifactId>org.eclipse.jgit</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>org.sonarsource.scm.svn</groupId>
-        <artifactId>sonar-scm-svn-plugin</artifactId>
-        <version>${sonarSvn.version}</version>
-        <type>sonar-plugin</type>
-        <exclusions>
-          <!--
-          no need for transitive dependencies as only the JAR file
-          is needed for the zip bundle
-          -->
-          <exclusion>
-            <groupId>org.tmatesoft.svnkit</groupId>
-            <artifactId>svnkit</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>org.sonarsource.typescript</groupId>
-        <artifactId>sonar-typescript-plugin</artifactId>
-        <version>${sonarTs.version}</version>
-        <type>sonar-plugin</type>
-        <exclusions>
-          <exclusion>
-            <groupId>org.sonarsource.analyzer-commons</groupId>
-            <artifactId>sonar-analyzer-commons</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>org.sonarsource.sonarqube</groupId>
-        <artifactId>sonar-db-core</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.sonarsource.sonarqube</groupId>
-        <artifactId>sonar-db-testing</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.sonarsource.sonarqube</groupId>
-        <artifactId>sonar-testing-harness</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.sonarsource.sonarqube</groupId>
-        <artifactId>sonar-plugin-bridge</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.sonarsource.java</groupId>
-        <artifactId>sonar-java-plugin</artifactId>
-        <version>${sonarJava.version}</version>
-        <type>sonar-plugin</type>
-        <exclusions>
-          <!--
-          no need for transitive dependencies as only the JAR file
-          is needed for the zip bundle
-          -->
-          <exclusion>
-            <groupId>classworlds</groupId>
-            <artifactId>classworlds</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-all</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>org.sonarsource.java</groupId>
-            <artifactId>java-surefire</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>org.sonarsource.java</groupId>
-            <artifactId>java-jacoco</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>org.sonarsource.java</groupId>
-            <artifactId>java-frontend</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>org.sonarsource.java</groupId>
-            <artifactId>java-checks</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>org.sonarsource.javascript</groupId>
-        <artifactId>sonar-javascript-plugin</artifactId>
-        <version>${sonarJavaScript.version}</version>
-        <type>sonar-plugin</type>
-        <exclusions>
-          <!--
-          no need for transitive dependencies as only the JAR file
-          is needed for the zip bundle
-          -->
-          <exclusion>
-            <groupId>org.sonarsource.javascript</groupId>
-            <artifactId>javascript-frontend</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>org.sonarsource.javascript</groupId>
-            <artifactId>javascript-checks</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>org.sonarsource.dotnet</groupId>
-        <artifactId>sonar-csharp-plugin</artifactId>
-        <version>${sonarCSharp.version}</version>
-        <type>sonar-plugin</type>
-        <exclusions>
-          <exclusion>
-            <groupId>org.sonarsource.dotnet</groupId>
-            <artifactId>sonar-dotnet-tests-library</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>org.sonarsource.dotnet</groupId>
-            <artifactId>sonar-dotnet-shared-library</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>org.sonarsource.sslr-squid-bridge</groupId>
-            <artifactId>sslr-squid-bridge</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>org.sonarsource.php</groupId>
-        <artifactId>sonar-php-plugin</artifactId>
-        <version>${sonarPhp.version}</version>
-        <type>sonar-plugin</type>
-        <exclusions>
-          <!--
-          no need for transitive dependencies as only the JAR file
-          is needed for the zip bundle
-          -->
-          <exclusion>
-            <groupId>org.sonarsource.php</groupId>
-            <artifactId>php-frontend</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>org.sonarsource.php</groupId>
-            <artifactId>php-checks</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>com.thoughtworks.xstream</groupId>
-            <artifactId>xstream</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>org.sonarsource.python</groupId>
-        <artifactId>sonar-python-plugin</artifactId>
-        <version>${sonarPython.version}</version>
-        <type>sonar-plugin</type>
-        <exclusions>
-          <!--
-          no need for transitive dependencies as only the JAR file
-          is needed for the zip bundle
-          -->
-          <exclusion>
-            <groupId>org.sonarsource.python</groupId>
-            <artifactId>python-squid</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>org.sonarsource.python</groupId>
-            <artifactId>python-checks</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>org.codehaus.woodstox</groupId>
-            <artifactId>woodstox-core-lgpl</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>org.codehaus.staxmate</groupId>
-            <artifactId>staxmate</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>org.sonarsource.flex</groupId>
-        <artifactId>sonar-flex-plugin</artifactId>
-        <version>${sonarFlex.version}</version>
-        <type>sonar-plugin</type>
-        <exclusions>
-          <!--
-          no need for transitive dependencies as only the JAR file
-          is needed for the zip bundle
-          -->
-          <exclusion>
-            <groupId>org.sonarsource.flex</groupId>
-            <artifactId>flex-squid</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>org.sonarsource.flex</groupId>
-            <artifactId>flex-checks</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>org.sonarsource.xml</groupId>
-        <artifactId>sonar-xml-plugin</artifactId>
-        <version>${sonarXml.version}</version>
-        <type>sonar-plugin</type>
-        <exclusions>
-          <!--
-          no need for transitive dependencies as only the JAR file
-          is needed for the zip bundle
-          -->
-          <exclusion>
-            <groupId>xalan</groupId>
-            <artifactId>xalan</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>xerces</groupId>
-            <artifactId>xercesImpl</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>org.sonarsource.xml</groupId>
-            <artifactId>xml-squid</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>com.hazelcast</groupId>
-        <artifactId>hazelcast</artifactId>
-        <version>${hazelcast.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>com.hazelcast</groupId>
-        <artifactId>hazelcast-client</artifactId>
-        <version>${hazelcast.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.elasticsearch.client</groupId>
-        <artifactId>transport</artifactId>
-        <version>${elasticsearch.version}</version>
-        <exclusions>
-          <exclusion>
-            <groupId>org.elasticsearch.plugin</groupId>
-            <artifactId>lang-mustache-client</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>org.elasticsearch.plugin</groupId>
-            <artifactId>transport-netty3-client</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>com.github.tlrx</groupId>
-        <artifactId>elasticsearch-test</artifactId>
-        <version>1.2.1</version>
-      </dependency>
-      <dependency>
-        <groupId>com.google.guava</groupId>
-        <artifactId>guava</artifactId>
-        <version>18.0</version>
-      </dependency>
-      <dependency>
-        <groupId>com.google.code.findbugs</groupId>
-        <artifactId>jsr305</artifactId>
-        <version>3.0.2</version>
-      </dependency>
-      <dependency>
-        <groupId>commons-dbutils</groupId>
-        <artifactId>commons-dbutils</artifactId>
-        <version>1.5</version>
-      </dependency>
-      <dependency>
-        <groupId>commons-io</groupId>
-        <artifactId>commons-io</artifactId>
-        <version>2.4</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.commons</groupId>
-        <artifactId>commons-csv</artifactId>
-        <version>1.4</version>
-      </dependency>
-      <dependency>
-        <groupId>commons-codec</groupId>
-        <artifactId>commons-codec</artifactId>
-        <version>1.8</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.commons</groupId>
-        <artifactId>commons-email</artifactId>
-        <version>1.5</version>
-      </dependency>
-      <dependency>
-        <groupId>commons-lang</groupId>
-        <artifactId>commons-lang</artifactId>
-        <version>2.6</version>
-      </dependency>
-      <dependency>
-        <groupId>commons-dbcp</groupId>
-        <artifactId>commons-dbcp</artifactId>
-        <version>1.4</version>
-      </dependency>
-      <dependency>
-        <groupId>com.ibm.icu</groupId>
-        <artifactId>icu4j</artifactId>
-        <!-- animal-sniffer doesn't work with 2.6.1 -->
-        <version>3.4.4</version>
-      </dependency>
-      <dependency>
-        <groupId>javax.xml.bind</groupId>
-        <artifactId>jaxb-api</artifactId>
-        <version>2.3.0</version>
-      </dependency>
-      <dependency>
-        <groupId>com.googlecode.json-simple</groupId>
-        <artifactId>json-simple</artifactId>
-        <version>1.1.1</version>
-        <exclusions>
-          <exclusion>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>io.jsonwebtoken</groupId>
-        <artifactId>jjwt</artifactId>
-        <version>${jjwt.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>com.fasterxml.jackson.core</groupId>
-        <artifactId>jackson-core</artifactId>
-        <version>${jackson.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>com.fasterxml.jackson.core</groupId>
-        <artifactId>jackson-databind</artifactId>
-        <version>${jackson.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>com.fasterxml.jackson.core</groupId>
-        <artifactId>jackson-annotations</artifactId>
-        <version>${jackson.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.yaml</groupId>
-        <artifactId>snakeyaml</artifactId>
-        <version>1.15</version>
-      </dependency>
-      <dependency>
-        <groupId>org.mybatis</groupId>
-        <artifactId>mybatis</artifactId>
-        <version>3.4.4</version>
-      </dependency>
-      <dependency>
-        <groupId>org.nanohttpd</groupId>
-        <artifactId>nanohttpd</artifactId>
-        <version>2.3.0</version>
-      </dependency>
-      <dependency>
-        <groupId>org.picocontainer</groupId>
-        <artifactId>picocontainer</artifactId>
-        <version>2.15</version>
-      </dependency>
-      <dependency>
-        <groupId>org.slf4j</groupId>
-        <artifactId>slf4j-api</artifactId>
-        <version>${slf4j.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.slf4j</groupId>
-        <artifactId>jul-to-slf4j</artifactId>
-        <version>${slf4j.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.slf4j</groupId>
-        <artifactId>jcl-over-slf4j</artifactId>
-        <version>${slf4j.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.slf4j</groupId>
-        <artifactId>log4j-over-slf4j</artifactId>
-        <version>${slf4j.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.logging.log4j</groupId>
-        <artifactId>log4j-to-slf4j</artifactId>
-        <version>${log4j.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.logging.log4j</groupId>
-        <artifactId>log4j-api</artifactId>
-        <version>${log4j.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.logging.log4j</groupId>
-        <artifactId>log4j-core</artifactId>
-        <version>${log4j.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>ch.qos.logback</groupId>
-        <artifactId>logback-access</artifactId>
-        <version>${logback.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>ch.qos.logback</groupId>
-        <artifactId>logback-classic</artifactId>
-        <version>${logback.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>ch.qos.logback</groupId>
-        <artifactId>logback-core</artifactId>
-        <version>${logback.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>com.h2database</groupId>
-        <artifactId>h2</artifactId>
-        <version>${h2.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>com.microsoft.sqlserver</groupId>
-        <artifactId>mssql-jdbc</artifactId>
-        <version>6.2.2.jre8</version>
-      </dependency>
-      <dependency>
-        <groupId>mysql</groupId>
-        <artifactId>mysql-connector-java</artifactId>
-        <version>5.1.42</version>
-      </dependency>
-      <dependency>
-        <groupId>com.oracle.jdbc</groupId>
-        <artifactId>ojdbc8</artifactId>
-        <!--
-             This version is compatible with Oracle 11g and 12c :
-             http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html#01_02
-        -->
-        <version>12.2.0.1.0</version>
-      </dependency>
-      <dependency>
-        <groupId>org.postgresql</groupId>
-        <artifactId>postgresql</artifactId>
-        <version>42.2.1</version>
-      </dependency>
-      <dependency>
-        <groupId>org.codehaus.woodstox</groupId>
-        <artifactId>woodstox-core-lgpl</artifactId>
-        <version>4.4.0</version>
-        <exclusions>
-          <exclusion>
-            <!-- provided by Java 1.7 -->
-            <groupId>javax.xml.stream</groupId>
-            <artifactId>stax-api</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>org.codehaus.staxmate</groupId>
-        <artifactId>staxmate</artifactId>
-        <version>2.0.1</version>
-        <exclusions>
-          <!-- see SONAR-879 -->
-          <exclusion>
-            <groupId>org.codehaus.woodstox</groupId>
-            <artifactId>stax2-api</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>stax</groupId>
-            <artifactId>stax-api</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>org.codehaus.woodstox</groupId>
-            <artifactId>woodstox-core-asl</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>org.mockito</groupId>
-        <artifactId>mockito-core</artifactId>
-        <version>2.13.0</version>
-        <exclusions>
-          <exclusion>
-            <groupId>org.hamcrest</groupId>
-            <artifactId>hamcrest-core</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>org.assertj</groupId>
-        <artifactId>assertj-core</artifactId>
-        <version>3.9.0</version>
-      </dependency>
-      <dependency>
-        <groupId>org.assertj</groupId>
-        <artifactId>assertj-guava</artifactId>
-        <version>3.0.0</version>
-      </dependency>
-      <dependency>
-        <groupId>org.codehaus.woodstox</groupId>
-        <artifactId>stax2-api</artifactId>
-        <version>3.1.4</version>
-        <exclusions>
-          <exclusion>
-            <groupId>stax</groupId>
-            <artifactId>stax-api</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>javax.servlet</groupId>
-        <artifactId>javax.servlet-api</artifactId>
-        <version>3.0.1</version>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.jetty</groupId>
-        <artifactId>jetty-server</artifactId>
-        <version>${jetty.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.hamcrest</groupId>
-        <artifactId>hamcrest-core</artifactId>
-        <version>1.3</version>
-      </dependency>
-      <dependency>
-        <groupId>org.hamcrest</groupId>
-        <artifactId>hamcrest-all</artifactId>
-        <version>1.3</version>
-      </dependency>
-      <dependency>
-        <groupId>junit</groupId>
-        <artifactId>junit</artifactId>
-        <version>4.12</version>
-      </dependency>
-      <dependency>
-        <groupId>com.tngtech.java</groupId>
-        <artifactId>junit-dataprovider</artifactId>
-        <version>1.9.2</version>
-      </dependency>
-      <dependency>
-        <groupId>org.dbunit</groupId>
-        <artifactId>dbunit</artifactId>
-        <version>2.4.5</version>
-        <exclusions>
-          <!--  removing commons lang 2.1 and xerces-->
-          <exclusion>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>xerces</groupId>
-            <artifactId>xmlParserAPIs</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>xerces</groupId>
-            <artifactId>xercesImpl</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.jetty</groupId>
-        <artifactId>test-jetty-servlet</artifactId>
-        <version>${jetty.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.reflections</groupId>
-        <artifactId>reflections</artifactId>
-        <version>0.9.9</version>
-      </dependency>
-      <dependency>
-        <groupId>com.google.code.gson</groupId>
-        <artifactId>gson</artifactId>
-        <version>2.3.1</version>
-      </dependency>
-      <dependency>
-        <groupId>org.sonarsource</groupId>
-        <artifactId>sonar-persistit</artifactId>
-        <version>3.3.2</version>
-        <exclusions>
-          <exclusion>
-            <groupId>commons-logging</groupId>
-            <artifactId>commons-logging</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>com.github.kevinsawicki</groupId>
-        <artifactId>http-request</artifactId>
-        <version>5.4.1</version>
-      </dependency>
-      <dependency>
-        <groupId>org.codehaus.sonar.runner</groupId>
-        <artifactId>sonar-runner-api</artifactId>
-        <version>2.4</version>
-      </dependency>
-      <dependency>
-        <groupId>org.freemarker</groupId>
-        <artifactId>freemarker</artifactId>
-        <version>2.3.20</version>
-      </dependency>
-      <dependency>
-        <groupId>com.google.protobuf</groupId>
-        <artifactId>protobuf-java</artifactId>
-        <version>${protobuf.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>net.jpountz.lz4</groupId>
-        <artifactId>lz4</artifactId>
-        <version>1.3.0</version>
-      </dependency>
-      <dependency>
-        <groupId>org.subethamail</groupId>
-        <artifactId>subethasmtp</artifactId>
-        <version>3.1.7</version>
-        <scope>test</scope>
-      </dependency>
-
-      <!-- tomcat -->
-      <dependency>
-        <groupId>org.apache.tomcat.embed</groupId>
-        <artifactId>tomcat-embed-core</artifactId>
-        <version>${tomcat.version}</version>
-        <exclusions>
-          <exclusion>
-            <groupId>org.apache.tomcat.embed</groupId>
-            <artifactId>tomcat-embed-jasper</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>org.eclipse.jdt</groupId>
-            <artifactId>ecj</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>com.squareup.okhttp3</groupId>
-        <artifactId>okhttp</artifactId>
-        <version>${okhttp.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>com.squareup.okhttp3</groupId>
-        <artifactId>mockwebserver</artifactId>
-        <version>${okhttp.version}</version>
-      </dependency>
-
-      <!-- Using scope=provided to exclude from all transitive dependencies -->
-      <dependency>
-        <groupId>xml-apis</groupId>
-        <artifactId>xml-apis</artifactId>
-        <version>1.4.01</version>
-        <scope>provided</scope>
-      </dependency>
-
-    </dependencies>
-  </dependencyManagement>
-
-  <mailingLists>
-    <mailingList>
-      <name>SonarQube users mailing list</name>
-      <subscribe>http://xircles.codehaus.org/projects/sonar/lists</subscribe>
-      <unsubscribe>http://xircles.codehaus.org/projects/sonar/lists</unsubscribe>
-      <post>user@sonar.codehaus.org</post>
-      <archive>http://www.nabble.com/Sonar-f30151.html</archive>
-    </mailingList>
-  </mailingLists>
-
-  <scm>
-    <connection>scm:git:git@github.com:SonarSource/sonarqube.git</connection>
-    <developerConnection>scm:git:git@github.com:SonarSource/sonarqube.git</developerConnection>
-    <url>https://github.com/SonarSource/sonarqube</url>
-    <tag>HEAD</tag>
-  </scm>
-
-  <ciManagement>
-    <system>travis-ci</system>
-    <url>https://travis-ci.org/SonarSource/sonarqube</url>
-  </ciManagement>
-
-  <licenses>
-    <license>
-      <name>GNU LGPL 3</name>
-      <url>http://www.gnu.org/licenses/lgpl.txt</url>
-      <distribution>repo</distribution>
-    </license>
-  </licenses>
-
-  <!-- Developers information should not be removed as it's
-  required for deployment -->
-
-  <developers>
-    <developer>
-      <id>bellingard</id>
-      <name>Fabrice Bellingard</name>
-      <email>fabrice.bellingard@sonarsource.com</email>
-      <organization>SonarSource</organization>
-      <timezone>+1</timezone>
-    </developer>
-    <developer>
-      <id>dbolkensteyn</id>
-      <name>Dinesh Bolkensteyn</name>
-      <email>dinesh.bolkensteyn@sonarsource.com</email>
-      <organization>SonarSource</organization>
-      <timezone>+1</timezone>
-    </developer>
-    <developer>
-      <id>dgageot</id>
-      <name>David Gageot</name>
-      <organization>SonarSource</organization>
-      <timezone>+1</timezone>
-    </developer>
-    <developer>
-      <id>ehartmann</id>
-      <name>Eric Hartmann</name>
-      <organization>SonarSource</organization>
-      <timezone>+1</timezone>
-    </developer>
-    <developer>
-      <id>fmallet</id>
-      <name>Freddy Mallet</name>
-      <email>freddy.mallet@sonarsource.com</email>
-      <organization>SonarSource</organization>
-      <timezone>+1</timezone>
-    </developer>
-    <developer>
-      <id>Godin</id>
-      <name>Evgeny Mandrikov</name>
-      <email>evgeny.mandrikov@sonarsource.com</email>
-      <organization>SonarSource</organization>
-      <timezone>+3</timezone>
-    </developer>
-    <developer>
-      <id>henryju</id>
-      <name>Julien Henry</name>
-      <email>julien.henry@sonarsource.com</email>
-      <organization>SonarSource</organization>
-      <timezone>+1</timezone>
-    </developer>
-    <developer>
-      <id>jblievremont</id>
-      <name>Jean-Baptiste Lievremont</name>
-      <organization>SonarSource</organization>
-      <timezone>+1</timezone>
-    </developer>
-    <developer>
-      <id>julienlancelot</id>
-      <name>Julien Lancelot</name>
-      <email>julien.lancelot@sonarsource.com</email>
-      <organization>SonarSource</organization>
-      <timezone>+1</timezone>
-    </developer>
-    <developer>
-      <id>olivier.gaudin</id>
-      <name>Olivier Gaudin</name>
-      <email>olivier.gaudin@sonarsource.com</email>
-      <organization>SonarSource</organization>
-      <timezone>+1</timezone>
-    </developer>
-    <developer>
-      <id>simonbrandhof</id>
-      <name>Simon Brandhof</name>
-      <email>simon.brandhof@sonarsource.com</email>
-      <organization>SonarSource</organization>
-      <timezone>+1</timezone>
-    </developer>
-    <developer>
-      <id>sns-seb</id>
-      <name>Sebastien Lesaint</name>
-      <organization>SonarSource</organization>
-      <timezone>+1</timezone>
-    </developer>
-    <developer>
-      <id>stas-vilchik</id>
-      <name>Stas Vilchik</name>
-      <organization>SonarSource</organization>
-      <timezone>+1</timezone>
-    </developer>
-    <developer>
-      <id>teryk</id>
-      <name>Teryk Bellahsene</name>
-      <organization>SonarSource</organization>
-      <timezone>+1</timezone>
-    </developer>
-  </developers>
-
-  <profiles>
-    <profile>
-      <id>dev</id>
-      <properties>
-        <skipSanityChecks>true</skipSanityChecks>
-        <enforcer.skip>true</enforcer.skip>
-      </properties>
-    </profile>
-    <profile>
-      <id>release</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-javadoc-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>attach-javadocs</id>
-                <goals>
-                  <goal>jar</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-
-    <profile>
-      <id>protobuf-compile</id>
-      <activation>
-        <file>
-          <exists>src/main/protobuf</exists>
-        </file>
-      </activation>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.xolstice.maven.plugins</groupId>
-            <artifactId>protobuf-maven-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>generate-protobuf-java-sources</id>
-                <goals>
-                  <goal>compile</goal>
-                </goals>
-                <configuration>
-                  <protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}
-                  </protocArtifact>
-                  <protoSourceRoot>${project.basedir}/src/main/protobuf</protoSourceRoot>
-                  <outputDirectory>${project.build.directory}/generated-sources/protobuf</outputDirectory>
-                </configuration>
-              </execution>
-            </executions>
-            <dependencies>
-              <dependency>
-                <groupId>com.google.protobuf</groupId>
-                <artifactId>protoc</artifactId>
-                <version>${protobuf.version}</version>
-                <type>exe</type>
-                <classifier>${os.detected.classifier}</classifier>
-              </dependency>
-            </dependencies>
-          </plugin>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>build-helper-maven-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>add-protobuf-generated-sources</id>
-                <phase>generate-sources</phase>
-                <goals>
-                  <goal>add-source</goal>
-                </goals>
-                <configuration>
-                  <sources>
-                    <source>${project.build.directory}/generated-sources/protobuf</source>
-                  </sources>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>protobuf-test-compile</id>
-      <activation>
-        <file>
-          <exists>src/test/protobuf</exists>
-        </file>
-      </activation>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.xolstice.maven.plugins</groupId>
-            <artifactId>protobuf-maven-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>generate-protobuf-java-tests</id>
-                <goals>
-                  <goal>test-compile</goal>
-                </goals>
-                <configuration>
-                  <protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}
-                  </protocArtifact>
-                  <protoTestSourceRoot>${project.basedir}/src/test/protobuf</protoTestSourceRoot>
-                  <outputDirectory>${project.build.directory}/generated-test-sources/protobuf</outputDirectory>
-                </configuration>
-              </execution>
-            </executions>
-            <dependencies>
-              <dependency>
-                <groupId>com.google.protobuf</groupId>
-                <artifactId>protoc</artifactId>
-                <version>${protobuf.version}</version>
-                <classifier>${os.detected.classifier}</classifier>
-                <type>exe</type>
-              </dependency>
-            </dependencies>
-          </plugin>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>build-helper-maven-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>add-protobuf-generated-tests</id>
-                <phase>generate-test-sources</phase>
-                <goals>
-                  <goal>add-test-source</goal>
-                </goals>
-                <configuration>
-                  <sources>
-                    <source>${project.build.directory}/generated-test-sources/protobuf</source>
-                  </sources>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-
-    <profile>
-      <!--
-      check if maven dependencies have vulnerabilities listed in CVE
-      Standalone command: mvn org.owasp:dependency-check-maven:check
-      See http://jeremylong.github.io/DependencyCheck
-      -->
-      <id>securityCheck</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.owasp</groupId>
-            <artifactId>dependency-check-maven</artifactId>
-            <executions>
-              <execution>
-                <goals>
-                  <goal>check</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-
-    <profile>
-      <!-- integration tests -->
-      <id>tests</id>
-      <modules>
-        <module>tests</module>
-        <module>tests/plugins</module>
-      </modules>
-    </profile>
-
-    <profile>
-      <id>deploy-sonarsource</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-enforcer-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>enforce-deploy-settings</id>
-                <goals>
-                  <goal>enforce</goal>
-                </goals>
-                <configuration>
-                  <rules>
-                    <requireProperty>
-                      <property>gitRepositoryName</property>
-                      <message>You must set name of Git repository in your pom</message>
-                    </requireProperty>
-                    <requireEnvironmentVariable>
-                      <variableName>ARTIFACTORY_URL</variableName>
-                    </requireEnvironmentVariable>
-                    <requireEnvironmentVariable>
-                      <variableName>ARTIFACTORY_DEPLOY_REPO</variableName>
-                    </requireEnvironmentVariable>
-                    <requireEnvironmentVariable>
-                      <variableName>ARTIFACTORY_DEPLOY_USERNAME</variableName>
-                    </requireEnvironmentVariable>
-                    <requireEnvironmentVariable>
-                      <variableName>ARTIFACTORY_DEPLOY_PASSWORD</variableName>
-                    </requireEnvironmentVariable>
-                  </rules>
-                  <fail>true</fail>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <!-- this maven plugin is not deployed in Maven Central. It should be downloaded
-            from JFrog JCenter or from SonarSource repositories -->
-            <groupId>org.jfrog.buildinfo</groupId>
-            <artifactId>artifactory-maven-plugin</artifactId>
-            <version>${version.artifactory.plugin}</version>
-            <executions>
-              <execution>
-                <id>build-info</id>
-                <goals>
-                  <goal>publish</goal>
-                </goals>
-                <configuration>
-                  <artifactory>
-                    <envVarsExcludePatterns>
-                      *password*,*PASSWORD*,*secret*,*MAVEN_CMD_LINE_ARGS*,sun.java.command,*token*,*TOKEN*,*LOGIN*,*login*
-                    </envVarsExcludePatterns>
-                    <includeEnvVars>true</includeEnvVars>
-                    <timeoutSec>60</timeoutSec>
-                  </artifactory>
-                  <deployProperties>
-                    <build.name>${gitRepositoryName}</build.name>
-                    <build.number>{{BUILD_NUMBER}}</build.number>
-                    <pr.branch.target>{{PULL_REQUEST_BRANCH_TARGET}}</pr.branch.target>
-                    <pr.number>{{PULL_REQUEST_NUMBER}}</pr.number>
-                    <vcs.branch>{{GIT_BRANCH}}</vcs.branch>
-                    <vcs.revision>{{GIT_COMMIT}}</vcs.revision>
-                    <version>${project.version}</version>
-                  </deployProperties>
-                  <licenses>
-                    <autoDiscover>true</autoDiscover>
-                    <includePublishedArtifacts>false</includePublishedArtifacts>
-                    <runChecks>true</runChecks>
-                    <scopes>project,provided</scopes>
-                    <violationRecipients>licences-control@sonarsource.com</violationRecipients>
-                  </licenses>
-                  <publisher>
-                    <contextUrl>${env.ARTIFACTORY_URL}</contextUrl>
-                    <repoKey>${env.ARTIFACTORY_DEPLOY_REPO}</repoKey>
-                    <username>${env.ARTIFACTORY_DEPLOY_USERNAME}</username>
-                    <password>${env.ARTIFACTORY_DEPLOY_PASSWORD}</password>
-                    <publishBuildInfo>true</publishBuildInfo>
-                    <publishArtifacts>true</publishArtifacts>
-                  </publisher>
-                  <buildInfo>
-                    <buildName>${gitRepositoryName}</buildName>
-                    <buildNumber>{{BUILD_NUMBER}}</buildNumber>
-                    <buildUrl>{{CI_BUILD_URL|BUILD_URL}}</buildUrl>
-                    <vcsRevision>{{GIT_COMMIT}}</vcsRevision>
-                  </buildInfo>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-
-  </profiles>
-
-</project>
diff --git a/quick-build.sh b/quick-build.sh
deleted file mode 100755 (executable)
index b53a26a..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/sh
-
-#export MAVEN_OPTS='-Xmx256m'
-
-cat << 'EOF'
-
-
-                 uuuuuuu
-             uu$$$$$$$$$$$uu
-          uu$$$$$$$$$$$$$$$$$uu
-         u$$$$$$$$$$$$$$$$$$$$$u
-        u$$$$$$$$$$$$$$$$$$$$$$$u
-       u$$$$$$$$$$$$$$$$$$$$$$$$$u
-       u$$$$$$$$$$$$$$$$$$$$$$$$$u
-       u$$$$$$"   "$$$"   "$$$$$$u
-       "$$$$"      u$u       $$$$"
-        $$$u       u$u       u$$$
-        $$$u      u$$$u      u$$$
-         "$$$$uu$$$   $$$uu$$$$"
-          "$$$$$$$"   "$$$$$$$"
-            u$$$$$$$u$$$$$$$u
-             u$"$"$"$"$"$"$u
-  uuu        $$u$ $ $ $ $u$$       uuu
- u$$$$        $$$$$u$u$u$$$       u$$$$
-  $$$$$uu      "$$$$$$$$$"     uu$$$$$$
-u$$$$$$$$$$$uu    """""    uuuu$$$$$$$$$$
-$$$$"""$$$$$$$$$$uuu   uu$$$$$$$$$"""$$$"
- """      ""$$$$$$$$$$$uu ""$"""
-           uuuu ""$$$$$$$$$$uuu
-  u$$$uuu$$$$$$$$$uu ""$$$$$$$$$$$uuu$$$
-  $$$$$$$$$$""""           ""$$$$$$$$$$$"
-   "$$$$$"                      ""$$$$""
-     $$$"                         $$$$"
-
-
-           TESTS ARE DISABLED
-               ARE U CRAZY ?
-
-
-
-EOF
-
-./stop.sh
-mvn clean install -B -e -V -DskipTests=true -Dmaven.source.skip=true -Pdev,skipSanityChecks $*
index 7eea321bbeb8e0d258150aba0e59a8210032eeb9..6a3d7eceb9e50788e3b62aea3ac93c2379a0acfb 100755 (executable)
@@ -4,8 +4,10 @@ set -euo pipefail
 ORCHESTRATOR_CONFIG_URL=$1
 shift
 
-mvn verify \
-  -pl :sonar-db-core,:sonar-db-migration,:sonar-db-dao \
+./gradlew --no-daemon \
+  :server:sonar-db-core:createDB \
+  :server:sonar-db-core:test \
+  :server:sonar-db-migration:test \
+  :server:sonar-db-dao:test \
   -Dorchestrator.configUrl=$ORCHESTRATOR_CONFIG_URL \
-  -Dwith-db-drivers \
-  -B -e -V $*
+  $*
index 82ea7a8b1a29e4c5b8d8e8649318f3a8e36aa79a..78ce995c7c4d27df1247415f9b2f3dcf90f2abc1 100755 (executable)
@@ -16,12 +16,8 @@ CATEGORY=$1
 ORCHESTRATOR_CONFIG_URL=$2
 shift 2
 
-cd tests/plugins
-mvn clean package -B -e -V
-
-cd ..
-mvn verify \
+./gradlew --no-daemon --console plain -i \
+  :tests:integrationTest \
   -Dcategory="$CATEGORY" \
-  -Dorchestrator.configUrl=$ORCHESTRATOR_CONFIG_URL \
-  -Pwith-db-drivers \
-  -B -e -V $*
+  -Dorchestrator.configUrl=$ORCHESTRATOR_CONFIG_URL  \
+  $*
index 4a5e6eba7269bae85a022351637c2953b9474eb1..5374319ac439777cd4233f4786acc297fb16c2f7 100755 (executable)
@@ -2,5 +2,8 @@
 set -euo pipefail
 
 echo 'Run performance tests'
-cd tests
-mvn verify -B -e -V -Dcategory=ServerPerformance $*
+
+./gradlew --no-daemon --console plain -i \
+  :tests:integrationTest \
+  -Dcategory=ServerPerformance  \
+  $*
index 696d4eedf66f7ca5dedc69977e80dd7308ad803d..97a838557b72c031c4fc2ce4bb182b4c84f8a1ba 100755 (executable)
@@ -13,8 +13,8 @@ set -euo pipefail
 ORCHESTRATOR_CONFIG_URL=$1
 shift 1
 
-cd tests
-mvn verify \
-  -Pwith-db-drivers \
+./gradlew --no-daemon --console plain -i \
+  :tests:integrationTest \
   -Dorchestrator.configUrl=$ORCHESTRATOR_CONFIG_URL \
-  -Dcategory=Upgrade -B -e -V $*
+  -Dcategory=Upgrade \
+  $*
\ No newline at end of file
index 24a7a5e26a7ba14e17f9970d074ab792c1c5150e..a553c4d2ffb657fca7c922a25a73035a85b8cc30 100755 (executable)
@@ -78,7 +78,7 @@ if [ "$script_name" == "logs.sh" ]; then
   checkLogArgument "$LOG"
 
   ROOT=$(pwd)
-  cd sonar-application/target/sonarqube-*
+  cd sonar-application/build/distributions/sonarqube-*
   SQ_HOME=$(pwd)
   cd "$ROOT"
 
index 24240bf7e54fb5849a28f960fff5c7f014e9832e..b82329e15f31e5318a7f1aa34de840c2c989fba5 100755 (executable)
@@ -36,15 +36,15 @@ else
   OS='linux-x86-64'
 fi
 
-if ! ls sonar-application/target/sonarqube-*.zip &> /dev/null; then
+if ! ls sonar-application/build/distributions/sonar-application-*.zip &> /dev/null; then
   echo 'Sources are not built'
   "$ROOT"/build.sh
 fi
 
-cd sonar-application/target/
+cd sonar-application/build/distributions/
 if ! ls sonarqube-*/bin/$OS/sonar.sh &> /dev/null; then
   echo "Unzipping SQ..."
-  unzip -qq sonarqube-*.zip
+  unzip -qq sonar-application-*.zip
 fi
 cd $(find sonarqube-* -type d | head -1)
 
diff --git a/server/build.gradle b/server/build.gradle
new file mode 100644 (file)
index 0000000..49d6218
--- /dev/null
@@ -0,0 +1,5 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Server :: Parent"
+  }
+}
diff --git a/server/pom.xml b/server/pom.xml
deleted file mode 100644 (file)
index c4e4974..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-  <artifactId>server</artifactId>
-  <packaging>pom</packaging>
-  <name>SonarQube :: Server :: Parent</name>
-
-  <modules>
-    <module>sonar-process</module>
-    <module>sonar-main</module>
-    <module>sonar-db-core</module>
-    <module>sonar-db-migration</module>
-    <module>sonar-db-dao</module>
-    <module>sonar-db-testing</module>
-    <module>sonar-server</module>
-    <module>sonar-ce</module>
-    <module>sonar-plugin-bridge</module>
-    <module>sonar-web</module>
-    <module>sonar-qa-util</module>
-  </modules>
-
-  <profiles>
-
-    <profile>
-      <!-- SonarSource internal use -->
-      <id>with-db-drivers</id>
-      <activation>
-        <property>
-          <name>with-db-drivers</name>
-        </property>
-      </activation>
-      <dependencies>
-        <dependency>
-          <groupId>com.microsoft.sqlserver</groupId>
-          <artifactId>mssql-jdbc</artifactId>
-        </dependency>
-        <dependency>
-          <groupId>mysql</groupId>
-          <artifactId>mysql-connector-java</artifactId>
-        </dependency>
-        <dependency>
-          <groupId>org.postgresql</groupId>
-          <artifactId>postgresql</artifactId>
-        </dependency>
-        <dependency>
-          <groupId>com.oracle.jdbc</groupId>
-          <artifactId>ojdbc8</artifactId>
-        </dependency>
-      </dependencies>
-    </profile>
-  </profiles>
-</project>
diff --git a/server/sonar-ce/build.gradle b/server/sonar-ce/build.gradle
new file mode 100644 (file)
index 0000000..12b42b9
--- /dev/null
@@ -0,0 +1,24 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Compute Engine"
+  }
+}
+
+dependencies {
+  // please keep the list grouped by configuration and ordered by name
+
+  compile 'com.google.protobuf:protobuf-java'
+  compile 'org.nanohttpd:nanohttpd'
+  compile project(':server:sonar-server')
+
+  compileOnly 'com.google.code.findbugs:jsr305'
+
+  testCompile 'com.google.code.findbugs:jsr305'
+  testCompile 'com.h2database:h2'
+  testCompile 'com.tngtech.java:junit-dataprovider'
+  testCompile 'junit:junit'
+  testCompile 'org.assertj:assertj-core'
+  testCompile 'org.assertj:assertj-guava'
+  testCompile 'org.mockito:mockito-core'
+  testCompile project(':server:sonar-db-testing')
+}
diff --git a/server/sonar-ce/pom.xml b/server/sonar-ce/pom.xml
deleted file mode 100644 (file)
index 525eaf8..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>server</artifactId>
-    <version>7.1-SNAPSHOT</version>
-    <relativePath>..</relativePath>
-  </parent>
-  <artifactId>sonar-ce</artifactId>
-  <name>SonarQube :: Compute Engine</name>
-
-  <dependencies>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-server</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.nanohttpd</groupId>
-      <artifactId>nanohttpd</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.protobuf</groupId>
-      <artifactId>protobuf-java</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-
-    <!-- unit tests -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.tngtech.java</groupId>
-      <artifactId>junit-dataprovider</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-guava</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-db-testing</artifactId>
-      <type>pom</type>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-</project>
index 5b093ff3156ea06390500fe283cdc9f2a2319bd5..de97563d60e6fd12f8db5f2846157c750f85c350 100644 (file)
@@ -28,9 +28,9 @@ import java.util.Optional;
 import java.util.Set;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
-import org.apache.log4j.Logger;
 import org.sonar.api.ce.ComputeEngineSide;
 import org.sonar.api.utils.System2;
+import org.sonar.api.utils.log.Logger;
 import org.sonar.api.utils.log.Loggers;
 import org.sonar.ce.container.ComputeEngineStatus;
 import org.sonar.ce.monitoring.CEQueueStatus;
@@ -50,7 +50,7 @@ import static java.util.Objects.requireNonNull;
 
 @ComputeEngineSide
 public class InternalCeQueueImpl extends CeQueueImpl implements InternalCeQueue {
-  private static final org.sonar.api.utils.log.Logger LOG = Loggers.get(InternalCeQueueImpl.class);
+  private static final Logger LOG = Loggers.get(InternalCeQueueImpl.class);
 
   private static final int MAX_EXECUTION_COUNT = 1;
 
@@ -145,7 +145,7 @@ public class InternalCeQueueImpl extends CeQueueImpl implements InternalCeQueue
       printStream.flush();
       return out.toString();
     } catch (IOException e) {
-      Logger.getLogger(InternalCeQueueImpl.class).debug("Failed to getStacktrace out of error", e);
+      LOG.debug("Failed to getStacktrace out of error", e);
       return null;
     }
   }
diff --git a/server/sonar-db-core/build.gradle b/server/sonar-db-core/build.gradle
new file mode 100644 (file)
index 0000000..bfb6921
--- /dev/null
@@ -0,0 +1,71 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Database Core"
+  }
+}
+
+dependencies {
+  // please keep the list grouped by configuration and ordered by name
+
+  compile 'ch.qos.logback:logback-classic'
+  compile 'ch.qos.logback:logback-core'
+  compile 'commons-codec:commons-codec'
+  compile 'commons-dbcp:commons-dbcp'
+  compile 'commons-dbutils:commons-dbutils'
+  compile 'net.jpountz.lz4:lz4'
+  compile 'org.apache.commons:commons-csv'
+  compile 'org.mybatis:mybatis'
+  compile 'org.slf4j:slf4j-api'
+  compile project(':server:sonar-process')
+  compile project(':sonar-core')
+  compile project(':sonar-scanner-protocol')
+  compile project(path: ':sonar-plugin-api', configuration: 'shadow')
+
+  compileOnly 'com.google.code.findbugs:jsr305'
+
+  testCompile 'com.google.code.findbugs:jsr305'
+  testCompile 'com.h2database:h2'
+  testCompile 'com.microsoft.sqlserver:mssql-jdbc'
+  testCompile 'com.oracle.jdbc:ojdbc8'
+  testCompile 'junit:junit'
+  testCompile 'mysql:mysql-connector-java'
+  testCompile 'org.assertj:assertj-core'
+  testCompile 'org.dbunit:dbunit'
+  testCompile 'org.mockito:mockito-core'
+  testCompile 'org.postgresql:postgresql'
+  testCompile 'org.sonarsource.orchestrator:sonar-orchestrator'
+  testCompile project(':sonar-testing-harness')
+}
+
+task createDB(type:JavaExec) {
+  main = 'org.sonar.db.CreateDb'
+  classpath = sourceSets.test.runtimeClasspath
+  systemProperty 'orchestrator.configUrl', System.getProperty('orchestrator.configUrl')
+  systemProperty 'sonar.runtimeVersion', version
+  systemProperty 'orchestrator.artifactory.apiKey', System.getProperty('orchestrator.artifactory.apiKey')
+  systemProperty 'orchestrator.artifactory.repositories', System.getProperty('orchestrator.artifactory.repositories')
+}
+
+test {
+  if (System.hasProperty('orchestrator.configUrl'))
+    systemProperty 'orchestrator.configUrl', System.getProperty('orchestrator.configUrl')
+}
+
+task testJar(type: Jar) {
+  classifier = 'tests'
+  from sourceSets.test.output
+}
+
+artifactoryPublish.skip = false
+
+// Used by core plugins
+publishing {
+  publications {
+    mavenJava(MavenPublication) {
+      from components.java
+      artifact testJar
+      artifact sourcesJar
+      artifact javadocJar
+    }
+  }
+}
diff --git a/server/sonar-db-core/pom.xml b/server/sonar-db-core/pom.xml
deleted file mode 100644 (file)
index 85e9af2..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>server</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>sonar-db-core</artifactId>
-
-  <name>SonarQube :: Database Core</name>
-  <description>Core Database support</description>
-  
-  <dependencies>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-csv</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-scanner-protocol</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.mybatis</groupId>
-      <artifactId>mybatis</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-dbcp</groupId>
-      <artifactId>commons-dbcp</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-dbutils</groupId>
-      <artifactId>commons-dbutils</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>net.jpountz.lz4</groupId>
-      <artifactId>lz4</artifactId>
-    </dependency>
-
-    <!-- logging -->
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-classic</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-process</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-
-    <!-- tests -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.dbunit</groupId>
-      <artifactId>dbunit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-testing-harness</artifactId>
-      <scope>test</scope>
-    </dependency>
-
-
-    <!--
-         JDBC drivers for MyBatis integration tests.
-         They can't be moved to the profile run-mybatis-its because
-    -->
-    <dependency>
-      <groupId>mysql</groupId>
-      <artifactId>mysql-connector-java</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.postgresql</groupId>
-      <artifactId>postgresql</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.h2database</groupId>
-      <artifactId>h2</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-            <configuration>
-              <excludes>
-                <exclude>logback-test.xml</exclude>
-              </excludes>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-  <profiles>
-    <profile>
-      <id>create-db</id>
-      <activation>
-        <property>
-          <name>env.SONARSOURCE_QA</name>
-          <value>true</value>
-        </property>
-      </activation>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-dependency-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>download-sq</id>
-                <goals>
-                  <goal>get</goal>
-                </goals>
-                <phase>generate-test-resources</phase>
-                <configuration>
-                  <artifact>${project.groupId}:sonar-application:${project.version}:zip</artifact>
-                  <transitive>false</transitive>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <groupId>org.sonarsource.orchestrator</groupId>
-            <artifactId>orchestrator-maven-plugin</artifactId>
-            <version>${orchestrator.version}</version>
-            <executions>
-              <execution>
-                <id>create-db</id>
-                <goals>
-                  <goal>create-db</goal>
-                </goals>
-                <phase>generate-test-resources</phase>
-                <configuration>
-                  <sqVersion>${project.version}</sqVersion>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
-</project>
diff --git a/server/sonar-db-core/src/test/java/org/sonar/db/CreateDb.java b/server/sonar-db-core/src/test/java/org/sonar/db/CreateDb.java
new file mode 100644 (file)
index 0000000..b448b25
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2018 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+package org.sonar.db;
+
+import com.sonar.orchestrator.Orchestrator;
+import com.sonar.orchestrator.OrchestratorBuilder;
+import com.sonar.orchestrator.locator.FileLocation;
+import org.apache.commons.lang.StringUtils;
+
+import java.io.File;
+
+public class CreateDb {
+
+  public static void main(String[] args) {
+    OrchestratorBuilder builder = Orchestrator.builderEnv();
+    String version = System.getProperty("sonar.runtimeVersion");
+    if (StringUtils.isEmpty(version)) {
+      File zip = FileLocation.byWildcardMavenFilename(new File("../../sonar-application/build/distributions"), "sonar-application-*.zip").getFile();
+      builder.setZipFile(zip);
+    } else {
+      builder.setSonarVersion(version);
+    }
+    builder.setOrchestratorProperty("orchestrator.workspaceDir", "build/it");
+
+    Orchestrator orchestrator = builder.build();
+    try {
+      orchestrator.start();
+    } finally {
+      orchestrator.stop();
+    }
+  }
+}
diff --git a/server/sonar-db-dao/build.gradle b/server/sonar-db-dao/build.gradle
new file mode 100644 (file)
index 0000000..24a45f3
--- /dev/null
@@ -0,0 +1,51 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: DAO"
+  }
+}
+
+dependencies {
+  // please keep the list grouped by configuration and ordered by name
+
+  compile project(':server:sonar-db-core')
+  compile project(':server:sonar-db-migration')
+  compile project(':sonar-core')
+
+  compileOnly 'com.google.code.findbugs:jsr305'
+
+  testCompile 'com.h2database:h2'
+  testCompile 'com.tngtech.java:junit-dataprovider'
+  testCompile 'junit:junit'
+  testCompile 'org.assertj:assertj-core'
+  testCompile 'org.assertj:assertj-guava'
+  testCompile 'org.dbunit:dbunit'
+  testCompile 'org.mockito:mockito-core'
+  testCompile project(':sonar-testing-harness')
+  testCompile project(':server:sonar-db-core').sourceSets.test.output
+
+  testCompileOnly 'com.google.code.findbugs:jsr305'
+}
+
+test {
+  if (System.hasProperty('orchestrator.configUrl'))
+    systemProperty 'orchestrator.configUrl', System.getProperty('orchestrator.configUrl')
+}
+
+task testJar(type: Jar) {
+  classifier = 'tests'
+  from sourceSets.test.output
+}
+
+artifactoryPublish.skip = false
+
+// Used by core plugins
+publishing {
+  publications {
+    mavenJava(MavenPublication) {
+      from components.java
+      artifact testJar
+      artifact sourcesJar
+      artifact javadocJar
+    }
+  }
+}
diff --git a/server/sonar-db-dao/pom.xml b/server/sonar-db-dao/pom.xml
deleted file mode 100644 (file)
index 0d240e9..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>server</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>sonar-db-dao</artifactId>
-
-  <name>SonarQube :: DAO</name>
-  <description>DAO layer for SonarQube</description>
-  
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-db-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-db-migration</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-
-    <!-- tests -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-guava</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.tngtech.java</groupId>
-      <artifactId>junit-dataprovider</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-testing-harness</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-db-core</artifactId>
-      <version>${project.version}</version>
-      <type>test-jar</type>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.dbunit</groupId>
-      <artifactId>dbunit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.h2database</groupId>
-      <artifactId>h2</artifactId>
-      <scope>test</scope>
-    </dependency>
-
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-            <configuration>
-              <excludes>
-                <exclude>logback-test.xml</exclude>
-              </excludes>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-  <profiles>
-  </profiles>
-</project>
diff --git a/server/sonar-db-migration/build.gradle b/server/sonar-db-migration/build.gradle
new file mode 100644 (file)
index 0000000..2198734
--- /dev/null
@@ -0,0 +1,42 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Database Migration"
+  }
+}
+
+dependencies {
+  // please keep the list grouped by configuration and ordered by name
+
+  compile project(':server:sonar-db-core')
+  compile project(':sonar-core')
+
+  compileOnly 'com.google.code.findbugs:jsr305'
+
+  testCompile 'com.google.code.findbugs:jsr305'
+  testCompile 'com.h2database:h2'
+  testCompile 'com.tngtech.java:junit-dataprovider'
+  testCompile 'junit:junit'
+  testCompile 'org.assertj:assertj-core'
+  testCompile 'org.dbunit:dbunit'
+  testCompile 'org.mockito:mockito-core'
+  testCompile project(':sonar-testing-harness')
+  testCompile project(':server:sonar-db-core').sourceSets.test.output
+}
+
+test {
+  if (System.hasProperty('orchestrator.configUrl'))
+    systemProperty 'orchestrator.configUrl', System.getProperty('orchestrator.configUrl')
+}
+
+artifactoryPublish.skip = false
+
+// Used by core plugins
+publishing {
+  publications {
+    mavenJava(MavenPublication) {
+      from components.java
+      artifact sourcesJar
+      artifact javadocJar
+    }
+  }
+}
diff --git a/server/sonar-db-migration/pom.xml b/server/sonar-db-migration/pom.xml
deleted file mode 100644 (file)
index 1d75a63..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>server</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>sonar-db-migration</artifactId>
-
-  <name>SonarQube :: Database Migration</name>
-  <description>Create SonarQube schema</description>
-  
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-db-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-
-    <!-- tests -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.tngtech.java</groupId>
-      <artifactId>junit-dataprovider</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-testing-harness</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-db-core</artifactId>
-      <version>${project.version}</version>
-      <type>test-jar</type>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.dbunit</groupId>
-      <artifactId>dbunit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.h2database</groupId>
-      <artifactId>h2</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-</project>
diff --git a/server/sonar-db-testing/build.gradle b/server/sonar-db-testing/build.gradle
new file mode 100644 (file)
index 0000000..a7fddde
--- /dev/null
@@ -0,0 +1,15 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: DB testing"
+  }
+}
+
+dependencies {
+  // please keep the list grouped by configuration and ordered by name
+
+  compile 'org.dbunit:dbunit'
+
+  compile project(':server:sonar-db-core').sourceSets.test.output
+  compile project(':server:sonar-db-dao').sourceSets.test.output
+  compile project(':sonar-testing-harness')
+}
diff --git a/server/sonar-db-testing/pom.xml b/server/sonar-db-testing/pom.xml
deleted file mode 100644 (file)
index 6799c13..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>server</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>sonar-db-testing</artifactId>
-  <packaging>pom</packaging>
-
-  <name>SonarQube :: DB testing</name>
-  <description>DB testing for SonarQube</description>
-  
-  <dependencies>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-testing-harness</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-db-core</artifactId>
-      <version>${project.version}</version>
-      <type>test-jar</type>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-db-dao</artifactId>
-      <version>${project.version}</version>
-      <type>test-jar</type>
-    </dependency>
-    <dependency>
-      <groupId>org.dbunit</groupId>
-      <artifactId>dbunit</artifactId>
-    </dependency>
-
-  </dependencies>
-
-  <build>
-  </build>
-
-  <profiles>
-  </profiles>
-</project>
diff --git a/server/sonar-main/build.gradle b/server/sonar-main/build.gradle
new file mode 100644 (file)
index 0000000..936ace8
--- /dev/null
@@ -0,0 +1,30 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Main Process"
+  }
+}
+
+dependencies {
+  // please keep the list grouped by configuration and ordered by name
+
+  compile 'ch.qos.logback:logback-classic'
+  // Required by our usage of Guava for clustering : CeWorkerFactoryImpl.getClusteredWorkerUUIDs()
+  compile 'com.google.guava:guava'
+  compile 'com.hazelcast:hazelcast'
+  compile 'com.hazelcast:hazelcast-client'
+  compile 'org.apache.logging.log4j:log4j-to-slf4j'
+  compile 'org.apache.logging.log4j:log4j-api'
+  compile 'org.elasticsearch.client:transport'
+  compile 'org.slf4j:slf4j-api'
+  compile 'org.yaml:snakeyaml'
+  compile project(':server:sonar-process')
+
+  compileOnly 'com.google.code.findbugs:jsr305'
+
+  testCompile 'com.google.code.findbugs:jsr305'
+  testCompile 'com.tngtech.java:junit-dataprovider'
+  testCompile 'junit:junit'
+  testCompile 'org.assertj:assertj-core'
+  testCompile 'org.mockito:mockito-core'
+  testCompile project(':sonar-testing-harness')
+}
diff --git a/server/sonar-main/pom.xml b/server/sonar-main/pom.xml
deleted file mode 100644 (file)
index 2540b6c..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>server</artifactId>
-    <version>7.1-SNAPSHOT</version>
-    <relativePath>../</relativePath>
-  </parent>
-
-  <artifactId>sonar-main</artifactId>
-  <name>SonarQube :: Main Process</name>
-  <description>Server process used to bootstrap Elasticsearch, Web Server and
-  Compute Engine processes. Could be merged with sonar-application.</description>
-
-  <properties>
-    <!--
-     version as stored in JAR and displayed in webapp. It is
-     overridden on Travis when replacing SNAPSHOT version by
-     build unique version, for instance "6.3.0.12345".
-     -->
-    <buildVersion>${project.version}</buildVersion>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-process</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.logging.log4j</groupId>
-      <artifactId>log4j-to-slf4j</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.logging.log4j</groupId>
-      <artifactId>log4j-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.logging.log4j</groupId>
-      <artifactId>log4j-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-classic</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.hazelcast</groupId>
-      <artifactId>hazelcast</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.hazelcast</groupId>
-      <artifactId>hazelcast-client</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.yaml</groupId>
-      <artifactId>snakeyaml</artifactId>
-    </dependency>
-    <!--
-    Required by our usage of Guava for clustering : CeWorkerFactoryImpl.getClusteredWorkerUUIDs()
-    -->
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.elasticsearch.client</groupId>
-      <artifactId>transport</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-testing-harness</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.tngtech.java</groupId>
-      <artifactId>junit-dataprovider</artifactId>
-      <scope>test</scope>
-    </dependency>
-
-  </dependencies>
-
-  <build>
-    <resources>
-      <resource>
-        <!-- Used to resolve variables in file sonarqube-version.txt -->
-        <directory>src/main/resources</directory>
-        <filtering>true</filtering>
-      </resource>
-    </resources>
-  </build>
-</project>
index 7c4c8c1b340331ab594725ebbff355827676fc75..fdf1937b95de5c7902dfef83ec719a40f95a2199 100644 (file)
@@ -152,8 +152,7 @@ public class CommandFactoryImpl implements CommandFactory {
       .setEnvVariable(PATH_LOGS.getKey(), props.nonNullValue(PATH_LOGS.getKey()))
       .setArgument("sonar.cluster.web.startupLeader", Boolean.toString(leader))
       .setClassName("org.sonar.server.app.WebServer")
-      .addClasspath("./lib/common/*")
-      .addClasspath("./lib/server/*");
+      .addClasspath("./lib/common/*");
     String driverPath = props.value(JDBC_DRIVER_PATH.getKey());
     if (driverPath != null) {
       command.addClasspath(driverPath);
@@ -176,9 +175,7 @@ public class CommandFactoryImpl implements CommandFactory {
       .setArguments(props.rawProperties())
       .setJvmOptions(jvmOptions)
       .setClassName("org.sonar.ce.app.CeServer")
-      .addClasspath("./lib/common/*")
-      .addClasspath("./lib/server/*")
-      .addClasspath("./lib/ce/*");
+      .addClasspath("./lib/common/*");
     String driverPath = props.value(JDBC_DRIVER_PATH.getKey());
     if (driverPath != null) {
       command.addClasspath(driverPath);
index 4438fb768b6eff612bccf0040bf9715d1998400b..08cf403ea09c364c5d81d4f38828b776dfddc931 100644 (file)
@@ -96,7 +96,7 @@ public class CommandFactoryImplTest {
   }
 
   @Test
-  public void createEsCommand_throws_ISE_if_es_binary_is_not_found() throws Exception {
+  public void createEsCommand_throws_ISE_if_es_binary_is_not_found() {
     expectedException.expect(IllegalStateException.class);
     expectedException.expectMessage("Cannot find elasticsearch binary");
 
@@ -194,13 +194,13 @@ public class CommandFactoryImplTest {
   }
 
   @Test
-  public void createWebCommand_returns_command_for_default_settings() throws Exception {
+  public void createWebCommand_returns_command_for_default_settings() {
     JavaCommand command = newFactory(new Properties()).createWebCommand(true);
 
     assertThat(command.getClassName()).isEqualTo("org.sonar.server.app.WebServer");
     assertThat(command.getWorkDir().getAbsolutePath()).isEqualTo(homeDir.getAbsolutePath());
     assertThat(command.getClasspath())
-      .containsExactlyInAnyOrder("./lib/common/*", "./lib/server/*");
+      .containsExactly("./lib/common/*");
     assertThat(command.getJvmOptions().getAll())
       // enforced values
       .contains("-Djava.awt.headless=true", "-Dfile.encoding=UTF-8")
@@ -219,13 +219,13 @@ public class CommandFactoryImplTest {
   }
 
   @Test
-  public void createCeCommand_returns_command_for_default_settings() throws Exception {
+  public void createCeCommand_returns_command_for_default_settings() {
     JavaCommand command = newFactory(new Properties()).createCeCommand();
 
     assertThat(command.getClassName()).isEqualTo("org.sonar.ce.app.CeServer");
     assertThat(command.getWorkDir().getAbsolutePath()).isEqualTo(homeDir.getAbsolutePath());
     assertThat(command.getClasspath())
-      .containsExactlyInAnyOrder("./lib/common/*", "./lib/server/*", "./lib/ce/*");
+      .containsExactly("./lib/common/*");
     assertThat(command.getJvmOptions().getAll())
       // enforced values
       .contains("-Djava.awt.headless=true", "-Dfile.encoding=UTF-8")
@@ -244,7 +244,7 @@ public class CommandFactoryImplTest {
   }
 
   @Test
-  public void createWebCommand_configures_command_with_overridden_settings() throws Exception {
+  public void createWebCommand_configures_command_with_overridden_settings() {
     Properties props = new Properties();
     props.setProperty("sonar.web.port", "1234");
     props.setProperty("sonar.web.javaOpts", "-Xmx10G");
@@ -275,7 +275,7 @@ public class CommandFactoryImplTest {
     JavaCommand command = newFactory(props).createWebCommand(true);
 
     assertThat(command.getClasspath())
-      .containsExactlyInAnyOrder("./lib/common/*", "./lib/server/*", driverFile.getAbsolutePath());
+      .containsExactlyInAnyOrder("./lib/common/*", driverFile.getAbsolutePath());
   }
 
   private void prepareEsFileSystem() throws IOException {
@@ -283,7 +283,7 @@ public class CommandFactoryImplTest {
     FileUtils.touch(new File(homeDir, "elasticsearch/bin/elasticsearch.bat"));
   }
 
-  private CommandFactoryImpl newFactory(Properties userProps) throws IOException {
+  private CommandFactoryImpl newFactory(Properties userProps) {
     return newFactory(userProps, System2.INSTANCE);
   }
 
diff --git a/server/sonar-plugin-bridge/build.gradle b/server/sonar-plugin-bridge/build.gradle
new file mode 100644 (file)
index 0000000..ea49028
--- /dev/null
@@ -0,0 +1,27 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Priviledged Plugin Bridge"
+  }
+}
+
+dependencies {
+  // please keep the list grouped by configuration and ordered by name
+
+  compile project(path: ':sonar-plugin-api', configuration: 'shadow')
+  compile project(':sonar-core')
+
+  compileOnly 'com.google.code.findbugs:jsr305'
+}
+
+artifactoryPublish.skip = false
+
+// Used by core plugins
+publishing {
+  publications {
+    mavenJava(MavenPublication) {
+      from components.java
+      artifact sourcesJar
+      artifact javadocJar
+    }
+  }
+}
diff --git a/server/sonar-plugin-bridge/pom.xml b/server/sonar-plugin-bridge/pom.xml
deleted file mode 100644 (file)
index efb105c..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>server</artifactId>
-    <version>7.1-SNAPSHOT</version>
-    <relativePath>..</relativePath>
-  </parent>
-  <artifactId>sonar-plugin-bridge</artifactId>
-  <name>SonarQube :: Priviledged Plugin Bridge</name>
-
-  <dependencies>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-</project>
diff --git a/server/sonar-process/build.gradle b/server/sonar-process/build.gradle
new file mode 100644 (file)
index 0000000..b88b137
--- /dev/null
@@ -0,0 +1,49 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Process"
+  }
+}
+
+dependencies {
+  // please keep the list grouped by configuration and ordered by name
+
+  compile 'ch.qos.logback:logback-classic'
+  compile 'commons-codec:commons-codec'
+  compile 'commons-io:commons-io'
+  compile 'commons-lang:commons-lang'
+  compile 'com.google.guava:guava'
+  compile 'com.hazelcast:hazelcast'
+  compile 'org.slf4j:jul-to-slf4j'
+  compile 'org.slf4j:slf4j-api'
+
+  compileOnly 'com.google.code.findbugs:jsr305'
+  compileOnly 'com.google.protobuf:protobuf-java'
+  compileOnly 'org.nanohttpd:nanohttpd'
+
+  testCompile 'com.google.code.findbugs:jsr305'
+  testCompile 'com.google.protobuf:protobuf-java'
+  testCompile 'com.tngtech.java:junit-dataprovider'
+  testCompile 'org.assertj:assertj-core'
+  testCompile 'org.mockito:mockito-core'
+  testCompile project(':sonar-testing-harness')
+  // Workaround to resolve dependencies of eclipse specific packaging: https://issues.gradle.org/browse/GRADLE-2076
+  testCompile module('org.eclipse.jetty:jetty-server') {
+    dependencies(
+      "org.eclipse.jetty.orbit:javax.servlet:3.0.0.v201112011016@jar",
+      "org.eclipse.jetty:jetty-continuation:8.1.2.v20120308",
+      "org.eclipse.jetty:jetty-http:8.1.2.v20120308"
+    )
+  }
+}
+
+artifactoryPublish.skip = false
+
+publishing {
+  publications {
+    mavenJava(MavenPublication) {
+      from components.java
+      artifact sourcesJar
+      artifact javadocJar
+    }
+  }
+}
diff --git a/server/sonar-process/pom.xml b/server/sonar-process/pom.xml
deleted file mode 100644 (file)
index 11de60a..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>server</artifactId>
-    <version>7.1-SNAPSHOT</version>
-    <relativePath>../</relativePath>
-  </parent>
-
-  <artifactId>sonar-process</artifactId>
-  <name>SonarQube :: Process</name>
-  <description>Library shared by all kinds of server processes: main, web and compute engine</description>
-
-  <properties>
-    <sonar.exclusions>target/generated-sources/**/*</sonar.exclusions>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.hazelcast</groupId>
-      <artifactId>hazelcast</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>jul-to-slf4j</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-classic</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <!-- only if org.sonar.process.systeminfo HTTP server is being used -->
-      <groupId>org.nanohttpd</groupId>
-      <artifactId>nanohttpd</artifactId>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
-      <!-- only if org.sonar.process.systeminfo.protobuf classes are used -->
-      <groupId>com.google.protobuf</groupId>
-      <artifactId>protobuf-java</artifactId>
-      <optional>true</optional>
-    </dependency>
-
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.tngtech.java</groupId>
-      <artifactId>junit-dataprovider</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-testing-harness</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-server</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-</project>
diff --git a/server/sonar-qa-util/build.gradle b/server/sonar-qa-util/build.gradle
new file mode 100644 (file)
index 0000000..aab7d38
--- /dev/null
@@ -0,0 +1,29 @@
+sonarqube {
+  skipProject = true
+}
+
+dependencies {
+  // please keep the list grouped by configuration and ordered by name
+
+  compile 'com.codeborne:selenide:4.8'
+  // required version 23.0 for selenide
+  compile 'com.google.guava:guava:23.0'
+  compile 'org.assertj:assertj-core'
+  compile 'org.sonarsource.orchestrator:sonar-orchestrator'
+  compile project(':sonar-ws')
+
+  compileOnly 'com.google.code.findbugs:jsr305'
+}
+
+artifactoryPublish.skip = false
+
+// Required for core plugins
+publishing {
+  publications {
+    mavenJava(MavenPublication) {
+      from components.java
+      artifact sourcesJar
+      artifact javadocJar
+    }
+  }
+}
diff --git a/server/sonar-qa-util/pom.xml b/server/sonar-qa-util/pom.xml
deleted file mode 100644 (file)
index 601b9c7..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>server</artifactId>
-    <version>7.1-SNAPSHOT</version>
-    <relativePath>..</relativePath>
-  </parent>
-  <artifactId>sonar-qa-util</artifactId>
-  <name>SonarQube :: Utilities for QA Tests</name>
-
-  <properties>
-    <sonar.coverage.exclusions>src/main/java/**/*</sonar.coverage.exclusions>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-ws</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.codeborne</groupId>
-      <artifactId>selenide</artifactId>
-      <version>4.8</version>
-    </dependency>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-      <!-- required for selenide -->
-      <version>23.0</version>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.orchestrator</groupId>
-      <artifactId>sonar-orchestrator</artifactId>
-      <version>${orchestrator.version}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-</project>
index 30d8b84d57324769117707bc86d317483be9a066..65696d65689c242d8c062425d99d6f9e1c0895b3 100644 (file)
@@ -57,7 +57,7 @@ public class SelenideConfig {
     Configuration.browser = browser.name();
     Configuration.baseUrl = orchestrator.getServer().getUrl();
     Configuration.timeout = 8_000;
-    Configuration.reportsFolder = "target/screenshots";
+    Configuration.reportsFolder = "build/screenshots";
     Configuration.screenshots = true;
     Configuration.captureJavascriptErrors = true;
     Configuration.savePageSource = true;
diff --git a/server/sonar-server/build.gradle b/server/sonar-server/build.gradle
new file mode 100644 (file)
index 0000000..327e4a3
--- /dev/null
@@ -0,0 +1,96 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Server"
+  }
+}
+
+sourceSets {
+  test {
+    resources {
+      srcDirs += ['src/test/projects']
+    }
+  }
+}
+
+dependencies {
+  // please keep the list grouped by configuration and ordered by name
+
+  compile 'ch.qos.logback:logback-access'
+  compile 'ch.qos.logback:logback-classic'
+  compile 'ch.qos.logback:logback-core'
+  compile 'commons-dbcp:commons-dbcp'
+  compile 'commons-dbutils:commons-dbutils'
+  compile 'com.googlecode.java-diff-utils:diffutils'
+  compile 'com.google.code.gson:gson'
+  compile 'com.google.protobuf:protobuf-java'
+  compile 'com.hazelcast:hazelcast-client'
+  compile 'io.jsonwebtoken:jjwt'
+  compile 'javax.xml.bind:jaxb-api'
+  compile 'org.apache.commons:commons-email'
+  compile 'org.apache.httpcomponents:httpclient'
+  compile 'org.apache.logging.log4j:log4j-api'
+  compile 'org.apache.tomcat.embed:tomcat-embed-core'
+  compile 'org.elasticsearch.client:transport'
+  compile 'org.picocontainer:picocontainer'
+  compile 'org.slf4j:jul-to-slf4j'
+  compile 'org.slf4j:slf4j-api'
+  compile 'org.sonarsource.update-center:sonar-update-center-common'
+
+  compile project(':server:sonar-db-dao')
+  compile project(':server:sonar-db-migration')
+  compile project(':server:sonar-plugin-bridge')
+  compile project(':server:sonar-process')
+  compile project(':sonar-core')
+  compile project(':sonar-scanner-protocol')
+  compile(project(':sonar-markdown')) {
+    // already shaded with sonar-plugin-api
+    exclude group: 'org.codehaus.sonar', module: 'sonar-channel'
+  }
+  compile project(path: ':sonar-plugin-api', configuration: 'shadow')
+  compile project(':sonar-ws')
+
+  compileOnly 'com.google.code.findbugs:jsr305'
+  // not a transitive dep. At runtime lib/jdbc/h2 is used
+  compileOnly 'com.h2database:h2'
+
+  testCompile 'com.github.kevinsawicki:http-request'
+  testCompile 'com.github.tlrx:elasticsearch-test'
+  testCompile 'com.google.code.findbugs:jsr305'
+  testCompile 'com.h2database:h2'
+  testCompile 'com.squareup.okhttp3:mockwebserver'
+  testCompile 'com.tngtech.java:junit-dataprovider'
+  testCompile 'junit:junit'
+  testCompile 'org.apache.logging.log4j:log4j-api'
+  testCompile 'org.apache.logging.log4j:log4j-core'
+  testCompile 'org.assertj:assertj-core'
+  testCompile 'org.assertj:assertj-guava'
+  testCompile("org.elasticsearch.test:framework:${elasticsearchVersion}") {
+    // should be excluded to avoid ES go into "test mode" and require to run EsTester-based UTs with RandomizedRunner
+    exclude group: 'com.carrotsearch.randomizedtesting', module: 'randomizedtesting-runner'
+    exclude group: 'org.elasticsearch', module: 'securemock'
+  }
+  testCompile 'org.hamcrest:hamcrest-all'
+  testCompile 'org.mockito:mockito-core'
+  testCompile 'org.reflections:reflections'
+  testCompile 'org.subethamail:subethasmtp'
+  testCompile project(':server:sonar-db-testing')
+}
+
+task testJar(type: Jar) {
+  classifier = 'tests'
+  from sourceSets.test.output
+}
+
+artifactoryPublish.skip = false
+
+// Used by core plugins
+publishing {
+  publications {
+    mavenJava(MavenPublication) {
+      from components.java
+      artifact testJar
+      artifact sourcesJar
+      artifact javadocJar
+    }
+  }
+}
diff --git a/server/sonar-server/pom.xml b/server/sonar-server/pom.xml
deleted file mode 100644 (file)
index c9b9bd4..0000000
+++ /dev/null
@@ -1,344 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" 
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>server</artifactId>
-    <version>7.1-SNAPSHOT</version>
-    <relativePath>..</relativePath>
-  </parent>
-  <artifactId>sonar-server</artifactId>
-  <name>SonarQube :: Server</name>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>jcl-over-slf4j</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>jul-to-slf4j</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.logging.log4j</groupId>
-      <artifactId>log4j-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.logging.log4j</groupId>
-      <artifactId>log4j-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-access</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-classic</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.tomcat.embed</groupId>
-      <artifactId>tomcat-embed-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.gson</groupId>
-      <artifactId>gson</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.h2database</groupId>
-      <artifactId>h2</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-db-dao</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-db-migration</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-scanner-protocol</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-markdown</artifactId>
-      <exclusions>
-        <exclusion>
-          <!-- already shaded with sonar-plugin-api -->
-          <groupId>org.codehaus.sonar</groupId>
-          <artifactId>sonar-channel</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-process</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${project.version}</version>
-      <exclusions>
-        <exclusion>
-          <!-- not used at runtime -->
-          <groupId>com.google.code.findbugs</groupId>
-          <artifactId>jsr305</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.apache.maven.shared</groupId>
-          <artifactId>maven-dependency-tree</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.apache.maven.shared</groupId>
-          <artifactId>maven-common-artifact-filters</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.apache.maven</groupId>
-          <artifactId>maven-project</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-ws</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-plugin-bridge</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.update-center</groupId>
-      <artifactId>sonar-update-center-common</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-dbutils</groupId>
-      <artifactId>commons-dbutils</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-email</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.googlecode.java-diff-utils</groupId>
-      <artifactId>diffutils</artifactId>
-      <version>1.2</version>
-    </dependency>
-    <dependency>
-      <groupId>org.picocontainer</groupId>
-      <artifactId>picocontainer</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-dbcp</groupId>
-      <artifactId>commons-dbcp</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.httpcomponents</groupId>
-      <artifactId>httpclient</artifactId>
-      <version>4.5.2</version>
-    </dependency>
-    <dependency>
-      <groupId>org.elasticsearch.client</groupId>
-      <artifactId>transport</artifactId>
-      <version>${elasticsearch.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.elasticsearch.test</groupId>
-      <artifactId>framework</artifactId>
-      <version>${elasticsearch.version}</version>
-      <scope>test</scope>
-      <exclusions>
-        <!--should be excluded to avoid ES go into "test mode" and require to run EsTester-based UTs with RandomizedRunner-->
-        <exclusion>
-          <groupId>com.carrotsearch.randomizedtesting</groupId>
-          <artifactId>randomizedtesting-runner</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.elasticsearch</groupId>
-          <artifactId>securemock</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>com.hazelcast</groupId>
-      <artifactId>hazelcast-client</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.protobuf</groupId>
-      <artifactId>protobuf-java</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>javax.xml.bind</groupId>
-      <artifactId>jaxb-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>io.jsonwebtoken</groupId>
-      <artifactId>jjwt</artifactId>
-    </dependency>
-
-    <!-- unit tests -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-guava</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <!-- TODO to be removed -->
-      <groupId>org.hamcrest</groupId>
-      <artifactId>hamcrest-all</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-db-testing</artifactId>
-      <type>pom</type>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.github.tlrx</groupId>
-      <artifactId>elasticsearch-test</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.tngtech.java</groupId>
-      <artifactId>junit-dataprovider</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.github.kevinsawicki</groupId>
-      <artifactId>http-request</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.reflections</groupId>
-      <artifactId>reflections</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.subethamail</groupId>
-      <artifactId>subethasmtp</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.squareup.okhttp3</groupId>
-      <artifactId>mockwebserver</artifactId>
-      <scope>test</scope>
-    </dependency>
-
-  </dependencies>
-
-  <build>
-    <resources>
-      <resource>
-        <directory>src/main/resources</directory>
-        <filtering>true</filtering>
-        <includes>
-          <include>build.properties</include>
-        </includes>
-      </resource>
-      <resource>
-        <directory>src/main/resources</directory>
-        <filtering>false</filtering>
-        <excludes>
-          <exclude>build.properties</exclude>
-        </excludes>
-      </resource>
-    </resources>
-    <testResources>
-      <testResource>
-        <directory>src/test/resources</directory>
-        <filtering>false</filtering>
-      </testResource>
-      <testResource>
-        <directory>src/test/projects</directory>
-        <filtering>false</filtering>
-      </testResource>
-    </testResources>
-
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-            <configuration>
-              <excludes>
-                <exclude>logback-test.xml</exclude>
-              </excludes>
-            </configuration>
-          </execution>
-        </executions>
-        <configuration>
-          <archive>
-            <manifest>
-              <addClasspath>true</addClasspath>
-              <mainClass>org.sonar.server.app.App</mainClass>
-            </manifest>
-          </archive>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <!--see https://discuss.elastic.co/t/migrate-elasticsearch-java-api-to-version-5-in-spring-io-platform-application/72661-->
-          <classpathDependencyExcludes>
-            <classpathDependencyExcludes>org.apache.logging.log4j:log4j-to-slf4j</classpathDependencyExcludes>
-          </classpathDependencyExcludes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>
index f9408af6976739f50d4d8d15b37223ac4f4467ab..b6569cdaf91e3ee4eb48acd91a7af0dacb333704 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.ce.log;
 
-import org.apache.log4j.MDC;
+import org.slf4j.MDC;
 import org.sonar.ce.queue.CeTask;
 
 public class CeLogging {
index 4992c82be622fb92cf29992038ccc15e3553763b..0d53ec3bb5bcef35ac30c92ea2c204a8884efe11 100644 (file)
@@ -61,6 +61,7 @@ class EmbeddedTomcat {
       tomcat.start();
       new TomcatStartupLogs(Loggers.get(getClass())).log(tomcat);
     } catch (LifecycleException e) {
+      Loggers.get(EmbeddedTomcat.class).error("Fail to start web server", e);
       Throwables.propagate(e);
     }
   }
index ff85a78bac9651a15ba8ab7714a0342d4285f074..319bb38f0bfb52099b8cbf2070543f63550e3886 100644 (file)
@@ -32,7 +32,6 @@ import org.elasticsearch.common.network.NetworkModule;
 import org.elasticsearch.common.settings.Settings;
 import org.elasticsearch.common.transport.InetSocketTransportAddress;
 import org.elasticsearch.common.transport.TransportAddress;
-import org.elasticsearch.index.reindex.ReindexPlugin;
 import org.elasticsearch.join.ParentJoinPlugin;
 import org.elasticsearch.percolator.PercolatorPlugin;
 import org.elasticsearch.transport.Netty4Plugin;
@@ -103,7 +102,7 @@ public class EsClientProvider extends ProviderAdapter {
   static class MinimalTransportClient extends TransportClient {
 
     MinimalTransportClient(Settings settings) {
-      super(settings, unmodifiableList(Arrays.asList(Netty4Plugin.class, ReindexPlugin.class, PercolatorPlugin.class, ParentJoinPlugin.class)));
+      super(settings, unmodifiableList(Arrays.asList(Netty4Plugin.class, PercolatorPlugin.class, ParentJoinPlugin.class)));
     }
 
     @Override
diff --git a/server/sonar-web/build.gradle b/server/sonar-web/build.gradle
new file mode 100644 (file)
index 0000000..ee71411
--- /dev/null
@@ -0,0 +1,44 @@
+sonarqube {
+  properties {
+    property "sonar.projectName", "${projectTitle} :: Web"
+    property "sonar.sources", "src/main/js"
+    property "sonar.tests", "src/main/js"
+    property "sonar.test.inclusions", "src/main/js/**/__tests__/**"
+    property "sonar.exclusions", "src/main/js/libs/third-party/**/*,src/main/js/libs/require.js,src/main/js/**/__tests__/**"
+  }
+}
+
+apply plugin: 'com.moowork.node'
+apply plugin: 'war'
+
+configurations {
+  branding
+}
+dependencies {
+  branding 'com.sonarsource:sonarsource-branding:1.3.0.307@war'
+}
+task unzipBranding(type: Copy) {
+  into projectDir
+  from { zipTree(configurations.branding.singleFile) }
+  include '**/*.js'
+  include '**/*.svg'
+  includeEmptyDirs = false
+}
+
+node {
+  version = '8.5.0'
+  yarnVersion = '1.1.0'
+  download = true
+}
+
+yarn_run {
+  if (release) { dependsOn unzipBranding }
+  inputs.dir('scripts')
+  inputs.dir('src/main/js')
+  inputs.file('build.gradle')
+  outputs.dir('src/main/webapp')
+
+  args = ['build']
+}
+
+war.dependsOn yarn_run
diff --git a/server/sonar-web/pom.xml b/server/sonar-web/pom.xml
deleted file mode 100644 (file)
index 7f51af8..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>server</artifactId>
-    <version>7.1-SNAPSHOT</version>
-    <relativePath>..</relativePath>
-  </parent>
-  <artifactId>sonar-web</artifactId>
-  <packaging>war</packaging>
-  <name>SonarQube :: Web</name>
-
-  <properties>
-    <!-- self-analysis -->
-    <sonar.sources>src/main/js</sonar.sources>
-    <sonar.tests>src/main/js</sonar.tests>
-    <sonar.test.inclusions>src/main/js/**/__tests__/**</sonar.test.inclusions>
-    <sonar.exclusions>src/main/js/libs/third-party/**/*,src/main/js/libs/require.js,src/main/js/**/__tests__/**</sonar.exclusions>
-    <yarn.script>build</yarn.script>
-  </properties>
-
-  <build>
-    <resources>
-      <resource>
-        <directory>src/main/resources</directory>
-        <filtering>true</filtering>
-      </resource>
-    </resources>
-
-    <plugins>
-      <plugin>
-        <artifactId>maven-clean-plugin</artifactId>
-        <configuration>
-          <filesets>
-            <fileset>
-              <directory>${basedir}/src/main/webapp/deploy</directory>
-              <includes>
-                <include>**/*</include>
-              </includes>
-              <excludes>
-                <exclude>readme.txt</exclude>
-              </excludes>
-            </fileset>
-          </filesets>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-resources-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>process-resources</phase>
-            <goals>
-              <goal>copy-resources</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>${project.build.directory}/${project.build.finalName}/</outputDirectory>
-              <resources>
-                <resource>
-                  <directory>${basedir}/src/main/webapp</directory>
-                  <filtering>false</filtering>
-                </resource>
-              </resources>
-            </configuration>
-          </execution>
-          <execution>
-            <id>copy-generated-webapp</id>
-            <!-- must be after the execution of grunt -->
-            <phase>process-resources</phase>
-            <goals>
-              <goal>copy-resources</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>${project.build.directory}/${project.build.finalName}</outputDirectory>
-              <overwrite>true</overwrite>
-              <resources>
-                <resource>
-                  <directory>src/main/webapp/build</directory>
-                  <filtering>false</filtering>
-                </resource>
-              </resources>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>com.github.eirslett</groupId>
-        <artifactId>frontend-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>install node and yarn</id>
-            <goals>
-              <goal>install-node-and-yarn</goal>
-            </goals>
-            <configuration>
-              <nodeVersion>v8.5.0</nodeVersion>
-              <yarnVersion>v1.1.0</yarnVersion>
-            </configuration>
-          </execution>
-          <execution>
-            <id>yarn install</id>
-            <goals>
-              <goal>yarn</goal>
-            </goals>
-          </execution>
-          <execution>
-            <phase>generate-resources</phase>
-            <id>yarn run script</id>
-            <goals>
-              <goal>yarn</goal>
-            </goals>
-            <configuration>
-              <arguments>run ${yarn.script}</arguments>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-war-plugin</artifactId>
-        <configuration>
-          <packagingExcludes>
-            **/*.log,*.iml,WEB-INF/script/,WEB-INF/test/,javascripts/*-min.js,stylesheets/*-min.css,javascripts/tests/**/*,
-            build/**,templates/**
-          </packagingExcludes>
-          <warSourceExcludes>
-            js/**,css/**
-          </warSourceExcludes>
-          <archive>
-            <manifestEntries>
-              <Version>${project.version}</Version>
-              <!-- ${buildNumber} is the Git revision. It's generated by the buildnumber-maven-plugin -->
-              <Implementation-Build>${buildNumber}</Implementation-Build>
-              <Build-Time>${timestamp}</Build-Time>
-            </manifestEntries>
-          </archive>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>com.mycila</groupId>
-        <artifactId>license-maven-plugin</artifactId>
-        <configuration>
-          <excludes>
-            <exclude>src/main/webapp/**/*</exclude>
-          </excludes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
-  <profiles>
-    <profile>
-      <id>release</id>
-      <build>
-        <plugins>
-          <plugin>
-            <artifactId>maven-clean-plugin</artifactId>
-            <configuration>
-              <filesets>
-                <fileset>
-                  <directory>${basedir}/node</directory>
-                  <includes>
-                    <include>**/*</include>
-                  </includes>
-                </fileset>
-                <fileset>
-                  <directory>${basedir}/node_modules</directory>
-                  <includes>
-                    <include>**/*</include>
-                  </includes>
-                </fileset>
-                <fileset>
-                  <directory>${basedir}/src/main/webapp/deploy</directory>
-                  <includes>
-                    <include>**/*</include>
-                  </includes>
-                  <excludes>
-                    <exclude>readme.txt</exclude>
-                  </excludes>
-                </fileset>
-              </filesets>
-            </configuration>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-dependency-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>copy-branding</id>
-                <phase>initialize</phase>
-                <goals>
-                  <goal>unpack</goal>
-                </goals>
-              </execution>
-            </executions>
-            <configuration>
-              <artifactItems>
-                <artifactItem>
-                  <groupId>com.sonarsource</groupId>
-                  <artifactId>sonarsource-branding</artifactId>
-                  <type>war</type>
-                  <overWrite>true</overWrite>
-                  <outputDirectory>${project.basedir}</outputDirectory>
-                  <includes>**/*.js,**/*.svg</includes>
-                </artifactItem>
-              </artifactItems>
-            </configuration>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-jar-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>empty-javadoc-jar</id>
-                <phase>package</phase>
-                <goals>
-                  <goal>jar</goal>
-                </goals>
-                <configuration>
-                  <classifier>javadoc</classifier>
-                </configuration>
-              </execution>
-              <execution>
-                <id>empty-sources-jar</id>
-                <phase>package</phase>
-                <goals>
-                  <goal>jar</goal>
-                </goals>
-                <configuration>
-                  <classifier>sources</classifier>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-      <dependencies>
-        <dependency>
-          <groupId>com.sonarsource</groupId>
-          <artifactId>sonarsource-branding</artifactId>
-          <version>1.3.0.307</version>
-          <type>war</type>
-          <scope>runtime</scope>
-        </dependency>
-      </dependencies>
-    </profile>
-    <profile>
-      <id>dev</id>
-      <properties>
-        <yarn.script>build-fast</yarn.script>
-      </properties>
-    </profile>
-  </profiles>
-
-</project>
diff --git a/settings.gradle b/settings.gradle
new file mode 100644 (file)
index 0000000..0009ccb
--- /dev/null
@@ -0,0 +1,61 @@
+rootProject.name = 'sonarqube'
+
+include 'plugins:sonar-xoo-plugin'
+
+include 'server:sonar-ce'
+include 'server:sonar-db-testing'
+include 'server:sonar-db-core'
+include 'server:sonar-db-dao'
+include 'server:sonar-db-migration'
+include 'server:sonar-main'
+include 'server:sonar-plugin-bridge'
+include 'server:sonar-process'
+include 'server:sonar-qa-util'
+include 'server:sonar-server'
+include 'server:sonar-web'
+
+include 'sonar-application'
+include 'sonar-check-api'
+include 'sonar-core'
+include 'sonar-duplications'
+include 'sonar-home'
+include 'sonar-markdown'
+include 'sonar-plugin-api'
+include 'sonar-plugin-api-deps'
+include 'sonar-scanner-engine'
+include 'sonar-scanner-engine-shaded'
+include 'sonar-scanner-protocol'
+include 'sonar-testing-harness'
+include 'sonar-ws'
+include 'sonar-ws-generator'
+
+include 'tests:plugins:access-secured-props-plugin'
+include 'tests:plugins:backdating-customplugin'
+include 'tests:plugins:backdating-plugin-v1'
+include 'tests:plugins:backdating-plugin-v2'
+include 'tests:plugins:base-auth-plugin'
+include 'tests:plugins:batch-plugin'
+include 'tests:plugins:extension-lifecycle-plugin'
+include 'tests:plugins:fake-billing-plugin'
+include 'tests:plugins:fake-governance-plugin'
+include 'tests:plugins:foo-plugin-v1'
+include 'tests:plugins:foo-plugin-v2'
+include 'tests:plugins:global-property-change-plugin'
+include 'tests:plugins:issue-filter-plugin'
+include 'tests:plugins:l10n-fr-pack'
+include 'tests:plugins:license-plugin'
+include 'tests:plugins:oauth2-auth-plugin'
+include 'tests:plugins:posttask-plugin'
+include 'tests:plugins:project-builder-plugin'
+include 'tests:plugins:property-relocation-plugin'
+include 'tests:plugins:property-sets-plugin'
+include 'tests:plugins:security-plugin'
+include 'tests:plugins:server-plugin'
+include 'tests:plugins:settings-encryption-plugin'
+include 'tests:plugins:settings-plugin'
+include 'tests:plugins:sonar-fake-plugin'
+include 'tests:plugins:sonar-subcategories-plugin'
+include 'tests:plugins:ui-extensions-plugin'
+include 'tests:plugins:wait-at-platform-level4-plugin'
+include 'tests:plugins:ws-plugin'
+include 'tests'
diff --git a/sonar-application/assembly-common.xml b/sonar-application/assembly-common.xml
deleted file mode 100644 (file)
index 8d85b77..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<assembly>
-  <id>common-lib-dir</id>
-  <formats>
-    <format>dir</format>
-  </formats>
-  <baseDirectory>/</baseDirectory>
-  <dependencySets>
-
-    <dependencySet>
-      <outputDirectory>/</outputDirectory>
-      <useTransitiveFiltering>true</useTransitiveFiltering>
-      <useProjectArtifact>false</useProjectArtifact>
-      <scope>runtime</scope>
-    </dependencySet>
-
-  </dependencySets>
-
-</assembly>
diff --git a/sonar-application/assembly.xml b/sonar-application/assembly.xml
deleted file mode 100644 (file)
index ccbf0a9..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<assembly>
-  <id>distribution</id>
-  <formats>
-    <format>${assembly.format}</format>
-  </formats>
-  <includeBaseDirectory>true</includeBaseDirectory>
-  <dependencySets>
-    <!-- Libraries -->
-    <dependencySet>
-      <outputDirectory>lib</outputDirectory>
-      <useTransitiveDependencies>false</useTransitiveDependencies>
-      <useTransitiveFiltering>false</useTransitiveFiltering>
-      <useProjectArtifact>true</useProjectArtifact>
-      <includes>
-        <include>org.sonarsource.sonarqube:sonar-application</include>
-      </includes>
-    </dependencySet>
-
-    <dependencySet>
-      <outputDirectory>lib/jsw</outputDirectory>
-      <useTransitiveDependencies>false</useTransitiveDependencies>
-      <useTransitiveFiltering>false</useTransitiveFiltering>
-      <useProjectArtifact>false</useProjectArtifact>
-      <includes>
-        <include>tanukisoft:wrapper</include>
-      </includes>
-      <scope>provided</scope>
-    </dependencySet>
-
-    <dependencySet>
-      <outputDirectory>lib/server</outputDirectory>
-      <useProjectArtifact>false</useProjectArtifact>
-      <useTransitiveDependencies>true</useTransitiveDependencies>
-      <useTransitiveFiltering>true</useTransitiveFiltering>
-      <includes>
-        <include>org.sonarsource.sonarqube:sonar-server</include>
-      </includes>
-      <scope>provided</scope>
-    </dependencySet>
-
-    <dependencySet>
-      <outputDirectory>lib/ce</outputDirectory>
-      <useProjectArtifact>false</useProjectArtifact>
-      <useTransitiveDependencies>true</useTransitiveDependencies>
-      <useTransitiveFiltering>true</useTransitiveFiltering>
-      <includes>
-        <include>org.sonarsource.sonarqube:sonar-ce</include>
-      </includes>
-      <scope>provided</scope>
-    </dependencySet>
-
-    <!-- Scanner Engine that is returned by batch/index WS -->
-    <dependencySet>
-      <outputDirectory>lib/scanner</outputDirectory>
-      <useTransitiveDependencies>false</useTransitiveDependencies>
-      <includes>
-        <include>org.sonarsource.sonarqube:sonar-scanner-engine-shaded</include>
-      </includes>
-      <scope>provided</scope>
-    </dependencySet>
-    <!-- Plugins -->
-    <dependencySet>
-      <outputDirectory>lib/bundled-plugins</outputDirectory>
-      <useTransitiveDependencies>false</useTransitiveDependencies>
-      <includes>
-        <include>org.sonarsource.*:sonar-*-plugin</include>
-      </includes>
-      <scope>provided</scope>
-    </dependencySet>
-    <!-- Server -->
-    <dependencySet>
-      <outputDirectory>web</outputDirectory>
-      <includes>
-        <include>org.sonarsource.sonarqube:sonar-web</include>
-      </includes>
-      <unpack>true</unpack>
-      <scope>provided</scope>
-    </dependencySet>
-    <!-- JDBC drivers -->
-    <dependencySet>
-      <outputDirectory>lib/jdbc/mssql/</outputDirectory>
-      <includes>
-        <include>com.microsoft.sqlserver:mssql-jdbc</include>
-      </includes>
-      <unpack>false</unpack>
-      <scope>provided</scope>
-    </dependencySet>
-    <dependencySet>
-      <outputDirectory>lib/jdbc/mysql/</outputDirectory>
-      <includes>
-        <include>mysql:mysql-connector-java</include>
-      </includes>
-      <unpack>false</unpack>
-      <scope>provided</scope>
-    </dependencySet>
-    <dependencySet>
-      <outputDirectory>lib/jdbc/postgresql/</outputDirectory>
-      <includes>
-        <include>org.postgresql:postgresql</include>
-      </includes>
-      <unpack>false</unpack>
-      <scope>provided</scope>
-    </dependencySet>
-    <dependencySet>
-      <outputDirectory>lib/jdbc/h2/</outputDirectory>
-      <includes>
-        <include>com.h2database:h2</include>
-      </includes>
-      <unpack>false</unpack>
-      <scope>provided</scope>
-    </dependencySet>
-  </dependencySets>
-
-  <fileSets>
-    <!-- common directory -->
-    <fileSet>
-      <directory>target/common</directory>
-      <outputDirectory>lib/common</outputDirectory>
-    </fileSet>
-    <!-- wrapper binaries -->
-    <fileSet>
-      <directory>src/main/assembly</directory>
-      <outputDirectory></outputDirectory>
-      <includes>
-        <include>bin/*/lib/*.so</include>
-        <include>bin/*/lib/*.jnilib</include>
-        <include>bin/*/lib/*.dll</include>
-        <include>bin/*/wrapper</include>
-        <include>bin/*/wrapper.exe</include>
-        <include>elasticsearch/bin/elasticsearch</include>
-        <include>elasticsearch/bin/elasticsearch.bat</include>
-      </includes>
-      <fileMode>0755</fileMode>
-    </fileSet>
-    <!-- Configuration Files -->
-    <fileSet>
-      <directory>src/main/assembly</directory>
-      <outputDirectory></outputDirectory>
-      <includes>
-        <include>conf/**</include>
-      </includes>
-      <!-- See SONAR-2580 - for better readability of configuration files on Windows: -->
-      <lineEnding>dos</lineEnding>
-      <fileMode>0644</fileMode>
-    </fileSet>
-    <!-- Windows Scripts -->
-    <fileSet>
-      <directory>src/main/assembly</directory>
-      <outputDirectory></outputDirectory>
-      <includes>
-        <include>**/*.bat</include>
-        <include>**/*.cmd</include>
-      </includes>
-      <lineEnding>dos</lineEnding>
-      <fileMode>0644</fileMode>
-    </fileSet>
-    <!-- Linux Scripts -->
-    <fileSet>
-      <directory>src/main/assembly</directory>
-      <outputDirectory></outputDirectory>
-      <includes>
-        <include>**/*.sh</include>
-        <include>**/ant</include>
-        <include>**/antRun</include>
-      </includes>
-      <lineEnding>unix</lineEnding>
-      <fileMode>0755</fileMode>
-    </fileSet>
-    <!-- Other stuff -->
-    <fileSet>
-      <directory>src/main/assembly</directory>
-      <outputDirectory></outputDirectory>
-      <excludes>
-        <exclude>conf/**</exclude>
-        <exclude>**/*.bat</exclude>
-        <exclude>**/*.cmd</exclude>
-        <exclude>**/*.sh</exclude>
-        <exclude>**/ant</exclude>
-        <exclude>**/antRun</exclude>
-        <!--exclude ES modules by default in the distribution that we don't use-->
-        <exclude>elasticsearch/modules/lang-expression/</exclude>
-        <exclude>elasticsearch/modules/lang-groovy/</exclude>
-        <exclude>elasticsearch/modules/lang-mustache/</exclude>
-        <exclude>elasticsearch/modules/lang-painless/</exclude>
-        <exclude>elasticsearch/modules/transport-netty3/</exclude>
-      </excludes>
-      <fileMode>0644</fileMode>
-    </fileSet>
-    <!-- Empty directories -->
-    <fileSet>
-      <directory>src/main/assembly</directory>
-      <outputDirectory>extensions/jdbc-driver/oracle/</outputDirectory>
-      <excludes>
-        <exclude>**/*</exclude>
-      </excludes>
-    </fileSet>
-    <fileSet>
-      <directory>src/main/assembly</directory>
-      <outputDirectory>logs/</outputDirectory>
-      <excludes>
-        <exclude>**/*</exclude>
-      </excludes>
-    </fileSet>
-    <fileSet>
-      <directory>src/main/assembly</directory>
-      <outputDirectory>elasticsearch/plugins</outputDirectory>
-      <excludes>
-        <exclude>*/**</exclude>
-      </excludes>
-    </fileSet>
-  </fileSets>
-</assembly>
diff --git a/sonar-application/build.gradle b/sonar-application/build.gradle
new file mode 100644 (file)
index 0000000..bb8b58b
--- /dev/null
@@ -0,0 +1,148 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Application"
+  }
+}
+
+configurations {
+  ce
+  jsw
+  scanner
+  server
+  webapp
+  jdbc_mssql {
+    transitive = false
+  }
+  jdbc_mysql {
+    transitive = false
+  }
+  jdbc_postgresql {
+    transitive = false
+  }
+  jdbc_h2 {
+    transitive = false
+  }
+  bundledPlugin {
+    transitive = false
+  }
+}
+
+dependencies {
+  compile 'org.elasticsearch.client:transport'
+  compile project(':server:sonar-main')
+  compile project(':server:sonar-process')
+
+  compileOnly 'com.google.code.findbugs:jsr305'
+
+  ce project(':server:sonar-ce')
+  jsw 'tanukisoft:wrapper:3.2.3'
+  scanner project(path: ':sonar-scanner-engine-shaded', configuration: 'shadow')
+  server project(':server:sonar-server')
+  webapp project(path: ':server:sonar-web', configuration: 'archives')
+
+  jdbc_mssql 'com.microsoft.sqlserver:mssql-jdbc'
+  jdbc_mysql 'mysql:mysql-connector-java'
+  jdbc_postgresql 'org.postgresql:postgresql'
+  jdbc_h2 'com.h2database:h2'
+
+  bundledPlugin 'org.sonarsource.java:sonar-java-plugin:5.1.0.13090@jar'
+  bundledPlugin 'org.sonarsource.javascript:sonar-javascript-plugin:4.0.0.5862@jar'
+  bundledPlugin 'org.sonarsource.dotnet:sonar-csharp-plugin:6.7.1.4347@jar'
+  bundledPlugin 'org.sonarsource.scm.git:sonar-scm-git-plugin:1.4.0.1037@jar'
+  bundledPlugin 'org.sonarsource.scm.svn:sonar-scm-svn-plugin:1.7.0.1017@jar'
+  bundledPlugin 'org.sonarsource.php:sonar-php-plugin:2.12.1.3018@jar'
+  bundledPlugin 'org.sonarsource.python:sonar-python-plugin:1.9.0.2010@jar'
+  bundledPlugin 'org.sonarsource.flex:sonar-flex-plugin:2.3@jar'
+  bundledPlugin 'org.sonarsource.xml:sonar-xml-plugin:1.4.3.1027@jar'
+  bundledPlugin 'org.sonarsource.typescript:sonar-typescript-plugin:1.5.0.2122@jar'
+
+  testCompile 'junit:junit'
+  testCompile 'org.assertj:assertj-core'
+  testCompile 'org.mockito:mockito-core'
+
+}
+
+jar {
+  manifest {
+    attributes(
+      'Class-Path': configurations.compile.collect { "common/${it.getName()}" }.join(' '),
+      'Main-Class': 'org.sonar.application.App'
+    )
+  }
+}
+
+task zip(type: Zip) {
+  duplicatesStrategy DuplicatesStrategy.EXCLUDE
+  def archiveDir = "sonarqube-$version"
+  into("${archiveDir}/") {
+    from file('src/main/assembly')
+    exclude 'elasticsearch/modules/lang-expression/**'
+    exclude 'elasticsearch/modules/lang-groovy/**'
+    exclude 'elasticsearch/modules/lang-mustache/**'
+    exclude 'elasticsearch/modules/lang-painless/**'
+    exclude 'elasticsearch/modules/transport-netty3/**'
+  }
+  // Create the empty dir (plugins) required by elasticsearch
+  into("${archiveDir}/elasticsearch/") {
+    from "$buildDir/elasticsearch"
+  }
+  into("${archiveDir}/lib/") {
+    from jar
+  }
+  into("${archiveDir}/lib/bundled-plugins/") {
+    from configurations.bundledPlugin
+  }
+  into("${archiveDir}/lib/jsw/") {
+    from configurations.jsw
+  }
+  into("${archiveDir}/lib/scanner/") {
+    from configurations.scanner
+  }
+  into("${archiveDir}/lib/common/") {
+    from configurations.ce + configurations.server + configurations.compile
+  }
+  dependsOn configurations.webapp
+  into("${archiveDir}/web/") {
+    from {
+      configurations.webapp.files.collect { zipTree(it) }
+    }
+  }
+  into("${archiveDir}/lib/jdbc/mssql/") {
+    from configurations.jdbc_mssql
+  }
+  into("${archiveDir}/lib/jdbc/mysql/") {
+    from configurations.jdbc_mysql
+  }
+  into("${archiveDir}/lib/jdbc/postgresql/") {
+    from configurations.jdbc_postgresql
+  }
+  into("${archiveDir}/lib/jdbc/h2/") {
+    from configurations.jdbc_h2
+  }
+}
+// Create the empty dir required by elasticsearch
+zip.doFirst {
+  new File(buildDir, 'elasticsearch/plugins').mkdirs()
+}
+// Check the size of the archive
+zip.doLast {
+  def minLength = 155000000
+  def maxLength = 170000000
+  def length = new File(distsDir, archiveName).length()
+  if (length < minLength)
+    throw new GradleException("$archiveName size ($length) too small. Min is $minLength")
+  if (length > maxLength)
+    throw new GradleException("$distsDir/$archiveName size ($length) too large. Max is $maxLength")
+}
+
+assemble.dependsOn zip
+
+artifactoryPublish.skip = false
+
+publishing {
+  publications {
+    mavenJava(MavenPublication) {
+      artifact zip
+    }
+  }
+}
diff --git a/sonar-application/pom.xml b/sonar-application/pom.xml
deleted file mode 100644 (file)
index f599fb9..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>sonar-application</artifactId>
-  <packaging>jar</packaging>
-  <name>SonarQube :: Application</name>
-  <description>Package the standalone distribution</description>
-
-  <properties>
-    <assembly.recompressZippedFiles>true</assembly.recompressZippedFiles>
-    <assembly.format>zip</assembly.format>
-    <checksum.failOnError>true</checksum.failOnError>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-process</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-main</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <!--must declare this dependency of sonar-process-monitor here, again,-->
-    <!--to allow copying it and its dependencies into lib/common-->
-    <dependency>
-      <groupId>org.elasticsearch.client</groupId>
-      <artifactId>transport</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-server</artifactId>
-      <version>${project.version}</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-ce</artifactId>
-      <version>${project.version}</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-scanner-engine-shaded</artifactId>
-      <version>${project.version}</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-web</artifactId>
-      <version>${project.version}</version>
-      <type>war</type>
-      <scope>provided</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>com.microsoft.sqlserver</groupId>
-      <artifactId>mssql-jdbc</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>mysql</groupId>
-      <artifactId>mysql-connector-java</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.postgresql</groupId>
-      <artifactId>postgresql</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.h2database</groupId>
-      <artifactId>h2</artifactId>
-      <scope>provided</scope>
-    </dependency>
-
-    <!-- default plugins -->
-    <dependency>
-      <groupId>org.sonarsource.java</groupId>
-      <artifactId>sonar-java-plugin</artifactId>
-      <type>sonar-plugin</type>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.javascript</groupId>
-      <artifactId>sonar-javascript-plugin</artifactId>
-      <type>sonar-plugin</type>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.dotnet</groupId>
-      <artifactId>sonar-csharp-plugin</artifactId>
-      <type>sonar-plugin</type>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.flex</groupId>
-      <artifactId>sonar-flex-plugin</artifactId>
-      <type>sonar-plugin</type>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.scm.git</groupId>
-      <artifactId>sonar-scm-git-plugin</artifactId>
-      <type>sonar-plugin</type>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.scm.svn</groupId>
-      <artifactId>sonar-scm-svn-plugin</artifactId>
-      <type>sonar-plugin</type>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.php</groupId>
-      <artifactId>sonar-php-plugin</artifactId>
-      <type>sonar-plugin</type>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.python</groupId>
-      <artifactId>sonar-python-plugin</artifactId>
-      <type>sonar-plugin</type>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.typescript</groupId>
-      <artifactId>sonar-typescript-plugin</artifactId>
-      <type>sonar-plugin</type>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.xml</groupId>
-      <artifactId>sonar-xml-plugin</artifactId>
-      <type>sonar-plugin</type>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <!-- do not upgrade because of licensing change -->
-      <groupId>tanukisoft</groupId>
-      <artifactId>wrapper</artifactId>
-      <version>3.2.3</version>
-      <scope>provided</scope>
-    </dependency>
-
-    <!-- unit tests -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <configuration>
-          <archive>
-            <index>true</index>
-            <manifest>
-              <addClasspath>true</addClasspath>
-              <classpathPrefix>common</classpathPrefix>
-              <mainClass>org.sonar.application.App</mainClass>
-            </manifest>
-            <manifestEntries>
-              <mode>distribution</mode>
-              <url>${project.url}</url>
-            </manifestEntries>
-          </archive>
-        </configuration>
-      </plugin>
-      <plugin>
-        <artifactId>maven-assembly-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>assemble-common-lib-dir</id>
-            <phase>prepare-package</phase>
-            <goals>
-              <goal>single</goal>
-            </goals>
-            <configuration>
-              <appendAssemblyId>false</appendAssemblyId>
-              <finalName>common</finalName>
-              <descriptors>
-                <descriptor>assembly-common.xml</descriptor>
-              </descriptors>
-            </configuration>
-          </execution>
-          <execution>
-            <id>assemble-distribution-zip</id>
-            <phase>package</phase>
-            <goals>
-              <goal>single</goal>
-            </goals>
-            <configuration>
-              <appendAssemblyId>false</appendAssemblyId>
-              <finalName>sonarqube-${project.version}</finalName>
-              <descriptors>
-                <descriptor>assembly.xml</descriptor>
-              </descriptors>
-              <recompressZippedFiles>${assembly.recompressZippedFiles}</recompressZippedFiles>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-enforcer-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>enforce-distribution-size</id>
-            <goals>
-              <goal>enforce</goal>
-            </goals>
-            <phase>verify</phase>
-            <configuration>
-              <rules>
-                <requireFilesSize>
-                  <minsize>155000000</minsize>
-                  <maxsize>170000000</maxsize>
-                  <files>
-                    <file>${project.build.directory}/sonarqube-${project.version}.zip</file>
-                  </files>
-                </requireFilesSize>
-              </rules>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <profiles>
-    <profile>
-      <id>dev</id>
-      <properties>
-        <assembly.recompressZippedFiles>false</assembly.recompressZippedFiles>
-      </properties>
-    </profile>
-  </profiles>
-
-</project>
diff --git a/sonar-application/src/main/assembly/logs/README.txt b/sonar-application/src/main/assembly/logs/README.txt
new file mode 100644 (file)
index 0000000..5608b33
--- /dev/null
@@ -0,0 +1 @@
+This directory contains log files. See advanced configuration in conf/sonar.properties.
diff --git a/sonar-check-api/build.gradle b/sonar-check-api/build.gradle
new file mode 100644 (file)
index 0000000..c7749e3
--- /dev/null
@@ -0,0 +1,11 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Check API"
+  }
+}
+
+dependencies {
+  compileOnly 'com.google.code.findbugs:jsr305'
+
+  testCompile 'junit:junit'
+}
diff --git a/sonar-check-api/pom.xml b/sonar-check-api/pom.xml
deleted file mode 100644 (file)
index 76cc534..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-    <relativePath>..</relativePath>
-  </parent>
-  <artifactId>sonar-check-api</artifactId>
-  <name>SonarQube :: Check API</name>
-  <description>Check API</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-</project>
diff --git a/sonar-core/build.gradle b/sonar-core/build.gradle
new file mode 100644 (file)
index 0000000..e9cd948
--- /dev/null
@@ -0,0 +1,53 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Core"
+  }
+}
+
+configurations {
+  includeInResources
+}
+
+dependencies {
+  compileOnly 'com.google.code.findbugs:jsr305'
+  compile 'commons-codec:commons-codec'
+  compile 'org.apache.commons:commons-csv'
+  compile 'org.picocontainer:picocontainer'
+  compile 'com.google.protobuf:protobuf-java'
+  compile 'org.codehaus.sonar:sonar-classloader'
+  compile project(path: ':sonar-plugin-api', configuration: 'shadow')
+  compile 'org.sonarsource.update-center:sonar-update-center-common'
+  compile 'org.slf4j:slf4j-api'
+  compile 'ch.qos.logback:logback-classic'
+  compile 'ch.qos.logback:logback-core'
+
+  includeInResources project(path: ':sonar-plugin-api-deps', configuration: 'shadow')
+
+  testCompile 'junit:junit'
+  testCompile 'org.assertj:assertj-core'
+  testCompile 'com.tngtech.java:junit-dataprovider'
+  testCompile 'org.mockito:mockito-core'
+  testCompile project(':sonar-testing-harness')
+  testCompile 'org.simpleframework:simple'
+  testCompileOnly 'com.google.code.findbugs:jsr305'
+}
+
+// sonar-plugin-api.jar is copied into target JAR file
+processResources {
+  into('/') {
+    from configurations.includeInResources
+    rename '(.*)-' + project.version + '-all.jar', '$1.jar'
+  }
+}
+
+// Used by sonar-db-core to run DB Unit Tests
+artifactoryPublish.skip = false
+publishing {
+  publications {
+    mavenJava(MavenPublication) {
+      from components.java
+      artifact sourcesJar
+      artifact javadocJar
+    }
+  }
+}
diff --git a/sonar-core/pom.xml b/sonar-core/pom.xml
deleted file mode 100644 (file)
index a0e5e0a..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>sonar-core</artifactId>
-
-  <name>SonarQube :: Core</name>
-  <description>Library shared by analyzer and server</description>
-
-  <properties>
-    <sonar.exclusions>target/generated-sources/**/*,target/generated-test-sources/**/*</sonar.exclusions>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-csv</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.picocontainer</groupId>
-      <artifactId>picocontainer</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.protobuf</groupId>
-      <artifactId>protobuf-java</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.codehaus.sonar</groupId>
-      <artifactId>sonar-classloader</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.update-center</groupId>
-      <artifactId>sonar-update-center-common</artifactId>
-    </dependency>
-
-    <!-- logging -->
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-classic</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>jcl-over-slf4j</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>log4j-over-slf4j</artifactId>
-    </dependency>
-
-    <dependency>
-      <!-- sonar-api-deps.jar is copied into target JAR file -->
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-plugin-api-deps</artifactId>
-      <version>${project.version}</version>
-      <optional>true</optional>
-      <scope>runtime</scope>
-    </dependency>
-
-
-    <!-- tests -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.tngtech.java</groupId>
-      <artifactId>junit-dataprovider</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-testing-harness</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.simpleframework</groupId>
-      <artifactId>simple</artifactId>
-      <version>4.1.21</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.basepom.maven</groupId>
-          <artifactId>duplicate-finder-maven-plugin</artifactId>
-          <configuration>
-            <ignoredDependencies>
-              <dependency>
-                <groupId>${project.groupId}</groupId>
-                <artifactId>sonar-plugin-api-deps</artifactId>
-              </dependency>
-            </ignoredDependencies>
-          </configuration>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>copy-deprecated-api-deps</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>copy</goal>
-            </goals>
-            <configuration>
-              <artifactItems>
-                <artifactItem>
-                  <groupId>${project.groupId}</groupId>
-                  <artifactId>sonar-plugin-api-deps</artifactId>
-                  <destFileName>sonar-plugin-api-deps.jar</destFileName>
-                </artifactItem>
-              </artifactItems>
-              <outputDirectory>${project.build.outputDirectory}</outputDirectory>
-              <overWriteReleases>false</overWriteReleases>
-              <overWriteSnapshots>true</overWriteSnapshots>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/sonar-duplications/build.gradle b/sonar-duplications/build.gradle
new file mode 100644 (file)
index 0000000..540f457
--- /dev/null
@@ -0,0 +1,18 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Duplications"
+  }
+}
+
+dependencies {
+  compile 'org.codehaus.sonar:sonar-channel'
+
+  compileOnly 'com.google.code.findbugs:jsr305'
+
+  testCompile 'ch.qos.logback:logback-classic'
+  testCompile 'commons-io:commons-io'
+  testCompile 'junit:junit'
+  testCompile 'org.assertj:assertj-core'
+  testCompile 'org.mockito:mockito-core'
+  testCompile 'pmd:pmd:4.3'
+}
diff --git a/sonar-duplications/pom.xml b/sonar-duplications/pom.xml
deleted file mode 100644 (file)
index 8c7d106..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>sonar-duplications</artifactId>
-
-  <name>SonarQube :: Duplications</name>
-  <description>Detect duplicated code</description>
-
-  <properties>
-    <maven.test.redirectTestOutputToFile>true</maven.test.redirectTestOutputToFile>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.codehaus.sonar</groupId>
-      <artifactId>sonar-channel</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-
-    <!-- unit tests -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>pmd</groupId>
-      <artifactId>pmd</artifactId>
-      <version>4.3</version>
-      <scope>test</scope>
-      <exclusions>
-        <exclusion>
-          <groupId>xml-apis</groupId>
-          <artifactId>xml-apis</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>xerces</groupId>
-          <artifactId>xercesImpl</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-classic</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-</project>
diff --git a/sonar-home/build.gradle b/sonar-home/build.gradle
new file mode 100644 (file)
index 0000000..a367fdd
--- /dev/null
@@ -0,0 +1,28 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Home"
+  }
+}
+
+dependencies {
+  compileOnly 'com.google.code.findbugs:jsr305'
+
+  testCompile 'commons-codec:commons-codec'
+  testCompile 'commons-io:commons-io'
+  testCompile 'junit:junit'
+  testCompile 'org.assertj:assertj-core'
+  testCompile 'org.mockito:mockito-core'
+}
+
+artifactoryPublish.skip = false
+
+// Used by core plugins
+publishing {
+  publications {
+    mavenJava(MavenPublication) {
+      from components.java
+      artifact sourcesJar
+      artifact javadocJar
+    }
+  }
+}
diff --git a/sonar-home/pom.xml b/sonar-home/pom.xml
deleted file mode 100644 (file)
index 658a043..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>sonar-home</artifactId>
-
-  <name>SonarQube :: Home</name>
-  <description>Access the user home directory that contains cache of files</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <!-- used to compare results -->
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-      <scope>test</scope>
-    </dependency>
-
-  </dependencies>
-
-</project>
diff --git a/sonar-markdown/build.gradle b/sonar-markdown/build.gradle
new file mode 100644 (file)
index 0000000..28282ea
--- /dev/null
@@ -0,0 +1,28 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Markdown"
+  }
+}
+
+dependencies {
+  compile 'commons-lang:commons-lang'
+  compile 'org.codehaus.sonar:sonar-channel'
+  compile 'org.slf4j:slf4j-api'
+
+  testCompile 'ch.qos.logback:logback-classic'
+  testCompile 'junit:junit'
+  testCompile 'org.assertj:assertj-core'
+}
+
+artifactoryPublish.skip = false
+
+// Used by core plugins
+publishing {
+  publications {
+    mavenJava(MavenPublication) {
+      from components.java
+      artifact sourcesJar
+      artifact javadocJar
+    }
+  }
+}
diff --git a/sonar-markdown/pom.xml b/sonar-markdown/pom.xml
deleted file mode 100644 (file)
index d02542a..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-    <relativePath>..</relativePath>
-  </parent>
-
-  <artifactId>sonar-markdown</artifactId>
-  <name>SonarQube :: Markdown</name>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.codehaus.sonar</groupId>
-      <artifactId>sonar-channel</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-classic</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-</project>
diff --git a/sonar-plugin-api-deps/build.gradle b/sonar-plugin-api-deps/build.gradle
new file mode 100644 (file)
index 0000000..0c99ac2
--- /dev/null
@@ -0,0 +1,39 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Plugin API Dependencies"
+  }
+}
+
+apply plugin: 'com.github.johnrengelman.shadow'
+
+dependencies {
+  // Versions must not be changed and overridden from root build.gradle (see dependencyManagement section).
+  // These are the versions defined in SQ 5.1
+  compile 'com.google.code.gson:gson:2.3.1'
+  compile 'com.google.guava:guava:10.0.1'
+  compile 'commons-beanutils:commons-beanutils:1.9.3'
+  compile 'commons-codec:commons-codec:1.8'
+  compile 'commons-collections:commons-collections:3.2.2'
+  compile 'org.apache.commons:commons-email:1.3.2'
+  compile 'commons-io:commons-io:2.4'
+  compile 'commons-lang:commons-lang:2.6'
+  compile('dom4j:dom4j:1.6.1') {
+    exclude group: 'xml-apis'
+  }
+  compile 'org.picocontainer:picocontainer:2.14.3'
+  compile 'org.slf4j:slf4j-api:1.7.10'
+  compile 'ch.qos.logback:logback-classic:1.1.2'
+  compile 'ch.qos.logback:logback-core:1.1.2'
+  compile('org.apache.maven:maven-core:3.0.5') {
+    exclude group: 'classworlds', module: 'classworlds'
+    exclude group: 'org.sonatype.sisu', module: 'sisu-guava'
+  }
+  compile 'org.apache.maven:maven-artifact:3.0.5'
+  compile('org.codehaus.sonar:sonar-squid:4.1') {
+    exclude group: 'org.codehaus.sonar', module: 'sonar-check-api'
+  }
+  compile('org.codehaus.sonar:sonar-java-api:5.1') {
+    exclude group: 'org.codehaus.sonar', module: 'sonar-deprecated'
+    exclude group: 'org.codehaus.sonar', module: 'sonar-plugin-api'
+  }
+}
diff --git a/sonar-plugin-api-deps/pom.xml b/sonar-plugin-api-deps/pom.xml
deleted file mode 100644 (file)
index 5576fb9..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>sonar-plugin-api-deps</artifactId>
-
-  <name>SonarQube :: Plugin API Dependencies</name>
-  <description>Deprecated transitive dependencies of sonar-plugin-api</description>
-
-  <properties>
-    <maven.deploy.skip>true</maven.deploy.skip>
-  </properties>
-  
-  <dependencies>
-
-    <!--
-    Versions must not be changed and overridden from parent pom. These are
-    the versions defined in SQ 5.1
-    -->
-
-    <dependency>
-      <groupId>com.google.code.gson</groupId>
-      <artifactId>gson</artifactId>
-      <version>2.3.1</version>
-    </dependency>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-      <version>10.0.1</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-beanutils</groupId>
-      <artifactId>commons-beanutils</artifactId>
-      <version>1.9.3</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-      <version>1.8</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-collections</groupId>
-      <artifactId>commons-collections</artifactId>
-      <version>3.2.2</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-email</artifactId>
-      <version>1.3.2</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-      <version>2.4</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-      <version>2.6</version>
-    </dependency>
-    <dependency>
-      <groupId>dom4j</groupId>
-      <artifactId>dom4j</artifactId>
-      <version>1.6.1</version>
-    </dependency>
-    <dependency>
-      <groupId>xml-apis</groupId>
-      <artifactId>xml-apis</artifactId>
-      <version>1.4.01</version>
-    </dependency>
-    <dependency>
-      <groupId>org.picocontainer</groupId>
-      <artifactId>picocontainer</artifactId>
-      <version>2.14.3</version>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-      <version>1.7.10</version>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-classic</artifactId>
-      <version>1.1.2</version>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-core</artifactId>
-      <version>1.1.2</version>
-    </dependency>
-    <!-- Needed by old versions of Java plugin (JavaClasspath) -->
-    <dependency>
-      <groupId>org.apache.maven</groupId>
-      <artifactId>maven-core</artifactId>
-      <version>3.0.5</version>
-      <exclusions>
-        <exclusion>
-          <!-- See SONAR-2455 -->
-          <groupId>classworlds</groupId>
-          <artifactId>classworlds</artifactId>
-        </exclusion>
-        <exclusion>
-          <!-- this fork conflicts with google's guava -->
-          <groupId>org.sonatype.sisu</groupId>
-          <artifactId>sisu-guava</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.maven</groupId>
-      <artifactId>maven-artifact</artifactId>
-      <version>3.0.5</version>
-    </dependency>
-    <dependency>
-      <groupId>org.codehaus.sonar</groupId>
-      <artifactId>sonar-squid</artifactId>
-      <version>4.1</version>
-      <exclusions>
-        <exclusion>
-          <!--
-          Provided at runtime by sonar-plugin-api.
-          Do not use transitive version 4.1 but the current version.
-           -->
-          <groupId>org.codehaus.sonar</groupId>
-          <artifactId>sonar-check-api</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>org.codehaus.sonar</groupId>
-      <artifactId>sonar-java-api</artifactId>
-      <version>5.1</version>
-      <exclusions>
-        <exclusion>
-          <groupId>org.codehaus.sonar</groupId>
-          <artifactId>sonar-deprecated</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.codehaus.sonar</groupId>
-          <artifactId>sonar-plugin-api</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-shade-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>package</phase>
-            <goals>
-              <goal>shade</goal>
-            </goals>
-            <configuration>
-              <minimizeJar>false</minimizeJar>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>empty-javadoc-jar</id>
-            <phase>package</phase>
-            <goals>
-              <goal>jar</goal>
-            </goals>
-            <configuration>
-              <classifier>javadoc</classifier>
-            </configuration>
-          </execution>
-          <execution>
-            <id>empty-sources-jar</id>
-            <phase>package</phase>
-            <goals>
-              <goal>jar</goal>
-            </goals>
-            <configuration>
-              <classifier>sources</classifier>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-  <profiles>
-    <!--
-    This module contains deprecated dependencies (containing vulnerability issues) for plugins built for SonarQube < 5.2
-    It will be removed for 7.0
-    -->
-    <profile>
-      <!--
-      check if maven dependencies have vulnerabilities listed in CVE
-      Standalone command: mvn org.owasp:dependency-check-maven:check
-      See http://jeremylong.github.io/DependencyCheck
-      -->
-      <id>securityCheck</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.owasp</groupId>
-            <artifactId>dependency-check-maven</artifactId>
-            <executions>
-              <execution>
-                <goals>
-                  <goal>check</goal>
-                </goals>
-                <configuration>
-                  <skip>true</skip>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
-
-</project>
diff --git a/sonar-plugin-api/build.gradle b/sonar-plugin-api/build.gradle
new file mode 100644 (file)
index 0000000..8bf8e28
--- /dev/null
@@ -0,0 +1,82 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Plugin API"
+  }
+}
+
+apply plugin: 'com.github.johnrengelman.shadow'
+
+dependencies {
+  // please keep the list grouped by configuration and ordered by name
+
+  compile 'commons-codec:commons-codec'
+  compile 'commons-io:commons-io'
+  compile 'commons-lang:commons-lang'
+  compile 'com.google.code.gson:gson'
+  compile 'com.google.guava:guava'
+
+  // shaded, but not relocated
+  compile project(':sonar-check-api')
+  compile(project(':sonar-duplications')) {
+    exclude group: 'org.slf4', module: 'slf4j-api'
+  }
+
+  shadow 'org.codehaus.staxmate:staxmate'
+  shadow 'org.codehaus.woodstox:stax2-api'
+  shadow 'org.codehaus.woodstox:woodstox-core-lgpl'
+
+  compileOnly 'ch.qos.logback:logback-classic'
+  compileOnly 'ch.qos.logback:logback-core'
+  compileOnly 'com.google.code.findbugs:jsr305'
+  compileOnly 'javax.servlet:javax.servlet-api'
+  compileOnly 'junit:junit'
+  compileOnly 'org.slf4j:slf4j-api'
+
+  testCompile 'com.tngtech.java:junit-dataprovider'
+  testCompile 'org.assertj:assertj-core'
+  testCompile 'org.mockito:mockito-core'
+  testCompile project(':sonar-testing-harness')
+}
+
+sourceSets {
+  // Make the compileOnly dependencies available when compiling/running tests
+  test.compileClasspath += configurations.compileOnly + configurations.shadow
+  test.runtimeClasspath += configurations.compileOnly + configurations.shadow
+}
+
+def on3Digits(version) {
+  def projectversion3digits = version - ~/-\w+/
+  projectversion3digits = projectversion3digits.tokenize('.').plus(0).take(3).join('.')
+}
+
+import org.apache.tools.ant.filters.ReplaceTokens
+processResources {
+  filter ReplaceTokens, tokens: [
+    // The build version is composed of 4 fields, including the semantic version and the build number provided by Travis.
+    'project.buildVersion': project.version.endsWith('SNAPSHOT') ? project.version : on3Digits(project.version) + '.' + System.getProperty("buildNumber"),
+    'project.version.3digits': project.version.endsWith('SNAPSHOT') ? project.version : on3Digits(project.version)
+  ]
+}
+
+shadowJar {
+  configurations = [project.configurations.default]
+  relocate('com.google', 'org.sonar.api.internal.google')
+  relocate('org.apache.commons', 'org.sonar.api.internal.apachecommons')
+  dependencies {
+      exclude(dependency('org.codehaus.woodstox:woodstox-core-lgpl'))
+      exclude(dependency('org.codehaus.woodstox:stax2-api'))
+      exclude(dependency('org.codehaus.staxmate:staxmate'))
+   }
+}
+
+artifactoryPublish.skip = false
+
+publishing {
+  publications {
+    mavenJava(MavenPublication) {
+      artifact source: shadowJar, classifier: null
+      artifact sourcesJar
+      artifact javadocJar
+    }
+  }
+}
diff --git a/sonar-plugin-api/pom.xml b/sonar-plugin-api/pom.xml
deleted file mode 100644 (file)
index ab8dc7c..0000000
+++ /dev/null
@@ -1,282 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>sonar-plugin-api</artifactId>
-  <packaging>jar</packaging>
-
-  <name>SonarQube :: Plugin API</name>
-
-  <properties>
-    <!--
-     version as stored in JAR and displayed in webapp. It is
-     overridden on Travis when replacing SNAPSHOT version by
-     build unique version, for instance "6.3.0.12345".
-     -->
-    <buildVersion>${project.version}</buildVersion>
-
-    <!--
-    a truncated version on three fields is kept for backward-compatibility
-    with scanners
-    -->
-    <buildVersionOnThreeFields>${buildVersion}</buildVersionOnThreeFields>
-  </properties>
-
-  <dependencies>
-
-    <!--
-    The following artifacts are shaded and relocated in an internal package.
-    They are not visible by plugins
-    -->
-    <dependency>
-      <groupId>com.google.code.gson</groupId>
-      <artifactId>gson</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-    </dependency>
-
-    <!--
-    The following artifacts are shaded but not relocated. They
-    are provided at runtime, so plugins can use them but
-    can not change their version.
-    Long-term target is to remove them from API. They should be
-    embedded by plugins.
-    -->
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-check-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-duplications</artifactId>
-      <version>${project.version}</version>
-      <exclusions>
-        <exclusion>
-          <groupId>org.slf4j</groupId>
-          <artifactId>slf4j-api</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-
-    <!--
-      Transitive dependencies available at runtime. They are not shaded with API
-      as they are not managed by SonarSource. Versions should not be
-      overridden by plugins though.
-    -->
-    <dependency>
-      <groupId>org.codehaus.woodstox</groupId>
-      <artifactId>woodstox-core-lgpl</artifactId>
-      <exclusions>
-        <exclusion>
-          <groupId>stax</groupId>
-          <artifactId>stax-api</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>org.codehaus.woodstox</groupId>
-      <artifactId>stax2-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.codehaus.staxmate</groupId>
-      <artifactId>staxmate</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-      <optional>true</optional>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>javax.servlet-api</artifactId>
-      <version>3.0.1</version>
-      <scope>provided</scope>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-classic</artifactId>
-      <scope>provided</scope>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-core</artifactId>
-      <scope>provided</scope>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>provided</scope>
-      <optional>true</optional>
-    </dependency>
-
-    <!-- unit tests -->
-    <dependency>
-      <groupId>com.tngtech.java</groupId>
-      <artifactId>junit-dataprovider</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-testing-harness</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-shade-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>package</phase>
-            <goals>
-              <goal>shade</goal>
-            </goals>
-            <configuration>
-              <minimizeJar>true</minimizeJar>
-              <createDependencyReducedPom>true</createDependencyReducedPom>
-              <artifactSet>
-                <excludes>
-                  <exclude>org.codehaus.woodstox:woodstox-core-lgpl</exclude>
-                  <exclude>org.codehaus.woodstox:stax2-api</exclude>
-                  <exclude>org.codehaus.staxmate:staxmate</exclude>
-                </excludes>
-              </artifactSet>
-              <filters>
-                <!-- The following deps are used transitively, so make sure they are not minimized -->
-                <filter>
-                  <artifact>${project.groupId}:sonar-duplications</artifact>
-                  <includes>
-                    <include>**</include>
-                  </includes>
-                </filter> 
-                <filter>
-                  <artifact>org.codehaus.sonar:sonar-channel</artifact>  
-                  <includes>
-                    <include>**</include>
-                  </includes>
-                </filter>
-                <filter>
-                  <artifact>org.sonarsource.sonarqube:sonar-check-api</artifact>  
-                  <includes>
-                    <include>**</include>
-                  </includes>
-                </filter>
-              </filters>
-              <relocations>
-                <relocation>
-                  <pattern>com.google</pattern>
-                  <shadedPattern>org.sonar.api.internal.google</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>org.apache.commons</pattern>
-                  <shadedPattern>org.sonar.api.internal.apachecommons</shadedPattern>
-                </relocation>
-              </relocations>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-            <configuration>
-              <excludes>
-                <exclude>logback-test.xml</exclude>
-              </excludes>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>com.github.genthaler</groupId>
-        <artifactId>beanshell-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>compute-version-on-three-fields</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <script>
-                <![CDATA[
-                 if (! "${buildVersion}".endsWith("-SNAPSHOT")) {
-                   // example: "6.3.0.1234". To be backward-compatible with scanners, only "6.3.0" must be kept
-                   fields = "${buildVersion}".split("\\.");
-                   sj = new StringJoiner(".");
-                   i = 0;
-                   for (String field : fields) {
-                     if (i == 3) {
-                       break;
-                     }
-                     sj.add(field);
-                     ++i;
-                   }
-                   project.getProperties().setProperty("buildVersionOnThreeFields", sj.toString());
-                 }
-                ]]>
-              </script>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-
-    <resources>
-      <resource>
-        <!-- Used to resolve variables in files sq-version.txt and sonar-api-version.txt -->
-        <directory>src/main/resources</directory>
-        <filtering>true</filtering>
-      </resource>
-    </resources>
-  </build>
-
-</project>
index 6b7ce460f253213509b3befc4947363273139389..d2193c1c60fc25acdc7a546c5cdff5d80797550f 100644 (file)
@@ -1 +1 @@
-${buildVersion}
+@project.buildVersion@
\ No newline at end of file
index ab8c87a30ad5b318a559d51fc8381258196711e5..b3f131da385f731a999df34b345e0e17bae9892f 100644 (file)
@@ -1 +1 @@
-${buildVersionOnThreeFields}
+@project.version.3digits@
\ No newline at end of file
diff --git a/sonar-scanner-engine-shaded/build.gradle b/sonar-scanner-engine-shaded/build.gradle
new file mode 100644 (file)
index 0000000..9d32f9d
--- /dev/null
@@ -0,0 +1,11 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Scanner Engine Shaded"
+  }
+}
+
+apply plugin: 'com.github.johnrengelman.shadow'
+
+dependencies {
+  compile project(':sonar-scanner-engine')
+}
diff --git a/sonar-scanner-engine-shaded/pom.xml b/sonar-scanner-engine-shaded/pom.xml
deleted file mode 100644 (file)
index 2ccd95b..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>sonar-scanner-engine-shaded</artifactId>
-  <name>SonarQube :: Scanner Engine Shaded</name>
-  <description>All Scanner Engine dependencies in a single jar</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-scanner-engine</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-shade-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>package</phase>
-            <goals>
-              <goal>shade</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>empty-javadoc-jar</id>
-            <phase>package</phase>
-            <goals>
-              <goal>jar</goal>
-            </goals>
-            <configuration>
-              <classifier>javadoc</classifier>
-            </configuration>
-          </execution>
-          <execution>
-            <id>empty-sources-jar</id>
-            <phase>package</phase>
-            <goals>
-              <goal>jar</goal>
-            </goals>
-            <configuration>
-              <classifier>sources</classifier>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/sonar-scanner-engine/build.gradle b/sonar-scanner-engine/build.gradle
new file mode 100644 (file)
index 0000000..e5ee108
--- /dev/null
@@ -0,0 +1,63 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Scanner Engine"
+  }
+}
+
+// Excluding scanner files in order to benefit of incremental build support
+sourceSets.test.resources {
+  exclude '**/.sonar/**'
+}
+
+configurations {
+  testCompile.extendsFrom(compileOnly)
+}
+
+dependencies {
+  compile 'commons-codec:commons-codec'
+  compile 'commons-lang:commons-lang'
+  compile 'com.google.code.gson:gson'
+  compile 'com.google.guava:guava'
+  compile 'org.freemarker:freemarker'
+  compile 'org.slf4j:jul-to-slf4j'
+  compile 'org.slf4j:log4j-over-slf4j'
+  compile 'org.slf4j:slf4j-api'
+  compile 'org.sonarsource:sonar-persistit'
+  compile project(':sonar-core')
+  compile project(':sonar-scanner-protocol')
+  compile project(':sonar-ws')
+  compile project(':sonar-home')
+  compile project(path: ':sonar-plugin-api', configuration: 'shadow')
+
+  compileOnly 'com.google.code.findbugs:jsr305'
+
+  testCompile 'com.tngtech.java:junit-dataprovider'
+  testCompile 'javax.servlet:javax.servlet-api'
+  testCompile 'junit:junit'
+  // Workaround to resolve dependencies of eclipse specific packaging: https://issues.gradle.org/browse/GRADLE-2076
+  testCompile module('org.eclipse.jetty:jetty-server') {
+    dependencies(
+        "org.eclipse.jetty.orbit:javax.servlet:3.0.0.v201112011016@jar",
+        "org.eclipse.jetty:jetty-continuation:8.1.2.v20120308",
+        "org.eclipse.jetty:jetty-http:8.1.2.v20120308"
+    )
+  }
+  testCompile 'org.assertj:assertj-core'
+  testCompile 'org.mockito:mockito-core'
+  testCompile 'net.javacrumbs.json-unit:json-unit-assertj:0.0.15'
+  testCompile project(':plugins:sonar-xoo-plugin')
+  testCompile project(':sonar-plugin-api').sourceSets.test.output
+}
+
+artifactoryPublish.skip = false
+
+// Used by core plugins
+publishing {
+  publications {
+    mavenJava(MavenPublication) {
+      from components.java
+      artifact sourcesJar
+      artifact javadocJar
+    }
+  }
+}
diff --git a/sonar-scanner-engine/pom.xml b/sonar-scanner-engine/pom.xml
deleted file mode 100644 (file)
index 622c760..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>sonar-scanner-engine</artifactId>
-  <name>SonarQube :: Scanner Engine</name>
-  
-  <properties>
-    <enableBenchmarkAssertions>false</enableBenchmarkAssertions>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource</groupId>
-      <artifactId>sonar-persistit</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-scanner-protocol</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-ws</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-home</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>jcl-over-slf4j</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>log4j-over-slf4j</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>jul-to-slf4j</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.gson</groupId>
-      <artifactId>gson</artifactId>
-    </dependency>
-    <!-- For HTML Report -->
-    <dependency>
-      <groupId>org.freemarker</groupId>
-      <artifactId>freemarker</artifactId>
-    </dependency>
-
-    <!-- unit tests -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.tngtech.java</groupId>
-      <artifactId>junit-dataprovider</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>net.javacrumbs.json-unit</groupId>
-      <artifactId>json-unit-assertj</artifactId>
-      <version>0.0.15</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <type>test-jar</type>
-      <scope>test</scope>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-server</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>javax.servlet-api</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-xoo-plugin</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-  
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-  <profiles>
-    <profile>
-      <id>runBenchmarks</id>
-      <activation>
-        <property>
-          <name>runBenchmarks</name>
-        </property>
-      </activation>
-      <properties>
-        <enableBenchmarkAssertions>true</enableBenchmarkAssertions>
-      </properties>
-    </profile>
-  </profiles>
-</project>
diff --git a/sonar-scanner-protocol/build.gradle b/sonar-scanner-protocol/build.gradle
new file mode 100644 (file)
index 0000000..b852cfa
--- /dev/null
@@ -0,0 +1,34 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Scanner :: Protocol"
+    property 'sonar.exclusions', 'src/main/java/org/sonar/scanner/protocol/viewer/**'
+  }
+}
+
+dependencies {
+  compile 'commons-io:commons-io'
+  compile 'com.google.code.gson:gson'
+  compile 'com.google.protobuf:protobuf-java'
+  compile 'net.jpountz.lz4:lz4'
+  compile project(':sonar-core')
+
+  compileOnly 'com.google.code.findbugs:jsr305'
+
+  testCompile 'com.google.guava:guava'
+  testCompile 'junit:junit'
+  testCompile 'org.assertj:assertj-core'
+  testCompile 'org.mockito:mockito-core'
+  testCompile 'net.javacrumbs.json-unit:json-unit-assertj:0.0.15'
+}
+
+// Used by sonar-db-core to run DB Unit Tests
+artifactoryPublish.skip = false
+publishing {
+  publications {
+    mavenJava(MavenPublication) {
+      from components.java
+      artifact sourcesJar
+      artifact javadocJar
+    }
+  }
+}
diff --git a/sonar-scanner-protocol/pom.xml b/sonar-scanner-protocol/pom.xml
deleted file mode 100644 (file)
index 82d52b7..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>sonar-scanner-protocol</artifactId>
-  <name>SonarQube :: Scanner :: Protocol</name>
-
-  <description>Classes used for communication between scanner and server</description>
-
-  <properties>
-    <!-- Viewer is for our internal use. This is not production code and mostly generated with Eclipse GUI builder -->
-    <sonar.exclusions>target/generated-sources/**/*,src/main/java/org/sonar/scanner/protocol/viewer/**</sonar.exclusions>
-    <sonar.test.exclusions>target/generated-test-sources/**/*</sonar.test.exclusions>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>net.jpountz.lz4</groupId>
-      <artifactId>lz4</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.protobuf</groupId>
-      <artifactId>protobuf-java</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.gson</groupId>
-      <artifactId>gson</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-core</artifactId>
-    </dependency>
-
-    <!-- unit tests -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>net.javacrumbs.json-unit</groupId>
-      <artifactId>json-unit-assertj</artifactId>
-      <version>0.0.15</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-assembly-plugin</artifactId>
-        <configuration>
-          <finalName>scanner-report-viewer-${project.version}</finalName>
-          <archive>
-            <manifest>
-              <mainClass>org.sonar.scanner.protocol.viewer.ScannerReportViewerApp</mainClass>
-            </manifest>
-          </archive>
-          <descriptors>
-            <descriptor>src/main/assembly/viewer.xml</descriptor>
-          </descriptors>
-        </configuration>
-        <executions>
-          <execution>
-            <id>make-assembly</id>
-            <phase>package</phase>
-            <goals>
-              <goal>single</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/sonar-testing-harness/build.gradle b/sonar-testing-harness/build.gradle
new file mode 100644 (file)
index 0000000..3908c07
--- /dev/null
@@ -0,0 +1,29 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Testing Harness"
+  }
+}
+
+dependencies {
+  compile 'commons-io:commons-io'
+  compile 'com.googlecode.json-simple:json-simple'
+  compile 'com.google.code.gson:gson'
+  compile 'junit:junit'
+  compile 'org.hamcrest:hamcrest-core'
+
+  compileOnly 'com.google.code.findbugs:jsr305'
+
+  testCompile 'org.assertj:assertj-core'
+}
+
+// Used by sonar-db-core to run DB Unit Tests
+artifactoryPublish.skip = false
+publishing {
+  publications {
+    mavenJava(MavenPublication) {
+      from components.java
+      artifact sourcesJar
+      artifact javadocJar
+    }
+  }
+}
diff --git a/sonar-testing-harness/pom.xml b/sonar-testing-harness/pom.xml
deleted file mode 100644 (file)
index 3b776e8..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-  <artifactId>sonar-testing-harness</artifactId>
-  <packaging>jar</packaging>
-  <name>SonarQube :: Testing Harness</name>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.googlecode.json-simple</groupId>
-      <artifactId>json-simple</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.gson</groupId>
-      <artifactId>gson</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.hamcrest</groupId>
-      <artifactId>hamcrest-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-</project>
index 00e6e6096a046dc1782c24473c35a4a1aedf7e55..ec7aa2c2a816c57261698355c54459919b1e51b8 100644 (file)
@@ -83,7 +83,7 @@ public class BundleSynchronizedMatcher extends BaseMatcher<String> {
   @Override
   public void describeTo(Description description) {
     // report file
-    File dumpFile = new File("target/l10n/" + bundleName + ".report.txt");
+    File dumpFile = new File("build/l10n/" + bundleName + ".report.txt");
 
     // prepare message
     StringBuilder details = prepareDetailsMessage(dumpFile);
diff --git a/sonar-ws-generator/build.gradle b/sonar-ws-generator/build.gradle
new file mode 100644 (file)
index 0000000..01c9b64
--- /dev/null
@@ -0,0 +1,23 @@
+sonarqube {
+  skipProject = true
+}
+
+dependencies {
+  compile 'com.google.code.gson:gson:2.8.2'
+  compile 'com.google.guava:guava'
+  compile 'org.apache.velocity:velocity:1.7'
+  compile 'org.slf4j:log4j-over-slf4j'
+  compile 'org.sonarsource.orchestrator:sonar-orchestrator'
+  compile project(':sonar-ws')
+
+  compileOnly 'com.google.code.findbugs:jsr305'
+}
+
+task fatJar(type: Jar) {
+  manifest {
+    attributes 'Main-Class': 'org.sonarqube.wsgenerator.Generator'
+  }
+  classifier = 'jar-with-dependencies'
+  from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
+  with jar
+}
diff --git a/sonar-ws-generator/pom.xml b/sonar-ws-generator/pom.xml
deleted file mode 100644 (file)
index 80a7bc2..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>sonar-ws-generator</artifactId>
-  <name>SonarQube :: Web Service :: Generator</name>
-  <description>Generate source files of sonar-ws</description>
-
-  <properties>
-    <sonar.exclusions>src/**/*</sonar.exclusions>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.velocity</groupId>
-      <artifactId>velocity</artifactId>
-      <version>1.7</version>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>log4j-over-slf4j</artifactId>
-      <version>1.7.25</version>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.orchestrator</groupId>
-      <artifactId>sonar-orchestrator</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-ws</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.gson</groupId>
-      <artifactId>gson</artifactId>
-      <version>2.8.2</version>
-    </dependency>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <profiles>
-    <profile>
-      <id>run-ws-generator</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-assembly-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>assemble-all</id>
-                <phase>package</phase>
-                <goals>
-                  <goal>single</goal>
-                </goals>
-                <configuration>
-                  <descriptorRefs>
-                    <descriptorRef>jar-with-dependencies</descriptorRef>
-                  </descriptorRefs>
-                  <archive>
-                    <manifest>
-                      <mainClass>org.sonarqube.wsgenerator.Generator</mainClass>
-                    </manifest>
-                  </archive>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
-
-</project>
index f785bcb403274c4afc3ca475c8bfdf0697dd053b..ddc5a73bc826653db5f332270c82282a284631bc 100755 (executable)
@@ -3,7 +3,9 @@ set -euo pipefail
 
 SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
 
-cd $SCRIPTPATH
-mvn clean package -Prun-ws-generator
-java -jar target/sonar-ws-generator-*-SNAPSHOT-jar-with-dependencies.jar
-cp -R target/generated-sources/results/org/sonarqube/ws/client/* ../sonar-ws/src/main/java/org/sonarqube/ws/client
+pushd $SCRIPTPATH/..
+pwd
+./gradlew :sonar-ws-generator:build :sonar-ws-generator:fatJar
+popd
+java -jar build/libs/sonar-ws-generator-*-SNAPSHOT-jar-with-dependencies.jar
+cp -R build/generated-sources/results/org/sonarqube/ws/client/* ../sonar-ws/src/main/java/org/sonarqube/ws/client
index 29e210241faef4d856937c7a8a5858fb975b03f3..8c232851c21344f9294c5c952c432378123ec472 100644 (file)
@@ -20,6 +20,7 @@
 package org.sonarqube.wsgenerator;
 
 import com.sonar.orchestrator.Orchestrator;
+import com.sonar.orchestrator.OrchestratorBuilder;
 import com.sonar.orchestrator.http.HttpCall;
 import com.sonar.orchestrator.http.HttpResponse;
 import com.sonar.orchestrator.locator.FileLocation;
@@ -32,10 +33,10 @@ public class ApiDefinitionDownloader {
   }
 
   public static String downloadApiDefinition() {
-    Orchestrator orchestrator = Orchestrator
-      .builderEnv()
-      .setZipFile(FileLocation.byWildcardMavenFilename(new File("../sonar-application/target"), "sonarqube-*.zip").getFile())
-      .build();
+    OrchestratorBuilder builder = Orchestrator.builderEnv();
+    builder.setZipFile(FileLocation.byWildcardMavenFilename(new File("../sonar-application/build/distributions"), "sonar-application-*.zip").getFile())
+      .setOrchestratorProperty("orchestrator.workspaceDir", "build");
+    Orchestrator orchestrator = builder.build();
 
     orchestrator.start();
     try {
index f76decd69a6f679fcdc8cdc4b5d27ed033d28902..0d12506fd38d7abce62e7d69138b35b6a177e623 100644 (file)
@@ -37,7 +37,7 @@ import static java.util.Arrays.asList;
 public class Helper {
 
   static final Set<String> PATH_EXCLUSIONS = new HashSet<>(asList("api/orchestrator"));
-  private static final String OUTPUT_DIR = "target/generated-sources/results";
+  private static final String OUTPUT_DIR = "build/generated-sources/results";
   private final Map<String, List<String[]>> responseTypes;
 
   public Helper() {
diff --git a/sonar-ws/build.gradle b/sonar-ws/build.gradle
new file mode 100644 (file)
index 0000000..5695a5a
--- /dev/null
@@ -0,0 +1,39 @@
+sonarqube {
+  properties {
+    property 'sonar.projectName', "${projectTitle} :: Web Service"
+    property 'sonar.exclusions', 'src/main/java/org/sonarqube/ws/client/*/*.java'
+  }
+}
+
+configurations {
+  testCompile.extendsFrom(compileOnly)
+}
+
+dependencies {
+  compile 'commons-io:commons-io'
+  compile 'com.google.guava:guava'
+  compile 'com.google.protobuf:protobuf-java'
+  compile 'com.squareup.okhttp3:okhttp'
+
+  compileOnly 'com.google.code.findbugs:jsr305'
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+
+  testCompile 'commons-lang:commons-lang'
+  testCompile 'com.squareup.okhttp3:mockwebserver'
+  testCompile 'junit:junit'
+  testCompile 'org.assertj:assertj-core'
+  testCompile 'org.mockito:mockito-core'
+  testCompile project(':sonar-testing-harness')
+}
+
+artifactoryPublish.skip = false
+
+publishing {
+  publications {
+    mavenJava(MavenPublication) {
+      from components.java
+      artifact sourcesJar
+      artifact javadocJar
+    }
+  }
+}
diff --git a/sonar-ws/pom.xml b/sonar-ws/pom.xml
deleted file mode 100644 (file)
index ba4a480..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>sonar-ws</artifactId>
-  <name>SonarQube :: Web Service</name>
-  <description>Protocol Buffers specification of Web Services</description>
-
-  <properties>
-    <sonar.exclusions>target/generated-sources/**/*,src/main/java/org/sonarqube/ws/client/*/*.java</sonar.exclusions>
-    <sonar.test.exclusions>target/generated-test-sources/**/*,src/test/java/org/sonarqube/ws/client/*/*.java</sonar.test.exclusions>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.google.protobuf</groupId>
-      <artifactId>protobuf-java</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.squareup.okhttp3</groupId>
-      <artifactId>okhttp</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <scope>provided</scope>
-      <optional>true</optional>
-    </dependency>
-
-    <!-- Tests -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sonar-testing-harness</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.squareup.okhttp3</groupId>
-      <artifactId>mockwebserver</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-</project>
diff --git a/stop.sh b/stop.sh
index 056b97401ad299117c1566e059007e373f6a92f2..e06029e1baf8636ce91e0e2ea79be0f27cea600b 100755 (executable)
--- a/stop.sh
+++ b/stop.sh
@@ -8,7 +8,7 @@ else
   OS='linux-x86-64'
 fi
 
-SONAR_SH=sonar-application/target/sonarqube-*/bin/$OS/sonar.sh
+SONAR_SH=sonar-application/build/distributions/sonarqube-*/bin/$OS/sonar.sh
 if [ -f $SONAR_SH ]; then
   sh $SONAR_SH stop
 fi
diff --git a/tests/build.gradle b/tests/build.gradle
new file mode 100644 (file)
index 0000000..3f4d6d8
--- /dev/null
@@ -0,0 +1,149 @@
+ext {
+  jettyVersion = '9.3.11.v20160721'
+  bytemanVersion = '3.0.10'
+}
+
+configurations {
+  sqZip
+  includeInTestResources
+}
+
+def pluginsForITs = [
+    ':plugins:sonar-xoo-plugin',
+    ':tests:plugins:access-secured-props-plugin',
+    ':tests:plugins:base-auth-plugin',
+    ':tests:plugins:batch-plugin',
+    ':tests:plugins:extension-lifecycle-plugin',
+    ':tests:plugins:fake-billing-plugin',
+    ':tests:plugins:fake-governance-plugin',
+    ':tests:plugins:foo-plugin-v1',
+    ':tests:plugins:foo-plugin-v2',
+    ':tests:plugins:global-property-change-plugin',
+    ':tests:plugins:issue-filter-plugin',
+    ':tests:plugins:l10n-fr-pack',
+    ':tests:plugins:license-plugin',
+    ':tests:plugins:oauth2-auth-plugin',
+    ':tests:plugins:project-builder-plugin',
+    ':tests:plugins:property-relocation-plugin',
+    ':tests:plugins:property-sets-plugin',
+    ':tests:plugins:security-plugin',
+    ':tests:plugins:server-plugin',
+    ':tests:plugins:settings-encryption-plugin',
+    ':tests:plugins:settings-plugin',
+    ':tests:plugins:sonar-fake-plugin',
+    ':tests:plugins:sonar-subcategories-plugin',
+    ':tests:plugins:ui-extensions-plugin',
+    ':tests:plugins:posttask-plugin',
+    ':tests:plugins:wait-at-platform-level4-plugin',
+    ':tests:plugins:ws-plugin',
+    ':tests:plugins:backdating-plugin-v1',
+    ':tests:plugins:backdating-plugin-v2',
+    ':tests:plugins:backdating-customplugin'
+]
+
+dependencies {
+  testCompile 'org.sonarsource.orchestrator:sonar-orchestrator'
+  testCompile project(':server:sonar-qa-util')
+  testCompile project(':sonar-ws')
+  // required version 23.0 for selenide
+  testCompile 'com.google.guava:guava:23.0'
+  testCompile 'junit:junit'
+  testCompile 'org.assertj:assertj-core'
+  testCompile 'org.assertj:assertj-guava'
+  testCompile 'com.googlecode.json-simple:json-simple'
+  testCompile 'org.skyscreamer:jsonassert:1.2.0'
+  testCompile 'com.squareup.okhttp3:mockwebserver'
+  testCompile 'org.subethamail:subethasmtp'
+  testCompile "org.eclipse.jetty:jetty-server:${jettyVersion}"
+  testCompile "org.eclipse.jetty:jetty-servlet:${jettyVersion}"
+  testCompile "org.eclipse.jetty:jetty-proxy:${jettyVersion}"
+  testCompile "org.jboss.byteman:byteman-submit:${bytemanVersion}"
+  testCompile 'com.microsoft.sqlserver:mssql-jdbc'
+  testCompile 'mysql:mysql-connector-java'
+  testCompile 'org.postgresql:postgresql'
+  testCompile 'com.oracle.jdbc:ojdbc8'
+
+  includeInTestResources "org.jboss.byteman:byteman:${bytemanVersion}"
+}
+
+sonarqube {
+  skipProject = true
+}
+
+//UT are excluding in order for ITs to only run when needed
+test{
+  exclude '*'
+}
+
+task integrationTest(type: Test) {
+  description = 'Runs integration tests'
+
+  for (plugin in pluginsForITs) {
+    dependsOn project(plugin).assemble
+  }
+
+  jacoco.enabled = false
+
+  systemProperty 'orchestrator.configUrl', System.getProperty('orchestrator.configUrl')
+  systemProperty 'orchestrator.artifactory.apiKey', System.getProperty('orchestrator.artifactory.apiKey')
+  systemProperty 'orchestrator.artifactory.repositories', System.getProperty('orchestrator.artifactory.repositories')
+  if (project.hasProperty('cix')) {
+    systemProperty 'sonar.runtimeVersion', version
+  }
+
+  def category = System.getProperty('category')
+  filter {
+    switch (category) {
+      case 'Lite':
+        includeTestsMatching 'org.sonarqube.tests.lite.*Suite'
+        break
+      case 'Category1':
+        includeTestsMatching 'org.sonarqube.tests.Category1Suite'
+        includeTestsMatching 'org.sonarqube.tests.authorization.*Suite'
+        includeTestsMatching 'org.sonarqube.tests.measure.*Suite'
+        includeTestsMatching 'org.sonarqube.tests.qualityGate.*Suite'
+        includeTestsMatching 'org.sonarqube.tests.source.*Suite'
+        break
+      case 'Category2':
+        includeTestsMatching 'org.sonarqube.tests.issue.*Suite'
+        includeTestsMatching 'org.sonarqube.tests.test.*Suite'
+        includeTestsMatching 'org.sonarqube.tests.qualityModel.*Suite'
+        break
+      case 'Category3':
+        includeTestsMatching 'org.sonarqube.tests.Category3Suite'
+        includeTestsMatching 'org.sonarqube.tests.component.*Suite'
+        includeTestsMatching 'org.sonarqube.tests.project.*Suite'
+        break
+      case 'Category4':
+        includeTestsMatching 'org.sonarqube.tests.Category4Suite'
+        includeTestsMatching 'org.sonarqube.tests.duplication.*Suite'
+        includeTestsMatching 'org.sonarqube.tests.user.*Suite'
+        includeTestsMatching 'org.sonarqube.tests.webhook.*Suite'
+        break
+      case 'Category5':
+        includeTestsMatching 'org.sonarqube.tests.Category5Suite'
+        break
+      case 'Category6':
+        includeTestsMatching 'org.sonarqube.tests.Category6Suite'
+        includeTestsMatching 'org.sonarqube.tests.organization.*Suite'
+        break
+      case 'Plugins':
+        includeTestsMatching 'org.sonarqube.tests.plugins.PluginsSuite'
+        break
+      case 'Upgrade':
+        includeTestsMatching 'org.sonarqube.tests.upgrade.UpgradeSuite'
+        break
+      case 'ServerPerformance':
+        includeTestsMatching 'org.sonarqube.tests.performance.server.ServerPerformanceSuite'
+        break
+    }
+  }
+}
+
+processTestResources() {
+  into('/') {
+    from configurations.includeInTestResources
+    // TODO cache not invalidated when pattern changes?
+    rename '(.*)-' + bytemanVersion + '.jar', '$1.jar'
+  }
+}
diff --git a/tests/plugins/access-secured-props-plugin/build.gradle b/tests/plugins/access-secured-props-plugin/build.gradle
new file mode 100644 (file)
index 0000000..b41c78f
--- /dev/null
@@ -0,0 +1,19 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'AccessSecuredPropsPlugin',
+      'Plugin-Version': '1.0.2.42',
+      'Plugin-Display-Version': '1.0.2 (build 42)',
+      'Plugin-Class': 'AccessSecuredPropsPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'Plugins :: Access Secured PropertiesFoo',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+}
diff --git a/tests/plugins/access-secured-props-plugin/pom.xml b/tests/plugins/access-secured-props-plugin/pom.xml
deleted file mode 100644 (file)
index 55fe1f9..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>access-secured-props-plugin</artifactId>
-  <packaging>sonar-plugin</packaging>
-  <name>Plugins :: Access Secured Properties</name>
-  <version>1.0.2.42</version>
-  <description>Access .secured properties</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.18.0.372</version>
-        <extensions>true</extensions>
-        <configuration>
-          <pluginClass>AccessSecuredPropsPlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/backdating-customplugin/build.gradle b/tests/plugins/backdating-customplugin/build.gradle
new file mode 100644 (file)
index 0000000..1e047a8
--- /dev/null
@@ -0,0 +1,31 @@
+sonarqube {
+  skipProject = true
+}
+
+dependencies {
+  compile 'com.google.guava:guava'
+  compile 'commons-io:commons-io'
+  compile 'commons-lang:commons-lang'
+  compileOnly 'com.google.code.findbugs:jsr305'
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+  compileOnly project(':tests:plugins:backdating-plugin-v1')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'custombackdating',
+      'Plugin-Version': version,
+      'Plugin-Class': 'org.sonar.backdating.custom.BackdatingPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'Custom',
+      'Plugin-License': 'GNU LGPL 3',
+      'Plugin-Base': 'backdating'
+    )
+  }
+  into('META-INF/lib') {
+    from configurations.compile
+  }
+}
diff --git a/tests/plugins/backdating-customplugin/pom.xml b/tests/plugins/backdating-customplugin/pom.xml
deleted file mode 100644 (file)
index 2072ab6..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-    <relativePath>../..</relativePath>
-  </parent>
-  <artifactId>backdating-customplugin</artifactId>
-  <name>SonarQube :: Plugins :: Backdating (custom)</name>
-  <packaging>sonar-plugin</packaging>
-  <description>Sample of custom rule plugin to test issue backdating</description>
-
-  <properties>
-    <sonar.skip>true</sonar.skip>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>backdating-plugin-v1</artifactId>
-      <version>${project.version}</version>
-      <scope>provided</scope>
-    </dependency>
-
-    <!-- unit testing -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <configuration>
-          <pluginKey>custombackdating</pluginKey>
-          <pluginName>Custom</pluginName>
-          <basePlugin>backdating</basePlugin>
-          <pluginClass>org.sonar.backdating.custom.BackdatingPlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/backdating-plugin-v1/build.gradle b/tests/plugins/backdating-plugin-v1/build.gradle
new file mode 100644 (file)
index 0000000..8ef8bb8
--- /dev/null
@@ -0,0 +1,29 @@
+sonarqube {
+  skipProject = true
+}
+
+dependencies {
+  compile 'com.google.guava:guava'
+  compile 'commons-io:commons-io'
+  compile 'commons-lang:commons-lang'
+  compileOnly 'com.google.code.findbugs:jsr305'
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'backdating',
+      'Plugin-Version': version,
+      'Plugin-Class': 'org.sonar.plugins.backdating.BackdatingPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'Foo',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+  into('META-INF/lib') {
+    from configurations.compile
+  }
+}
diff --git a/tests/plugins/backdating-plugin-v1/pom.xml b/tests/plugins/backdating-plugin-v1/pom.xml
deleted file mode 100644 (file)
index f1f567b..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-    <relativePath>../..</relativePath>
-  </parent>
-  <artifactId>backdating-plugin-v1</artifactId>
-  <name>SonarQube :: Plugins :: Backdating (V1)</name>
-  <packaging>sonar-plugin</packaging>
-  <description>Sample of plugin to test issue backdating</description>
-
-  <properties>
-    <sonar.skip>true</sonar.skip>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <scope>provided</scope>
-    </dependency>
-
-    <!-- unit testing -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <configuration>
-          <pluginKey>backdating</pluginKey>
-          <pluginName>Foo</pluginName>
-          <pluginClass>org.sonar.plugins.backdating.BackdatingPlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/backdating-plugin-v2/build.gradle b/tests/plugins/backdating-plugin-v2/build.gradle
new file mode 100644 (file)
index 0000000..202d2bb
--- /dev/null
@@ -0,0 +1,29 @@
+sonarqube {
+  skipProject = true
+}
+
+dependencies {
+  compile 'com.google.guava:guava'
+  compile 'commons-io:commons-io'
+  compile 'commons-lang:commons-lang'
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+  compileOnly 'com.google.code.findbugs:jsr305'
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'backdating',
+      'Plugin-Version': version,
+      'Plugin-Class': 'org.sonar.plugins.backdating.BackdatingPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'Foo',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+  into('META-INF/lib') {
+    from configurations.compile
+  }
+}
diff --git a/tests/plugins/backdating-plugin-v2/pom.xml b/tests/plugins/backdating-plugin-v2/pom.xml
deleted file mode 100644 (file)
index fefc6bb..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-    <relativePath>../..</relativePath>
-  </parent>
-  <artifactId>backdating-plugin-v2</artifactId>
-  <name>SonarQube :: Plugins :: Backdating (V2)</name>
-  <packaging>sonar-plugin</packaging>
-  <description>Sample of plugin to test issue backdating</description>
-
-  <properties>
-    <sonar.skip>true</sonar.skip>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <scope>provided</scope>
-    </dependency>
-
-    <!-- unit testing -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <configuration>
-          <pluginKey>backdating</pluginKey>
-          <pluginName>Foo</pluginName>
-          <pluginClass>org.sonar.plugins.backdating.BackdatingPlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/base-auth-plugin/build.gradle b/tests/plugins/base-auth-plugin/build.gradle
new file mode 100644 (file)
index 0000000..ee1c649
--- /dev/null
@@ -0,0 +1,25 @@
+dependencies {
+  compile('com.google.guava:guava:17.0') {
+    exclude group: 'com.google.code.findbugs', module: 'jsr305'
+  }
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+  compileOnly 'javax.servlet:javax.servlet-api:3.0.1'
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'baseauthplugin',
+      'Plugin-Version': version,
+      'Plugin-Class': 'FakeBaseAuthPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'Plugins :: Fake Base Authentication Plugin',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+  into('META-INF/lib') {
+    from configurations.compile
+  }
+}
diff --git a/tests/plugins/base-auth-plugin/pom.xml b/tests/plugins/base-auth-plugin/pom.xml
deleted file mode 100644 (file)
index 7b2555b..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>base-auth-plugin</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>sonar-plugin</packaging>
-  <name>Plugins :: Fake Base Authentication Plugin</name>
-  <description>Test for base authentication plugin (like openid)</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>javax.servlet-api</artifactId>
-      <version>3.0.1</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-      <version>17.0</version>
-      <exclusions>
-        <exclusion>
-          <!-- should be declared with scope provided -->
-          <groupId>com.google.code.findbugs</groupId>
-          <artifactId>jsr305</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <configuration>
-          <pluginClass>FakeBaseAuthPlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/batch-plugin/build.gradle b/tests/plugins/batch-plugin/build.gradle
new file mode 100644 (file)
index 0000000..e21395a
--- /dev/null
@@ -0,0 +1,18 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'batch-plugin',
+      'Plugin-Version': version,
+      'Plugin-Class': 'com.sonarsource.BatchPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'SonarQube Integration Tests :: Plugins :: Batch',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+}
diff --git a/tests/plugins/batch-plugin/pom.xml b/tests/plugins/batch-plugin/pom.xml
deleted file mode 100644 (file)
index 4bd7041..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>batch-plugin</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>sonar-plugin</packaging>
-  <name>SonarQube Integration Tests :: Plugins :: Batch</name>
-  <description>Main plugin for batch tests</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <extensions>true</extensions>
-        <configuration>
-          <pluginClass>com.sonarsource.BatchPlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/extension-lifecycle-plugin/build.gradle b/tests/plugins/extension-lifecycle-plugin/build.gradle
new file mode 100644 (file)
index 0000000..92d5fae
--- /dev/null
@@ -0,0 +1,18 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'extension-lifecycle-plugin',
+      'Plugin-Version': version,
+      'Plugin-Class': 'ExtensionLifecyclePlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'Plugins :: Extension Lifecycle',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+}
diff --git a/tests/plugins/extension-lifecycle-plugin/pom.xml b/tests/plugins/extension-lifecycle-plugin/pom.xml
deleted file mode 100644 (file)
index 73e6a08..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-  <artifactId>extension-lifecycle-plugin</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>sonar-plugin</packaging>
-  <description>Plugins :: Extension Lifecycle</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <extensions>true</extensions>
-        <configuration>
-          <pluginClass>ExtensionLifecyclePlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/fake-billing-plugin/build.gradle b/tests/plugins/fake-billing-plugin/build.gradle
new file mode 100644 (file)
index 0000000..fe1303c
--- /dev/null
@@ -0,0 +1,19 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+  compileOnly project(':server:sonar-server')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'billing',
+      'Plugin-Version': version,
+      'Plugin-Class': 'FakeBillingPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'Plugins :: Fake Billing Plugin',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+}
diff --git a/tests/plugins/fake-billing-plugin/pom.xml b/tests/plugins/fake-billing-plugin/pom.xml
deleted file mode 100644 (file)
index a5430e5..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>fake-billing-plugin</artifactId>
-  <packaging>sonar-plugin</packaging>
-  <description>Plugins :: Fake Billing Plugin</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-server</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <extensions>true</extensions>
-        <configuration>
-          <pluginClass>FakeBillingPlugin</pluginClass>
-          <pluginKey>billing</pluginKey>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/fake-governance-plugin/build.gradle b/tests/plugins/fake-governance-plugin/build.gradle
new file mode 100644 (file)
index 0000000..225751b
--- /dev/null
@@ -0,0 +1,19 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+  compileOnly project(':server:sonar-server')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'governance',
+      'Plugin-Version': version,
+      'Plugin-Class': 'FakeGovernancePlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'Plugins :: Fake Governance Plugin',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+}
diff --git a/tests/plugins/fake-governance-plugin/pom.xml b/tests/plugins/fake-governance-plugin/pom.xml
deleted file mode 100644 (file)
index 1442c73..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>fake-governance-plugin</artifactId>
-  <packaging>sonar-plugin</packaging>
-  <description>Plugins :: Fake Governance Plugin</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-server</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <extensions>true</extensions>
-        <configuration>
-          <pluginClass>FakeGovernancePlugin</pluginClass>
-          <pluginKey>governance</pluginKey>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/foo-plugin-v1/build.gradle b/tests/plugins/foo-plugin-v1/build.gradle
new file mode 100644 (file)
index 0000000..c768ae4
--- /dev/null
@@ -0,0 +1,29 @@
+sonarqube {
+  skipProject = true
+}
+
+dependencies {
+  compile 'com.google.guava:guava'
+  compile 'commons-io:commons-io'
+  compile 'commons-lang:commons-lang'
+  compileOnly 'com.google.code.findbugs:jsr305'
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'foo',
+      'Plugin-Version': version,
+      'Plugin-Class': 'org.sonar.foo.FooPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'Foo',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+  into('META-INF/lib') {
+    from configurations.compile
+  }
+}
diff --git a/tests/plugins/foo-plugin-v1/pom.xml b/tests/plugins/foo-plugin-v1/pom.xml
deleted file mode 100644 (file)
index ce6bec8..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-    <relativePath>../..</relativePath>
-  </parent>
-  <artifactId>foo-plugin-v1</artifactId>
-  <name>SonarQube :: Plugins :: Foo (V1)</name>
-  <packaging>sonar-plugin</packaging>
-  <description>Sample of plugin to document and test available APIs</description>
-
-  <properties>
-    <sonar.skip>true</sonar.skip>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <scope>provided</scope>
-    </dependency>
-
-    <!-- unit testing -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <configuration>
-          <pluginKey>foo</pluginKey>
-          <pluginName>Foo</pluginName>
-          <pluginClass>org.sonar.foo.FooPlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/foo-plugin-v2/build.gradle b/tests/plugins/foo-plugin-v2/build.gradle
new file mode 100644 (file)
index 0000000..c768ae4
--- /dev/null
@@ -0,0 +1,29 @@
+sonarqube {
+  skipProject = true
+}
+
+dependencies {
+  compile 'com.google.guava:guava'
+  compile 'commons-io:commons-io'
+  compile 'commons-lang:commons-lang'
+  compileOnly 'com.google.code.findbugs:jsr305'
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'foo',
+      'Plugin-Version': version,
+      'Plugin-Class': 'org.sonar.foo.FooPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'Foo',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+  into('META-INF/lib') {
+    from configurations.compile
+  }
+}
diff --git a/tests/plugins/foo-plugin-v2/pom.xml b/tests/plugins/foo-plugin-v2/pom.xml
deleted file mode 100644 (file)
index 1bd47c6..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-    <relativePath>../..</relativePath>
-  </parent>
-  <artifactId>foo-plugin-v2</artifactId>
-  <name>SonarQube :: Plugins :: Foo (V2)</name>
-  <packaging>sonar-plugin</packaging>
-  <description>Sample of plugin to document and test available APIs</description>
-
-  <properties>
-    <sonar.skip>true</sonar.skip>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <scope>provided</scope>
-    </dependency>
-
-    <!-- unit testing -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <configuration>
-          <pluginKey>foo</pluginKey>
-          <pluginName>Foo</pluginName>
-          <pluginClass>org.sonar.foo.FooPlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/global-property-change-plugin/build.gradle b/tests/plugins/global-property-change-plugin/build.gradle
new file mode 100644 (file)
index 0000000..6832540
--- /dev/null
@@ -0,0 +1,18 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'global-property-change-plugin',
+      'Plugin-Version': version,
+      'Plugin-Class': 'GlobalPropertyChangePlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'Plugins :: Plugins :: Global Property Change',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+}
diff --git a/tests/plugins/global-property-change-plugin/pom.xml b/tests/plugins/global-property-change-plugin/pom.xml
deleted file mode 100644 (file)
index c906fea..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>global-property-change-plugin</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>sonar-plugin</packaging>
-  <description>Plugins :: Global Property Change</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <extensions>true</extensions>
-        <configuration>
-          <pluginClass>GlobalPropertyChangePlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/issue-filter-plugin/build.gradle b/tests/plugins/issue-filter-plugin/build.gradle
new file mode 100644 (file)
index 0000000..63fe9a1
--- /dev/null
@@ -0,0 +1,18 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'issue-filter-plugin',
+      'Plugin-Version': version,
+      'Plugin-Class': 'IssueFilterPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'IT :: Issue Filter',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+}
diff --git a/tests/plugins/issue-filter-plugin/pom.xml b/tests/plugins/issue-filter-plugin/pom.xml
deleted file mode 100644 (file)
index 6027229..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>issue-filter-plugin</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>sonar-plugin</packaging>
-  <name>IT :: Issue Filter</name>
-  <description>IT :: Issue Filter</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <extensions>true</extensions>
-        <configuration>
-          <pluginClass>IssueFilterPlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/l10n-fr-pack/build.gradle b/tests/plugins/l10n-fr-pack/build.gradle
new file mode 100644 (file)
index 0000000..0e528ef
--- /dev/null
@@ -0,0 +1,18 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'l10n-fr-pack',
+      'Plugin-Version': version,
+      'Plugin-Class': 'SimpleFrenchPackPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'l10n-fr-pack',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+}
diff --git a/tests/plugins/l10n-fr-pack/pom.xml b/tests/plugins/l10n-fr-pack/pom.xml
deleted file mode 100644 (file)
index 59f84aa..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-  
-  <artifactId>l10n-fr-pack</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>sonar-plugin</packaging>
-  <description>IT :: Simple French Language Pack</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <extensions>true</extensions>
-        <configuration>
-          <basePlugin>l10nen</basePlugin>
-          <pluginClass>SimpleFrenchPackPlugin</pluginClass>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>native2ascii-maven-plugin</artifactId>
-        <version>1.0-beta-1</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>native2ascii</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/license-plugin/build.gradle b/tests/plugins/license-plugin/build.gradle
new file mode 100644 (file)
index 0000000..8ec6c36
--- /dev/null
@@ -0,0 +1,18 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'license-plugin',
+      'Plugin-Version': version,
+      'Plugin-Class': 'LicensePlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'license-plugin',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+}
diff --git a/tests/plugins/license-plugin/pom.xml b/tests/plugins/license-plugin/pom.xml
deleted file mode 100644 (file)
index a3754d9..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>license-plugin</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>sonar-plugin</packaging>
-  <description>Plugins :: License</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <extensions>true</extensions>
-        <configuration>
-          <pluginClass>LicensePlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/oauth2-auth-plugin/build.gradle b/tests/plugins/oauth2-auth-plugin/build.gradle
new file mode 100644 (file)
index 0000000..f0d08a9
--- /dev/null
@@ -0,0 +1,18 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'oauth2-auth-plugin',
+      'Plugin-Version': version,
+      'Plugin-Class': 'FakeOAuth2AuthPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'Plugins :: Fake OAuth2 Authentication Plugin',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+}
diff --git a/tests/plugins/oauth2-auth-plugin/pom.xml b/tests/plugins/oauth2-auth-plugin/pom.xml
deleted file mode 100644 (file)
index 700b635..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>oauth2-auth-plugin</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>sonar-plugin</packaging>
-  <name>Plugins :: Fake OAuth2 Authentication Plugin</name>
-  <description>Test for OAuth2 authentication plugin (like openid)</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>javax.servlet-api</artifactId>
-      <version>3.0.1</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <configuration>
-          <pluginClass>FakeOAuth2AuthPlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/pom.xml b/tests/plugins/pom.xml
deleted file mode 100644 (file)
index fb1746c..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <groupId>org.sonarsource.sonarqube.tests</groupId>
-  <artifactId>plugins</artifactId>
-  <name>SonarQube Integration Tests :: Plugins</name>
-  <description>The fake plugins used by integration tests</description>
-  <packaging>pom</packaging>
-
-  <properties>
-    <skipSanityChecks>true</skipSanityChecks>
-    <enforcer.skip>true</enforcer.skip>
-    <maven.deploy.skip>true</maven.deploy.skip>
-    <source.skip>true</source.skip>
-    <apiVersion>${project.parent.version}</apiVersion>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <skip>true</skip>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
-  <modules>
-    <module>access-secured-props-plugin</module>
-    <module>base-auth-plugin</module>
-    <module>batch-plugin</module>
-    <module>extension-lifecycle-plugin</module>
-    <module>fake-billing-plugin</module>
-    <module>fake-governance-plugin</module>
-    <module>foo-plugin-v1</module>
-    <module>foo-plugin-v2</module>
-    <module>global-property-change-plugin</module>
-    <module>issue-filter-plugin</module>
-    <module>l10n-fr-pack</module>
-    <module>license-plugin</module>
-    <module>oauth2-auth-plugin</module>
-    <module>project-builder-plugin</module>
-    <module>property-relocation-plugin</module>
-    <module>property-sets-plugin</module>
-    <module>security-plugin</module>
-    <module>server-plugin</module>
-    <module>settings-encryption-plugin</module>
-    <module>settings-plugin</module>
-    <module>sonar-fake-plugin</module>
-    <module>sonar-subcategories-plugin</module>
-    <module>ui-extensions-plugin</module>
-    <module>posttask-plugin</module>
-    <module>wait-at-platform-level4-plugin</module>
-    <module>ws-plugin</module>
-    <module>backdating-plugin-v1</module>
-    <module>backdating-plugin-v2</module>
-    <module>backdating-customplugin</module>
-  </modules>
-</project>
diff --git a/tests/plugins/posttask-plugin/build.gradle b/tests/plugins/posttask-plugin/build.gradle
new file mode 100644 (file)
index 0000000..da9560a
--- /dev/null
@@ -0,0 +1,18 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'posttask-plugin',
+      'Plugin-Version': version,
+      'Plugin-Class': 'PostTaskPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'SonarQube Integration Tests :: Plugins :: PostTask',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+}
diff --git a/tests/plugins/posttask-plugin/pom.xml b/tests/plugins/posttask-plugin/pom.xml
deleted file mode 100644 (file)
index 6b1dbe3..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>posttask-plugin</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>sonar-plugin</packaging>
-  <name>SonarQube Integration Tests :: Plugins :: PostTask</name>
-  <description>Plugin testing the Compute Engine Post Task API</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <extensions>true</extensions>
-        <configuration>
-          <pluginClass>PostTaskPlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/project-builder-plugin/build.gradle b/tests/plugins/project-builder-plugin/build.gradle
new file mode 100644 (file)
index 0000000..ca03517
--- /dev/null
@@ -0,0 +1,18 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'project-builder-plugin',
+      'Plugin-Version': version,
+      'Plugin-Class': 'ProjectBuilderPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'Plugins :: Project Builder',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+}
diff --git a/tests/plugins/project-builder-plugin/pom.xml b/tests/plugins/project-builder-plugin/pom.xml
deleted file mode 100644 (file)
index 98ed082..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-  <artifactId>project-builder-plugin</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>sonar-plugin</packaging>
-  <description>Plugins :: Project Builder</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <extensions>true</extensions>
-        <configuration>
-          <pluginClass>ProjectBuilderPlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/property-relocation-plugin/build.gradle b/tests/plugins/property-relocation-plugin/build.gradle
new file mode 100644 (file)
index 0000000..14ed5d4
--- /dev/null
@@ -0,0 +1,18 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'property-relocation-plugin',
+      'Plugin-Version': version,
+      'Plugin-Class': 'PropertyRelocationPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'property-relocation-plugin',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+}
diff --git a/tests/plugins/property-relocation-plugin/pom.xml b/tests/plugins/property-relocation-plugin/pom.xml
deleted file mode 100644 (file)
index a5915c8..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>property-relocation-plugin</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>sonar-plugin</packaging>
-  <description>Plugins :: Property Relocation</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <extensions>true</extensions>
-        <configuration>
-          <pluginClass>PropertyRelocationPlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/property-sets-plugin/build.gradle b/tests/plugins/property-sets-plugin/build.gradle
new file mode 100644 (file)
index 0000000..6ce9d77
--- /dev/null
@@ -0,0 +1,18 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'property-sets-plugin',
+      'Plugin-Version': version,
+      'Plugin-Class': 'PropertySetsPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'property-sets-plugin',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+}
diff --git a/tests/plugins/property-sets-plugin/pom.xml b/tests/plugins/property-sets-plugin/pom.xml
deleted file mode 100644 (file)
index c8081a7..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>property-sets-plugin</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>sonar-plugin</packaging>
-  <description>Plugins :: Property Sets</description>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <extensions>true</extensions>
-        <configuration>
-          <pluginClass>PropertySetsPlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/security-plugin/build.gradle b/tests/plugins/security-plugin/build.gradle
new file mode 100644 (file)
index 0000000..cfd4d2b
--- /dev/null
@@ -0,0 +1,29 @@
+configurations {
+  testCompile.extendsFrom(compileOnly)
+}
+
+dependencies {
+  compile 'commons-lang:commons-lang'
+  compile 'com.google.guava:guava'
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+  testCompile 'junit:junit'
+  testCompile 'org.assertj:assertj-core'
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'security-plugin',
+      'Plugin-Version': version,
+      'Plugin-Class': 'SecurityPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'security-plugin',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+  into('META-INF/lib') {
+    from configurations.compile
+  }
+}
diff --git a/tests/plugins/security-plugin/pom.xml b/tests/plugins/security-plugin/pom.xml
deleted file mode 100644 (file)
index 5664abd..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>security-plugin</artifactId>
-  <packaging>sonar-plugin</packaging>
-  <version>1.0-SNAPSHOT</version>
-  <description>Plugins :: Security</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-      <version>2.6</version>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>4.12</version>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <version>2.0.0</version>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-guava</artifactId>
-      <version>1.3.1</version>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <extensions>true</extensions>
-        <configuration>
-          <pluginClass>SecurityPlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>
diff --git a/tests/plugins/server-plugin/build.gradle b/tests/plugins/server-plugin/build.gradle
new file mode 100644 (file)
index 0000000..685e50e
--- /dev/null
@@ -0,0 +1,18 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'server-plugin',
+      'Plugin-Version': version,
+      'Plugin-Class': 'ServerPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'SonarQube Integration Tests :: Plugins :: Server',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+}
diff --git a/tests/plugins/server-plugin/pom.xml b/tests/plugins/server-plugin/pom.xml
deleted file mode 100644 (file)
index ea012d4..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>server-plugin</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>sonar-plugin</packaging>
-  <name>SonarQube Integration Tests :: Plugins :: Server</name>
-  <description>Main plugin for Server tests</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <extensions>true</extensions>
-        <configuration>
-          <pluginClass>ServerPlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/settings-encryption-plugin/build.gradle b/tests/plugins/settings-encryption-plugin/build.gradle
new file mode 100644 (file)
index 0000000..c7fb784
--- /dev/null
@@ -0,0 +1,18 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'settings-encryption-plugin',
+      'Plugin-Version': version,
+      'Plugin-Class': 'SettingsEncryptionPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'settings-encryption-plugin',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+}
diff --git a/tests/plugins/settings-encryption-plugin/pom.xml b/tests/plugins/settings-encryption-plugin/pom.xml
deleted file mode 100644 (file)
index c339595..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-  <artifactId>settings-encryption-plugin</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>sonar-plugin</packaging>
-  <description>Plugins :: Settings Encryption</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <extensions>true</extensions>
-        <configuration>
-          <pluginClass>SettingsEncryptionPlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/settings-plugin/build.gradle b/tests/plugins/settings-plugin/build.gradle
new file mode 100644 (file)
index 0000000..4448931
--- /dev/null
@@ -0,0 +1,18 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'settings-plugin',
+      'Plugin-Version': version,
+      'Plugin-Class': 'SettingsPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'Settings',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+}
diff --git a/tests/plugins/settings-plugin/pom.xml b/tests/plugins/settings-plugin/pom.xml
deleted file mode 100644 (file)
index db0bb95..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>settings-plugin</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>sonar-plugin</packaging>
-  <description>Plugins :: Settings</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <extensions>true</extensions>
-        <configuration>
-          <pluginClass>SettingsPlugin</pluginClass>
-          <pluginName>Settings</pluginName>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/sonar-fake-plugin/build.gradle b/tests/plugins/sonar-fake-plugin/build.gradle
new file mode 100644 (file)
index 0000000..0696ae9
--- /dev/null
@@ -0,0 +1,19 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'fake',
+      'Plugin-Version': version,
+      'Plugin-Class': 'FakePlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'Plugins :: Fake',
+      'Plugin-License': 'GNU LGPL 3',
+      'Plugin-Organization': 'SonarSource'
+    )
+  }
+}
diff --git a/tests/plugins/sonar-fake-plugin/pom.xml b/tests/plugins/sonar-fake-plugin/pom.xml
deleted file mode 100644 (file)
index d0945e9..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>sonar-fake-plugin</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>sonar-plugin</packaging>
-  <name>Plugins :: Fake</name>
-  <description>SonarQube Integration Tests :: Fake Plugin</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <configuration>
-          <pluginClass>FakePlugin</pluginClass>
-          <pluginKey>fake</pluginKey>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/sonar-subcategories-plugin/build.gradle b/tests/plugins/sonar-subcategories-plugin/build.gradle
new file mode 100644 (file)
index 0000000..53ad942
--- /dev/null
@@ -0,0 +1,18 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'sonar-subcategories-plugin',
+      'Plugin-Version': version,
+      'Plugin-Class': 'SubCategoriesPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'Plugins :: SubCategories',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+}
diff --git a/tests/plugins/sonar-subcategories-plugin/pom.xml b/tests/plugins/sonar-subcategories-plugin/pom.xml
deleted file mode 100644 (file)
index 85ea4f9..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>sonar-subcategories-plugin</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>sonar-plugin</packaging>
-
-  <name>Plugins :: SubCategories</name>
-  <description>Plugins :: SubCategories</description>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <extensions>true</extensions>
-        <configuration>
-          <pluginClass>SubCategoriesPlugin</pluginClass>
-        </configuration>
-      </plugin>
-
-
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>native2ascii-maven-plugin</artifactId>
-        <version>1.0-beta-1</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>native2ascii</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/ui-extensions-plugin/build.gradle b/tests/plugins/ui-extensions-plugin/build.gradle
new file mode 100644 (file)
index 0000000..5f85c3d
--- /dev/null
@@ -0,0 +1,18 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'ui-extensions-plugin',
+      'Plugin-Version': version,
+      'Plugin-Class': 'UiExtensionsPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'SonarQube Integration Tests :: Plugins :: UI extensions',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+}
diff --git a/tests/plugins/ui-extensions-plugin/pom.xml b/tests/plugins/ui-extensions-plugin/pom.xml
deleted file mode 100644 (file)
index 1bbd2a5..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>ui-extensions-plugin</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>sonar-plugin</packaging>
-  <name>SonarQube Integration Tests :: Plugins :: UI extensions</name>
-  <description>Main plugin for UT extensions tests</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <extensions>true</extensions>
-        <configuration>
-          <pluginClass>UiExtensionsPlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/wait-at-platform-level4-plugin/build.gradle b/tests/plugins/wait-at-platform-level4-plugin/build.gradle
new file mode 100644 (file)
index 0000000..626dad0
--- /dev/null
@@ -0,0 +1,18 @@
+dependencies {
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'wait-at-platform-level4-plugin',
+      'Plugin-Version': version,
+      'Plugin-Class': 'WaitAtPlaformLevel4Plugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'Plugins :: Wait at platform level4 initialization phase',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+}
diff --git a/tests/plugins/wait-at-platform-level4-plugin/pom.xml b/tests/plugins/wait-at-platform-level4-plugin/pom.xml
deleted file mode 100644 (file)
index dc68f3f..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>wait-at-platform-level4-plugin</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>sonar-plugin</packaging>
-  <name>Plugins :: Wait at platform level4 initialization phase</name>
-  <description>Test for failing Elasticsearch on platform4</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-      <version>17.0</version>
-      <exclusions>
-        <exclusion>
-          <!-- should be declared with scope provided -->
-          <groupId>com.google.code.findbugs</groupId>
-          <artifactId>jsr305</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <version>1.15</version>
-        <configuration>
-          <pluginClass>WaitAtPlaformLevel4Plugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/plugins/ws-plugin/build.gradle b/tests/plugins/ws-plugin/build.gradle
new file mode 100644 (file)
index 0000000..879e3df
--- /dev/null
@@ -0,0 +1,22 @@
+dependencies {
+  compile project(':sonar-ws')
+  compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow')
+}
+
+jar {
+  manifest {
+    attributes(
+      'Plugin-Key': 'ws-plugin',
+      'Plugin-Version': version,
+      'Plugin-Class': 'WsPlugin',
+      'Plugin-ChildFirstClassLoader': 'false',
+      'Sonar-Version': '7.1-SNAPSHOT',
+      'SonarLint-Supported': 'false',
+      'Plugin-Name': 'SonarQube Integration Tests :: Plugins :: Ws',
+      'Plugin-License': 'GNU LGPL 3'
+    )
+  }
+  into('META-INF/lib') {
+    from configurations.compile
+  }
+}
diff --git a/tests/plugins/ws-plugin/pom.xml b/tests/plugins/ws-plugin/pom.xml
deleted file mode 100644 (file)
index c0c0d8e..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.sonarsource.sonarqube.tests</groupId>
-    <artifactId>plugins</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>ws-plugin</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>sonar-plugin</packaging>
-  <name>SonarQube Integration Tests :: Plugins :: Ws</name>
-  <description>Plugin for WS tests</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-plugin-api</artifactId>
-      <version>${apiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-ws</artifactId>
-      <version>${apiVersion}</version>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
-        <artifactId>sonar-packaging-maven-plugin</artifactId>
-        <extensions>true</extensions>
-        <configuration>
-          <pluginClass>WsPlugin</pluginClass>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/tests/pom.xml b/tests/pom.xml
deleted file mode 100644 (file)
index 09a4a0a..0000000
+++ /dev/null
@@ -1,282 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.sonarsource.sonarqube</groupId>
-    <artifactId>sonarqube</artifactId>
-    <version>7.1-SNAPSHOT</version>
-  </parent>
-
-  <groupId>org.sonarsource.sonarqube.tests</groupId>
-  <artifactId>tests</artifactId>
-  <name>SonarQube Integration Tests</name>
-  <description>Integration, performance, upgrade tests</description>
-
-  <properties>
-    <maven.deploy.skip>true</maven.deploy.skip>
-    <source.skip>true</source.skip>
-    <enforcer.skip>true</enforcer.skip>
-    <skipSanityChecks>true</skipSanityChecks>
-    <sqZipDir>../sonar-application/target</sqZipDir>
-    <category>*</category>
-    <skipIts>false</skipIts>
-    <jetty.version>9.3.11.v20160721</jetty.version>
-    <byteman.version>3.0.10</byteman.version>
-  </properties>
-
-  <dependencies>
-   <!-- This is just to force Maven to download it in local repository -->
-    <dependency>
-      <groupId>com.sonarsource.license</groupId>
-      <artifactId>sonar-dev-license-plugin</artifactId>
-      <!-- Should be the same version than in Orchestrator builder in your test suite -->
-      <version>3.2.0.1163</version>
-      <scope>runtime</scope>
-    </dependency>
-    <dependency>
-      <!-- required for selenide -->
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-      <version>23.0</version>
-      <scope>test</scope>
-    </dependency>
-    <!-- must be declared first -->
-    <dependency>
-      <groupId>org.sonarsource.orchestrator</groupId>
-      <artifactId>sonar-orchestrator</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <!-- required for overriding ws-client 4.5 to have complete error stacktraces
-      in Issue tests -->
-      <groupId>org.codehaus.sonar</groupId>
-      <artifactId>sonar-ws-client</artifactId>
-      <version>5.0</version>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-application</artifactId>
-      <version>${project.version}</version>
-      <type>zip</type>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-qa-util</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-process</artifactId>
-      <version>${project.version}</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.sonarqube</groupId>
-      <artifactId>sonar-ws</artifactId>
-      <version>${project.version}</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-guava</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.googlecode.json-simple</groupId>
-      <artifactId>json-simple</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.skyscreamer</groupId>
-      <artifactId>jsonassert</artifactId>
-      <version>1.2.0</version>
-    </dependency>
-    <dependency>
-      <groupId>com.squareup.okhttp3</groupId>
-      <artifactId>mockwebserver</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.subethamail</groupId>
-      <artifactId>subethasmtp</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-server</artifactId>
-      <version>${jetty.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-servlet</artifactId>
-      <version>${jetty.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-proxy</artifactId>
-      <version>${jetty.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.sonarsource.scanner.cli</groupId>
-      <artifactId>sonar-scanner-cli</artifactId>
-      <version>2.7</version>
-      <type>zip</type>
-    </dependency>
-    <dependency>
-      <groupId>org.jboss.byteman</groupId>
-      <artifactId>byteman-submit</artifactId>
-      <version>${byteman.version}</version>
-    </dependency>
-
-    <!-- JDBC drivers -->
-    <dependency>
-      <groupId>mysql</groupId>
-      <artifactId>mysql-connector-java</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.postgresql</groupId>
-      <artifactId>postgresql</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.microsoft.sqlserver</groupId>
-      <artifactId>mssql-jdbc</artifactId>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <argLine>-Dsonar.runtimeVersion=${project.version}
-            -Dmaven.localRepository=${settings.localRepository}
-          </argLine>
-          <skipTests>${skipIts}</skipTests>
-          <includes>
-            <include>%regex[.*/(${category})/.*Suite.class]</include>
-
-            <!-- deprecated categories -->
-            <include>%regex[.*/(${category})Suite.class]</include>
-          </includes>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>copy-byteman-for-resilience-tests</id>
-            <phase>generate-test-resources</phase>
-            <goals>
-              <goal>copy</goal>
-            </goals>
-            <configuration>
-              <artifactItems>
-                <artifactItem>
-                  <groupId>org.jboss.byteman</groupId>
-                  <artifactId>byteman</artifactId>
-                  <version>${byteman.version}</version>
-                  <overWrite>false</overWrite>
-                  <destFileName>byteman.jar</destFileName>
-                </artifactItem>
-              </artifactItems>
-              <outputDirectory>${project.basedir}/target</outputDirectory>
-              <overWriteReleases>false</overWriteReleases>
-              <overWriteSnapshots>false</overWriteSnapshots>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-  <profiles>
-    <profile>
-      <!-- TODO rename to oracle -->
-      <id>with-db-drivers</id>
-      <activation>
-        <property>
-          <name>with-db-drivers</name>
-        </property>
-      </activation>
-      <dependencies>
-        <dependency>
-          <groupId>com.oracle.jdbc</groupId>
-          <artifactId>ojdbc8</artifactId>
-        </dependency>
-      </dependencies>
-    </profile>
-
-    <profile>
-      <id>qa</id>
-      <activation>
-        <property>
-          <name>env.SONARSOURCE_QA</name>
-          <value>true</value>
-        </property>
-      </activation>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-dependency-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>copy-sonarqube-zip</id>
-                <phase>generate-test-resources</phase>
-                <goals>
-                  <goal>copy</goal>
-                </goals>
-                <configuration>
-                  <artifactItems>
-                    <artifactItem>
-                      <groupId>org.sonarsource.sonarqube</groupId>
-                      <artifactId>sonar-application</artifactId>
-                      <version>${project.version}</version>
-                      <type>zip</type>
-                      <overWrite>true</overWrite>
-                    </artifactItem>
-                  </artifactItems>
-                  <outputDirectory>${project.basedir}/../sonar-application/target</outputDirectory>
-                  <overWriteReleases>true</overWriteReleases>
-                  <overWriteSnapshots>true</overWriteSnapshots>
-                </configuration>
-              </execution>
-              <execution>
-                <id>copy-xoo-plugin</id>
-                <phase>generate-test-resources</phase>
-                <goals>
-                  <goal>copy</goal>
-                </goals>
-                <configuration>
-                  <artifactItems>
-                    <artifactItem>
-                      <groupId>org.sonarsource.sonarqube</groupId>
-                      <artifactId>sonar-xoo-plugin</artifactId>
-                      <version>${project.version}</version>
-                      <type>sonar-plugin</type>
-                      <overWrite>true</overWrite>
-                    </artifactItem>
-                  </artifactItems>
-                  <outputDirectory>${project.basedir}/../plugins/sonar-xoo-plugin/target</outputDirectory>
-                  <overWriteReleases>true</overWriteReleases>
-                  <overWriteSnapshots>true</overWriteSnapshots>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
-</project>
index f32647f153d8839251f50e56b4c2cdb83567c7ab..26e21b4a31bcf21d3493241995729500410f9168 100644 (file)
  package org.sonarqube.tests;
 
 import com.sonar.orchestrator.OrchestratorBuilder;
+import com.sonar.orchestrator.util.NetworkUtils;
 import java.io.File;
 import java.net.InetAddress;
 import java.util.Collections;
 import org.jboss.byteman.agent.submit.Submit;
-import org.sonar.process.NetworkUtilsImpl;
 
 import static java.lang.String.format;
 
@@ -50,16 +50,15 @@ public class Byteman {
   public Byteman(OrchestratorBuilder builder, Process process) {
     this.builder = builder;
     String jar = findBytemanJar();
-    port = NetworkUtilsImpl.INSTANCE.getNextAvailablePort(InetAddress.getLoopbackAddress());
+    port = NetworkUtils.getNextAvailablePort(InetAddress.getLoopbackAddress());
     String bytemanArg = format("-javaagent:%s=boot:%s,port:%d", jar, jar, port);
     builder.setServerProperty(process.argument, bytemanArg);
   }
 
   private static String findBytemanJar() {
-    // see pom.xml, Maven copies and renames the artifact.
-    File jar = new File("target/byteman.jar");
+    File jar = new File("build/resources/test/byteman.jar");
     if (!jar.exists()) {
-      throw new IllegalStateException("Can't find " + jar + ". Please execute 'mvn generate-test-resources' once in directory tests/.");
+      throw new IllegalStateException("Can't find " + jar + ". Please execute './gradlew tests:processIntegrationTestResources'.");
     }
     return jar.getAbsolutePath();
   }
index 89368b1488a40102e0e6d8568128ca9838940e59..09e1edb94d46532beb0e6edcc436b7f7b5466769 100644 (file)
@@ -29,6 +29,7 @@ import org.sonarqube.tests.settings.EmailsTest;
 import org.sonarqube.tests.settings.PropertySetsTest;
 import org.sonarqube.tests.settings.SettingsTest;
 
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.pluginArtifact;
 import static util.ItUtils.xooPlugin;
 
@@ -48,7 +49,7 @@ import static util.ItUtils.xooPlugin;
 public class Category1Suite {
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
     .setServerProperty("sonar.notifications.delay", "1")
     .addPlugin(pluginArtifact("property-sets-plugin"))
     .addPlugin(pluginArtifact("sonar-subcategories-plugin"))
@@ -67,9 +68,6 @@ public class Category1Suite {
 
     .addPlugin(pluginArtifact("posttask-plugin"))
 
-    // reduce memory for Elasticsearch to 128M
-    .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m")
-
     .addPlugin(xooPlugin())
     .build();
 
index 2924b41373f9da9b439f64ee8ec55a6b4b1cdc13..3a59293a07a37c902c1fea1d389f407e5a2aeb25 100644 (file)
@@ -40,6 +40,7 @@ import org.sonarqube.tests.analysis.TempFolderTest;
 import org.sonarqube.tests.plugins.VersionPluginTest;
 import org.sonarqube.tests.webhook.WebhooksTest;
 
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.pluginArtifact;
 import static util.ItUtils.xooPlugin;
 
@@ -70,7 +71,7 @@ import static util.ItUtils.xooPlugin;
 public class Category3Suite {
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
     .addPlugin(xooPlugin())
     .setOrchestratorProperty("javaVersion", "LATEST_RELEASE").addPlugin("java")
 
@@ -89,9 +90,5 @@ public class Category3Suite {
     // used by ProjectBuilderTest
     .addPlugin(pluginArtifact("project-builder-plugin"))
 
-    // reduce memory for Elasticsearch to 128M
-    .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m")
-//    .setServerProperty("sonar.web.javaAdditionalOpts", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005")
-
     .build();
 }
index 332ef87afe1b40c1ffb5aaaebac65422478bcfff..b0296eaf19c2468340223e9bfe664067fc1fb905 100644 (file)
@@ -39,6 +39,7 @@ import org.sonarqube.tests.ui.UiTest;
 import org.sonarqube.tests.ws.WsLocalCallTest;
 import org.sonarqube.tests.ws.WsTest;
 
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.pluginArtifact;
 import static util.ItUtils.xooPlugin;
 
@@ -75,7 +76,7 @@ import static util.ItUtils.xooPlugin;
 public class Category4Suite {
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
     .addPlugin(xooPlugin())
 
     // Used in UiExtensionsTest
@@ -87,8 +88,7 @@ public class Category4Suite {
     // Used by LogsTest
     .setServerProperty("sonar.web.accessLogs.pattern", LogsTest.ACCESS_LOGS_PATTERN)
 
-    // reduce memory for Elasticsearch to 128M
-    .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m")
+    .setServerProperty("sonar.web.javaAdditionalOpts", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8001")
 
     .build();
 }
index dd8ecd2876b2fe50022596fa88de82e2b6703263..842aa61711ce84e4c75dbe5c8794f61891b3f809 100644 (file)
@@ -39,6 +39,7 @@ import org.sonarqube.tests.rule.RulesMarkdownTest;
 import org.sonarqube.tests.rule.RulesWsTest;
 import org.sonarqube.tests.user.OrganizationIdentityProviderTest;
 
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.pluginArtifact;
 import static util.ItUtils.xooPlugin;
 
@@ -70,7 +71,7 @@ public class Category6Suite {
   public static final int SEARCH_HTTP_PORT = NetworkUtils.getNextAvailablePort(InetAddress.getLoopbackAddress());
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
 
     // for ES resiliency tests
     .setServerProperty("sonar.search.httpPort", "" + SEARCH_HTTP_PORT)
@@ -82,8 +83,5 @@ public class Category6Suite {
     .addPlugin(pluginArtifact("base-auth-plugin"))
     .addPlugin(pluginArtifact("ui-extensions-plugin"))
 
-    // reduce memory for Elasticsearch to 128M
-    .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m")
-
     .build();
 }
index 3385fad3a5a5f49e1426443a936657d754a76f80..eee7c8edf6b5fd5e0b6138572a1079d048580270 100644 (file)
@@ -53,6 +53,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.tuple;
 import static org.sonarqube.tests.Byteman.Process.CE;
 import static org.sonarqube.ws.Ce.TaskStatus.FAILED;
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.projectDir;
 
 public class AnalysisEsResilienceTest {
@@ -63,7 +64,7 @@ public class AnalysisEsResilienceTest {
   private static final int esHttpPort = NetworkUtils.getNextAvailablePort(InetAddress.getLoopbackAddress());
 
   static {
-    byteman = new Byteman(Orchestrator.builderEnv(), CE);
+    byteman = new Byteman(newOrchestratorBuilder(), CE);
     orchestrator = byteman
       .getOrchestratorBuilder()
       .addPlugin(ItUtils.xooPlugin())
index f29f8d2e3186ebcb355c5271fd6baa3c379b2d34..23c03e7888c3f76da48ede907055933180330517 100644 (file)
@@ -24,6 +24,7 @@ import org.junit.ClassRule;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.pluginArtifact;
 import static util.ItUtils.xooPlugin;
 
@@ -33,6 +34,7 @@ import static util.ItUtils.xooPlugin;
   IssuePermissionTest.class,
   PermissionSearchTest.class,
   PermissionTemplatePageTest.class,
+
   ProvisioningPermissionTest.class,
   QualityProfileAdminPermissionTest.class,
   SystemPasscodeTest.class
@@ -40,10 +42,7 @@ import static util.ItUtils.xooPlugin;
 public class AuthorizationSuite {
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
-    // reduce memory for Elasticsearch
-    .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m")
-
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
     // for SystemPasscodeTest
     // this privileged plugin provides the WS api/system_passcode/check
     // that is used by the tests
@@ -52,5 +51,4 @@ public class AuthorizationSuite {
 
     .addPlugin(xooPlugin())
     .build();
-
 }
index 62dabd402476c8fd6be95624160061283c5b0ab9..ce8678dc292083b0e7d1647b739c4088a735fb6c 100644 (file)
@@ -37,6 +37,7 @@ import util.ItUtils;
 
 import static com.google.common.base.Preconditions.checkState;
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.newOrchestratorBuilder;
 
 public class CeShutdownTest {
 
@@ -115,7 +116,7 @@ public class CeShutdownTest {
       pauseFile = temp.newFile();
       FileUtils.touch(pauseFile);
 
-      orchestrator = Orchestrator.builderEnv()
+      orchestrator = newOrchestratorBuilder()
         .setServerProperty("sonar.ce.pauseTask.path", pauseFile.getAbsolutePath())
         .setServerProperty("sonar.ce.gracefulStopTimeOutInMs", "" + timeOutInMs)
         .addPlugin(ItUtils.xooPlugin())
index 82453df03d694ae4dbc7033c2b0043811027c506..64d85836fdb2f530996d5ec75c9307d5805a4c2f 100644 (file)
@@ -58,6 +58,7 @@ import static java.util.stream.Collectors.toList;
 import static java.util.stream.Collectors.toSet;
 import static org.assertj.core.api.Assertions.assertThat;
 import static util.ItUtils.newAdminWsClient;
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.pluginArtifact;
 import static util.ItUtils.xooPlugin;
 
@@ -82,7 +83,7 @@ public class CeWorkersTest {
   public static void setUp() throws Exception {
     sharedMemory = temporaryFolder.newFile();
 
-    OrchestratorBuilder builder = Orchestrator.builderEnv()
+    OrchestratorBuilder builder = newOrchestratorBuilder()
       .addPlugin(pluginArtifact("fake-governance-plugin"))
       .setServerProperty("fakeGoverance.workerLatch.sharedMemoryFile", sharedMemory.getAbsolutePath())
       // overwrite default value to display heap dump on OOM and reduce max heap
index 5053112626c32a5483c7d508716407e77ea5b1ef..0384ce9562b2d0ac85b74a83431645aa6ff89ae4 100644 (file)
@@ -23,6 +23,7 @@ import com.sonar.orchestrator.Orchestrator;
 import org.junit.ClassRule;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
+import util.ItUtils;
 
 import static util.ItUtils.xooPlugin;
 
@@ -35,9 +36,7 @@ import static util.ItUtils.xooPlugin;
 public class ComponentSuite {
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
-    // reduce memory for Elasticsearch
-    .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m")
+  public static final Orchestrator ORCHESTRATOR = ItUtils.newOrchestratorBuilder()
 
     .addPlugin(xooPlugin())
 
index bbe5e540ea60cf0a009e3d70179f3f8fad8e41d4..e8c1833f4021dc7794d2917ffe7d8a015c81bffd 100644 (file)
@@ -24,6 +24,7 @@ import org.junit.ClassRule;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.xooPlugin;
 
 @RunWith(Suite.class)
@@ -36,11 +37,8 @@ import static util.ItUtils.xooPlugin;
 })
 public class DuplicationSuite {
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
     .addPlugin(xooPlugin())
 
-    // reduce Elasticsearch memory
-    .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m")
-
     .build();
 }
index af2fbd1e1a6a1f1ca992f2ea65bf8875594b3c36..cff4e0f1aa59dd3ef7fd61342301bda7418857c7 100644 (file)
@@ -43,6 +43,7 @@ import util.ItUtils;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.tuple;
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.newUserWsClient;
 import static util.ItUtils.pluginArtifact;
 import static util.ItUtils.projectDir;
@@ -68,7 +69,7 @@ public class IssueCreationDatePluginChangedTest {
   private static final String USER_EMAIL = "tester@example.org";
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
     .addPlugin(xooPlugin())
     .addPlugin(ItUtils.pluginArtifact("backdating-plugin-v1"))
     .addPlugin(ItUtils.pluginArtifact("backdating-customplugin"))
index ed6bf7a60a7a6f35e5c3704165399e75a572e77c..8ff714fe6e3a70b23949a0dc7851713c4c70213e 100644 (file)
@@ -24,6 +24,7 @@ import org.junit.ClassRule;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.pluginArtifact;
 import static util.ItUtils.xooPlugin;
 
@@ -51,7 +52,7 @@ import static util.ItUtils.xooPlugin;
 public class IssueSuite {
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
     .setServerProperty("sonar.search.httpPort", "9025")
     .addPlugin(xooPlugin())
 
@@ -63,9 +64,6 @@ public class IssueSuite {
 
     .setServerProperty("organization.enabled", "true")
 
-    // reduce memory for Elasticsearch to 128M
-    .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m")
-
     .build();
 
 }
index 2babb0d1985f92f8c5f6814ecaa824ebc50a7bc9..85381682159ed7e7913e30936d8d4e9986ef7ff5 100644 (file)
@@ -24,6 +24,7 @@ import org.junit.ClassRule;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.xooPlugin;
 
 @RunWith(Suite.class)
@@ -33,12 +34,9 @@ import static util.ItUtils.xooPlugin;
 public class OrganizationIssueSuite {
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
     .addPlugin(xooPlugin())
 
-    // reduce memory for Elasticsearch to 128M
-    .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m")
-
     .build();
 
 }
index 8551fd35d3cf3fe9ead39af8a9092dd370ffc1ef..0c89f7cd8fe08c29f90e8fa4db2ebe2b236fb74d 100644 (file)
@@ -38,6 +38,7 @@ import org.sonarqube.ws.client.measures.MeasuresService;
 import static java.util.Arrays.asList;
 import static java.util.Collections.singletonList;
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.runProjectAnalysis;
 import static util.ItUtils.xooPlugin;
 
@@ -45,7 +46,7 @@ public class LiteTest {
 
   private static final String PROJECT_KEY = "com.sonarsource.it.samples:multi-modules-sample";
 
-  private static Orchestrator orchestrator = Orchestrator.builderEnv()
+  private static Orchestrator orchestrator = newOrchestratorBuilder()
     .setOrchestratorProperty("sonar.web.context", "/sonarqube")
     .addPlugin(xooPlugin())
     .build();
index e1c851aaae17681198a802e0bce9448ce09ff35f..8e50a0804519987df8789c665ea6ce275fb4cc7f 100644 (file)
@@ -28,6 +28,7 @@ import org.sonarqube.qa.util.pageobjects.MarketplacePage;
 import org.sonarqube.qa.util.pageobjects.Navigation;
 import util.user.UserRule;
 
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.pluginArtifact;
 
 /**
@@ -36,7 +37,7 @@ import static util.ItUtils.pluginArtifact;
 public class UpdateCenterTest {
 
   @ClassRule
-  public static final Orchestrator orchestrator = Orchestrator.builderEnv()
+  public static final Orchestrator orchestrator = newOrchestratorBuilder()
     .setServerProperty("sonar.updatecenter.url", UpdateCenterTest.class.getResource("/marketplace/UpdateCenterTest/update-center.properties").toString())
     .addPlugin(pluginArtifact("sonar-fake-plugin"))
     .build();
index 7bd56dc968614374a198e75189f1242ff5b7e52c..ea6ad5d0e7faac2ffd2287a453cfa725f10ed22b 100644 (file)
@@ -24,6 +24,7 @@ import org.junit.ClassRule;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.pluginArtifact;
 import static util.ItUtils.xooPlugin;
 
@@ -44,10 +45,7 @@ import static util.ItUtils.xooPlugin;
 public class MeasureSuite {
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
-    // reduce memory for Elasticsearch
-    .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m")
-
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
     .addPlugin(xooPlugin())
 
     // used by DecimalScaleMetricTest
index 7511f41200c78584694b2a7797a07b4626f86e48..024a8849b41888b1f79178646c1ae9b1f94794aa 100644 (file)
@@ -24,6 +24,7 @@ import org.junit.ClassRule;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.pluginArtifact;
 import static util.ItUtils.xooPlugin;
 
@@ -40,14 +41,11 @@ import static util.ItUtils.xooPlugin;
 public class OrganizationSuite {
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
 
     .addPlugin(xooPlugin())
     .addPlugin(pluginArtifact("fake-billing-plugin"))
     .addPlugin(pluginArtifact("ui-extensions-plugin"))
-    
-    // reduce memory for Elasticsearch to 128M
-    .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m")
 
     .build();
 }
index 1b789600e24c2976f918106938591e1d340c1b0a..918cb4ba7a6fdbeb651d320447f20c916f2598aa 100644 (file)
@@ -29,6 +29,9 @@ import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 import org.sonarqube.tests.performance.AbstractPerfTest;
 
+import static util.ItUtils.newOrchestratorBuilder;
+import static util.ItUtils.xooPlugin;
+
 @RunWith(Suite.class)
 @Suite.SuiteClasses({
   BootstrappingTest.class,
@@ -41,9 +44,8 @@ import org.sonarqube.tests.performance.AbstractPerfTest;
 public class ScannerPerformanceSuite {
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator
-    .builderEnv()
-    .addPlugin(FileLocation.byWildcardMavenFilename(new File("../plugins/sonar-xoo-plugin/target"), "sonar-xoo-plugin-*.jar"))
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
+    .addPlugin(xooPlugin())
     // should not be so high, but required as long embedded h2 is used -> requires more memory on server
     .setServerProperty("sonar.web.javaOpts", "-Xmx1G -XX:+HeapDumpOnOutOfMemoryError")
     // Needed by DuplicationTest::hugeJavaFile
index 7ee7fa84624685622d5f4ff5e77434fa65651775..f6e15a279a1ff156210038e770ca2d20312e118e 100644 (file)
@@ -34,6 +34,9 @@ import org.junit.rules.TemporaryFolder;
 import org.sonarqube.tests.performance.AbstractPerfTest;
 import org.sonarqube.tests.performance.ServerLogs;
 
+import static util.ItUtils.newOrchestratorBuilder;
+import static util.ItUtils.xooPlugin;
+
 public class ComputeEnginePerfTest extends AbstractPerfTest {
   private static int MAX_HEAP_SIZE_IN_MEGA = 600;
 
@@ -41,9 +44,8 @@ public class ComputeEnginePerfTest extends AbstractPerfTest {
   public static TemporaryFolder temp = new TemporaryFolder();
 
   @ClassRule
-  public static Orchestrator orchestrator = Orchestrator
-    .builderEnv()
-    .addPlugin(FileLocation.byWildcardMavenFilename(new File("../plugins/sonar-xoo-plugin/target"), "sonar-xoo-plugin-*.jar"))
+  public static Orchestrator orchestrator = newOrchestratorBuilder()
+    .addPlugin(xooPlugin())
     .setServerProperty(
       "sonar.web.javaOpts",
       String.format("-Xms%dm -Xmx%dm -XX:+HeapDumpOnOutOfMemoryError -Djava.awt.headless=true", MAX_HEAP_SIZE_IN_MEGA, MAX_HEAP_SIZE_IN_MEGA))
index 3de0d05c8ccba1ff61ce77893c045c2ff2689962..2d147551db5d9874ec2bd2f564a941e32af43cd9 100644 (file)
@@ -33,6 +33,8 @@ import org.sonarqube.tests.performance.AbstractPerfTest;
 import org.sonarqube.tests.performance.ServerLogs;
 
 import static org.apache.commons.io.FileUtils.readLines;
+import static util.ItUtils.newOrchestratorBuilder;
+import static util.ItUtils.xooPlugin;
 
 public class ServerPerfTest extends AbstractPerfTest {
   private static final int TIMEOUT_3_MINUTES = 1000 * 60 * 3;
@@ -44,8 +46,8 @@ public class ServerPerfTest extends AbstractPerfTest {
   @Test
   public void server_startup_and_shutdown() throws Exception {
     String defaultWebJavaOptions = "-Xmx768m -XX:+HeapDumpOnOutOfMemoryError -Djava.awt.headless=true -Dfile.encoding=UTF-8";
-    Orchestrator orchestrator = Orchestrator.builderEnv()
-      .addPlugin(FileLocation.byWildcardMavenFilename(new File("../plugins/sonar-xoo-plugin/target"), "sonar-xoo-plugin-*.jar"))
+    Orchestrator orchestrator = newOrchestratorBuilder()
+      .addPlugin(xooPlugin())
 
       // See http://wiki.apache.org/tomcat/HowTo/FasterStartUp
       // Sometimes source of entropy is too small and Tomcat spends ~20 seconds on the step :
index ca57e9fc7e4ebfcee73e96ddc699ba586276094b..f2601bdaa1a9d0a7d6b02734d1ad0b39871020e2 100644 (file)
@@ -24,7 +24,6 @@ import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
 import com.sonar.orchestrator.Orchestrator;
 import com.sonar.orchestrator.build.SonarScanner;
-import org.json.JSONException;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Rule;
@@ -34,6 +33,7 @@ import org.sonarqube.ws.client.GetRequest;
 import org.sonarqube.ws.client.WsResponse;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.projectDir;
 import static util.ItUtils.xooPlugin;
 
@@ -42,7 +42,7 @@ import static util.ItUtils.xooPlugin;
  */
 public class CompressPluginsTest {
   @ClassRule
-  public static Orchestrator orchestrator = Orchestrator.builderEnv()
+  public static Orchestrator orchestrator = newOrchestratorBuilder()
     .addPlugin(xooPlugin())
     .setServerProperty("sonar.pluginsCompression.enable", "true")
     .build();
index eb32eebbc6c992ee61cb3f9ac3a0d0183ad3f001..bcde9c81ca28f3538922f97ebc29d38e80e10cf7 100644 (file)
@@ -24,8 +24,6 @@ import com.sonar.orchestrator.OrchestratorBuilder;
 import com.sonar.orchestrator.build.BuildResult;
 import com.sonar.orchestrator.build.SonarScanner;
 import com.sonar.orchestrator.locator.MavenLocation;
-import java.io.File;
-import java.net.MalformedURLException;
 import java.util.Arrays;
 import java.util.List;
 import org.junit.BeforeClass;
@@ -50,8 +48,8 @@ import org.sonarqube.tests.plugins.checks.SwiftCheck;
 import org.sonarqube.tests.plugins.checks.Validation;
 import org.sonarqube.tests.plugins.checks.WebCheck;
 
-import static com.sonar.orchestrator.locator.FileLocation.byWildcardMavenFilename;
 import static org.assertj.core.api.Assertions.fail;
+import static util.ItUtils.newOrchestratorBuilder;
 
 /**
  * Verify that latest releases of the plugins available in update center
@@ -83,8 +81,7 @@ public class PluginsTest {
 
   @BeforeClass
   public static void startServer() {
-    OrchestratorBuilder builder = Orchestrator.builderEnv()
-      .setZipFile(byWildcardMavenFilename(new File("../sonar-application/target"), "sonar*.zip").getFile());
+    OrchestratorBuilder builder = newOrchestratorBuilder();
 
     builder.addPlugin(MavenLocation.of("com.sonarsource.license", "sonar-dev-license-plugin", "3.2.0.1163"));
 
index 575f42abf4794279462936e9d6287ba22d51fbde..eaf2ba850be036fa209e3682e606f2c5907398be 100644 (file)
@@ -26,6 +26,7 @@ import org.junit.ClassRule;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.pluginArtifact;
 import static util.ItUtils.xooPlugin;
 
@@ -50,9 +51,7 @@ public class ProjectSuite {
   static final int SEARCH_HTTP_PORT = NetworkUtils.getNextAvailablePort(InetAddress.getLoopbackAddress());
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
-    // reduce memory for Elasticsearch
-    .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m")
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
     // for ES resiliency tests
     .setServerProperty("sonar.search.httpPort", "" + SEARCH_HTTP_PORT)
     .setServerProperty("sonar.search.recovery.delayInMs", "1000")
index 872029f36d600efdd41d3940db3a93a1e5ef55c0..d65f7b52c37d93c6ea29f8e5c54d76eabd82c67d 100644 (file)
@@ -24,6 +24,7 @@ import org.junit.ClassRule;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.xooPlugin;
 
 @RunWith(Suite.class)
@@ -33,7 +34,7 @@ import static util.ItUtils.xooPlugin;
 public class SonarCloudProjectSuite {
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
     .addPlugin(xooPlugin())
     .setServerProperty("sonar.sonarcloud.enabled", "true")
     .build();
index 574957407deb786ff1b88da07774baa63cd2a063..985f8b3a3dc9fd5911475b49fe506e2075444c21 100644 (file)
@@ -24,6 +24,7 @@ import org.junit.ClassRule;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.pluginArtifact;
 import static util.ItUtils.xooPlugin;
 
@@ -36,13 +37,10 @@ import static util.ItUtils.xooPlugin;
 public class OrganizationQualityGateSuite {
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
     // required for notification tests
     .setServerProperty("sonar.notifications.delay", "1")
 
-    // reduce memory for Elasticsearch
-    .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m")
-
     .addPlugin(pluginArtifact("posttask-plugin"))
     .addPlugin(xooPlugin())
     .build();
index 3ce87ad9528facb46cc28b13ea296b938731fb49..910144e75cbd2bbdf8edf6e92a29ab195a9a4c5d 100644 (file)
@@ -24,6 +24,7 @@ import org.junit.ClassRule;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.pluginArtifact;
 import static util.ItUtils.xooPlugin;
 
@@ -38,13 +39,10 @@ import static util.ItUtils.xooPlugin;
 public class QualityGateSuite {
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
     // required for notification tests
     .setServerProperty("sonar.notifications.delay", "1")
 
-    // reduce memory for Elasticsearch
-    .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m")
-
     .addPlugin(pluginArtifact("posttask-plugin"))
     .addPlugin(xooPlugin())
     .build();
index c7431a8bbff31fff40032a9f30fa918659393915..b796cfe6b847b3bc575d3c9e15ad1a775b388581 100644 (file)
@@ -24,6 +24,7 @@ import org.junit.ClassRule;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.xooPlugin;
 
 @RunWith(Suite.class)
@@ -40,12 +41,9 @@ import static util.ItUtils.xooPlugin;
 public class QualityModelSuite {
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
     .addPlugin(xooPlugin())
 
-    // reduce memory for Elasticsearch
-    .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m")
-
     .build();
 
 }
index 869beb0154ba473dd8335b5ef870bcec47503f4f..44a91226fda6921d75ae443f617090cc01c74088 100644 (file)
@@ -38,6 +38,7 @@ import util.ItUtils;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.sonarqube.tests.Byteman.Process.WEB;
+import static util.ItUtils.newOrchestratorBuilder;
 
 public class ActiveRuleEsResilienceTest {
   private static final String RULE_ONE_BUG_PER_LINE = "xoo:OneBugIssuePerLine";
@@ -47,7 +48,7 @@ public class ActiveRuleEsResilienceTest {
   private static final Byteman byteman;
 
   static {
-    byteman = new Byteman(Orchestrator.builderEnv(), WEB);
+    byteman = new Byteman(newOrchestratorBuilder(), WEB);
     orchestrator = byteman
       .getOrchestratorBuilder()
       .setServerProperty("sonar.search.recovery.delayInMs", "1000")
index 2eb34952fa42e43f65386039907f35bd85a17654..861beecbe5319ad3a0a063fdd51207545928b355 100644 (file)
@@ -41,6 +41,7 @@ import util.user.UserRule;
 
 import static org.apache.commons.lang.RandomStringUtils.randomAlphanumeric;
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.pluginArtifact;
 
 public class BuiltInQualityProfilesNotificationTest {
@@ -67,7 +68,7 @@ public class BuiltInQualityProfilesNotificationTest {
 
   @Test
   public void does_not_send_mail_if_no_quality_profile_is_updated() throws Exception {
-    orchestrator = Orchestrator.builderEnv()
+    orchestrator = newOrchestratorBuilder()
       .addPlugin(pluginArtifact("foo-plugin-v1"))
       .setServerProperty("email.smtp_host.secured", "localhost")
       .setServerProperty("email.smtp_port.secured", Integer.toString(smtpServer.getServer().getPort()))
@@ -86,7 +87,7 @@ public class BuiltInQualityProfilesNotificationTest {
 
   @Test
   public void send_mail_if_quality_profile_is_updated() throws Exception {
-    orchestrator = Orchestrator.builderEnv()
+    orchestrator = newOrchestratorBuilder()
       .addPlugin(pluginArtifact("foo-plugin-v1"))
       .setServerProperty("sonar.notifications.delay", "1")
       .setServerProperty("email.smtp_host.secured", "localhost")
@@ -174,7 +175,7 @@ public class BuiltInQualityProfilesNotificationTest {
 
   @Test
   public void do_not_send_mail_if_notifications_are_disabled_in_settings() throws Exception {
-    orchestrator = Orchestrator.builderEnv()
+    orchestrator = newOrchestratorBuilder()
       .addPlugin(pluginArtifact("foo-plugin-v1"))
       .setServerProperty("sonar.builtInQualityProfiles.disableNotificationOnUpdate", "true")
       .setServerProperty("email.smtp_host.secured", "localhost")
index 2efd49948ce1ce923732b3bda9a63ceeca6db236..1163564bbba04fa2e6097658c2c609c0c950e3fe 100644 (file)
@@ -38,6 +38,7 @@ import util.ItUtils;
 import static java.util.Collections.singletonList;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.sonarqube.tests.Byteman.Process.WEB;
+import static util.ItUtils.newOrchestratorBuilder;
 
 public class RuleEsResilienceTest {
 
@@ -46,7 +47,7 @@ public class RuleEsResilienceTest {
   private static final Byteman byteman;
 
   static {
-    byteman = new Byteman(Orchestrator.builderEnv(), WEB);
+    byteman = new Byteman(newOrchestratorBuilder(), WEB);
     orchestrator = byteman
       .getOrchestratorBuilder()
       .setServerProperty("sonar.search.recovery.delayInMs", "1000")
index ddff401dcc16579a14d75dbb5799ec30d9f55594..6576d0ec92442bd75318d22663778bf9fedd5946 100644 (file)
@@ -40,6 +40,7 @@ import org.sonarqube.ws.client.issues.SearchRequest;
 import static java.util.Collections.singletonList;
 import static java.util.stream.Collectors.toSet;
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.pluginArtifact;
 import static util.ItUtils.projectDir;
 
@@ -60,7 +61,7 @@ public class RuleReKeyingTest {
 
   @Test
   public void rules_are_re_keyed_when_upgrading_and_downgrading_plugin() {
-    orchestrator = Orchestrator.builderEnv()
+    orchestrator = newOrchestratorBuilder()
       .addPlugin(pluginArtifact("foo-plugin-v1"))
       .build();
     orchestrator.start();
index 010ba984229b54f2b297bbfe0b2afc8ddeb7203f..532925b7c503d70ad6c91f75b106fa44f6bec028 100644 (file)
@@ -29,7 +29,6 @@ import org.junit.rules.DisableOnDebug;
 import org.junit.rules.ExpectedException;
 import org.junit.rules.TestRule;
 import org.junit.rules.Timeout;
-import org.sonarqube.qa.util.Tester;
 import org.sonarqube.ws.System;
 import org.sonarqube.ws.client.PostRequest;
 import org.sonarqube.ws.client.WsClient;
@@ -39,6 +38,7 @@ import util.ItUtils;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.fail;
 import static util.ItUtils.newAdminWsClient;
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.newWsClient;
 
 /**
@@ -64,7 +64,7 @@ public class RestartTest {
   public void restart_in_prod_mode_requires_sysadmin_permission_and_restarts() throws Exception {
     // server classloader locks Jar files on Windows
     if (!SystemUtils.IS_OS_WINDOWS) {
-      orchestrator = Orchestrator.builderEnv()
+      orchestrator = newOrchestratorBuilder()
         .setOrchestratorProperty("orchestrator.keepWorkspace", "true")
         .build();
       orchestrator.start();
index 161456b209ad325bd876c9290b297d956b30abbc..ed4fd75d91489282e1e412c5e3f98ab1618e5673 100644 (file)
@@ -33,6 +33,7 @@ import util.ItUtils;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.fail;
 import static util.ItUtils.newAdminWsClient;
+import static util.ItUtils.newOrchestratorBuilder;
 
 /**
  * This class start a new orchestrator on each test case
@@ -57,7 +58,7 @@ public class ServerSystemRestartingOrchestrator {
   @Test
   public void check_minimal_sonar_version_at_startup() throws Exception {
     try {
-      orchestrator = Orchestrator.builderEnv()
+      orchestrator = newOrchestratorBuilder()
         .addPlugin(FileLocation.of(new File(ServerSystemRestartingOrchestrator.class.getResource("/serverSystem/ServerSystemTest/incompatible-plugin-1.0.jar").toURI())))
         .build();
       orchestrator.start();
@@ -70,9 +71,9 @@ public class ServerSystemRestartingOrchestrator {
 
   @Test
   public void support_install_dir_with_whitespaces() throws Exception {
-    String dirName = "target/has space";
+    String dirName = "build/distributions/has space";
     FileUtils.deleteDirectory(new File(dirName));
-    orchestrator = Orchestrator.builderEnv()
+    orchestrator = newOrchestratorBuilder()
       .setOrchestratorProperty("orchestrator.workspaceDir", dirName)
       .build();
     orchestrator.start();
@@ -83,7 +84,7 @@ public class ServerSystemRestartingOrchestrator {
   // SONAR-4748
   @Test
   public void should_create_in_temp_folder() throws Exception {
-    orchestrator = Orchestrator.builderEnv()
+    orchestrator = newOrchestratorBuilder()
       .addPlugin(ItUtils.pluginArtifact("server-plugin"))
       .setServerProperty("sonar.createTempFiles", "true")
       .build();
index 94d9fc77b29c313c653a9f6aebc9eace2fdf2e86..7a2ee2e42a5577cf2e7f052cef484c25198aaabb 100644 (file)
@@ -41,6 +41,7 @@ import org.sonarqube.ws.client.WsClient;
 
 import static com.google.common.base.Preconditions.checkState;
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.newSystemUserWsClient;
 import static util.ItUtils.newWsClient;
 import static util.ItUtils.pluginArtifact;
@@ -128,7 +129,7 @@ public class SystemStateTest {
 
     void start(Lock lock) {
       checkState(orchestrator == null);
-      orchestrator = Orchestrator.builderEnv()
+      orchestrator = newOrchestratorBuilder()
         .addPlugin(pluginArtifact("server-plugin"))
         .setServerProperty("sonar.web.startupLock.path", lock.webFile.getAbsolutePath())
         .setServerProperty("sonar.ce.startupLock.path", lock.ceFile.getAbsolutePath())
index 8aee5ebb876fec7dd1b7c9b9ffdbfcebf168f002..1c4f5a88e3eb6b1c3db60b4128ef1bdc7771a7af 100644 (file)
@@ -21,7 +21,6 @@ package org.sonarqube.tests.settings;
 
 import com.sonar.orchestrator.Orchestrator;
 import com.sonar.orchestrator.build.SonarScanner;
-import java.io.UnsupportedEncodingException;
 import java.net.URL;
 import org.junit.After;
 import org.junit.Rule;
@@ -33,6 +32,7 @@ import util.user.UserRule;
 
 import static com.codeborne.selenide.Condition.visible;
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.pluginArtifact;
 import static util.ItUtils.projectDir;
 import static util.ItUtils.xooPlugin;
@@ -60,7 +60,7 @@ public class SettingsTestRestartingOrchestrator {
   @Test
   public void test_settings() {
     URL secretKeyUrl = getClass().getResource("/settings/SettingsTest/sonar-secret.txt");
-    orchestrator = Orchestrator.builderEnv()
+    orchestrator = newOrchestratorBuilder()
       .addPlugin(pluginArtifact("settings-plugin"))
       .addPlugin(pluginArtifact("license-plugin"))
       .setServerProperty("sonar.secretKeyPath", secretKeyUrl.getFile())
@@ -86,7 +86,7 @@ public class SettingsTestRestartingOrchestrator {
 
   @Test
   public void property_relocation() {
-    orchestrator = Orchestrator.builderEnv()
+    orchestrator = newOrchestratorBuilder()
       .addPlugin(pluginArtifact("property-relocation-plugin"))
       .addPlugin(xooPlugin())
       .setServerProperty("sonar.deprecatedKey", "true")
index fbcb1885bf92d67afb14feb3ea5508fb9ab7b7ef..070a0fc941e0b63c32eb3f57e02ae515cedeaa1e 100644 (file)
@@ -24,6 +24,7 @@ import org.junit.ClassRule;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.xooPlugin;
 
 @RunWith(Suite.class)
@@ -37,9 +38,7 @@ import static util.ItUtils.xooPlugin;
 public class SourceSuite {
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator
-    .builderEnv()
-    .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m")
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
     .setOrchestratorProperty("scmgitVersion", "LATEST_RELEASE")
     .addPlugin(xooPlugin())
     .addPlugin("scmgit")
index 643a0ff12d5425c73ecd426c793deba2ecac16fd..f654949bd266f75dcad91fbe3a0de2720b5b98f5 100644 (file)
@@ -38,6 +38,7 @@ import org.sonarqube.ws.Users;
 import org.sonarqube.ws.client.users.SearchRequest;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.pluginArtifact;
 
 public class StartupIndexationTest {
@@ -81,7 +82,7 @@ public class StartupIndexationTest {
       pauseFile = temp.newFile();
       FileUtils.touch(pauseFile);
 
-      orchestrator = Orchestrator.builderEnv()
+      orchestrator = newOrchestratorBuilder()
         .setServerProperty("sonar.web.pause.path", pauseFile.getAbsolutePath())
         .addPlugin(pluginArtifact("wait-at-platform-level4-plugin"))
         .setStartupLogWatcher(l -> l.contains("PlatformLevel4 initialization phase is paused"))
index 1cd6186184d96294645dbf035ed3e39580d8d248..a827baa6282e20a17ad17a43a2cbc64691ad2981 100644 (file)
@@ -32,13 +32,14 @@ import org.sonarqube.ws.client.GetRequest;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static util.ItUtils.jsonToMap;
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.xooPlugin;
 
 public class TelemetryOptOutTest {
 
   public static MockWebServer server = new MockWebServer();
 
-  private static Orchestrator orchestrator = Orchestrator.builderEnv()
+  private static Orchestrator orchestrator = newOrchestratorBuilder()
     .addPlugin(xooPlugin())
     .setServerProperty("sonar.telemetry.enable", "false")
     .setServerProperty("sonar.telemetry.url", server.url("").toString())
index 8e8a9007f596b09389c0d9f81bb42d1882918e97..fd17f38511261b356ca0e263349d85dbb1b76a28 100644 (file)
@@ -37,6 +37,7 @@ import util.ItUtils;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.tuple;
 import static util.ItUtils.jsonToMap;
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.runProjectAnalysis;
 import static util.ItUtils.xooPlugin;
 
@@ -60,7 +61,7 @@ public class TelemetryUploadTest {
   @Test
   public void sent_telemetry_data() throws Exception {
     telemetryServer.enqueue(new MockResponse().setResponseCode(200));
-    orchestrator = Orchestrator.builderEnv()
+    orchestrator = newOrchestratorBuilder()
       .addPlugin(xooPlugin())
       .setServerProperty("sonar.telemetry.url", telemetryServer.url("").toString())
       // increase frequency so that payload is sent quickly after startup
@@ -104,7 +105,7 @@ public class TelemetryUploadTest {
 
   @Test
   public void does_not_send_telemetry_data_right_away_by_Default() {
-    orchestrator = Orchestrator.builderEnv()
+    orchestrator = newOrchestratorBuilder()
       .addPlugin(xooPlugin())
       .setServerProperty("sonar.telemetry.url", telemetryServer.url("").toString())
       .build();
index 8afec8fdf6ac721fa8bc9c78d17a456390e8db40..9afbbfa2de97ac12dfba45f67f04ed26b61b57be 100644 (file)
@@ -24,6 +24,7 @@ import org.junit.ClassRule;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.xooPlugin;
 
 @RunWith(Suite.class)
@@ -36,12 +37,9 @@ import static util.ItUtils.xooPlugin;
 public class TestSuite {
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
     .addPlugin(xooPlugin())
 
-    // reduce memory for Elasticsearch
-    .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m")
-
     .build();
 
 }
index 0828b039b116372769b9b4037ec12995927ca485..8d79898aa13c4b342ee604830c8e0011414a9d53 100644 (file)
@@ -25,7 +25,7 @@ import com.sonar.orchestrator.Orchestrator;
 import com.sonar.orchestrator.OrchestratorBuilder;
 import com.sonar.orchestrator.build.MavenBuild;
 import com.sonar.orchestrator.container.Server;
-import com.sonar.orchestrator.locator.FileLocation;
+import com.sonar.orchestrator.locator.MavenLocation;
 import com.sonar.orchestrator.version.Version;
 import java.io.File;
 import java.io.IOException;
@@ -53,6 +53,8 @@ import static java.lang.Integer.parseInt;
 import static java.util.Collections.singletonList;
 import static org.assertj.core.api.Assertions.assertThat;
 
+import static util.ItUtils.newOrchestratorBuilder;
+
 public class UpgradeTest {
 
   private static final String PROJECT_KEY = "org.apache.struts:struts-parent";
@@ -70,8 +72,8 @@ public class UpgradeTest {
   }
 
   @Test
-  public void test_upgrade_from_5_6_1() {
-    testDatabaseUpgrade(Version.create("5.6.1"));
+  public void test_upgrade_from_6_7() {
+    testDatabaseUpgrade(Version.create("6.7"));
   }
 
   private void testDatabaseUpgrade(Version fromVersion) {
@@ -152,8 +154,8 @@ public class UpgradeTest {
     OrchestratorBuilder builder = Orchestrator.builderEnv()
       .setSonarVersion(sqVersion.toString())
       .setOrchestratorProperty("orchestrator.keepDatabase", String.valueOf(keepDatabase))
-      .setOrchestratorProperty("javaVersion", "3.14")
-      .addPlugin("java")
+      .setOrchestratorProperty("orchestrator.workspaceDir", "build/it")
+      .addPlugin(MavenLocation.of("org.sonarsource.java", "sonar-java-plugin", "5.1.0.13090"))
       .setStartupLogWatcher(log -> log.contains("Process[web] is up"));
     orchestrator = builder.build();
     orchestrator.start();
@@ -161,8 +163,7 @@ public class UpgradeTest {
   }
 
   private void startAndUpgradeDevServer() {
-    OrchestratorBuilder builder = Orchestrator.builderEnv()
-      .setZipFile(FileLocation.byWildcardMavenFilename(new File("../sonar-application/target"), "sonar*.zip").getFile())
+    OrchestratorBuilder builder = newOrchestratorBuilder()
       .setOrchestratorProperty("orchestrator.keepDatabase", "true")
       .setOrchestratorProperty("javaVersion", LATEST_JAVA_RELEASE)
       .addPlugin("java")
index e7c709f12370b888e303ba335a0dc31f7db66b1f..440e0d4bba6ef81b9b5e73c7611fb5f934d96b9c 100644 (file)
@@ -30,13 +30,14 @@ import org.sonarqube.ws.client.users.DeactivateRequest;
 import util.ItUtils;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.newOrchestratorBuilder;
 
 public class OnboardingTest {
 
   private static final String ONBOARDING_TUTORIAL_SHOW_TO_NEW_USERS = "sonar.onboardingTutorial.showToNewUsers";
 
   @ClassRule
-  public static final Orchestrator orchestrator = Orchestrator.builderEnv().build();
+  public static final Orchestrator orchestrator = newOrchestratorBuilder().build();
 
   @Rule
   public Tester tester = new Tester(orchestrator).disableOrganizations();
index e5586b474e23636bec1ea51fdfa129939e90a628..c0f14d8e6a34e5f1cbb16c8d6b674482f885a1ea 100644 (file)
@@ -51,6 +51,7 @@ import static java.net.HttpURLConnection.HTTP_OK;
 import static java.net.HttpURLConnection.HTTP_UNAUTHORIZED;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.fail;
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.newUserWsClient;
 import static util.ItUtils.pluginArtifact;
 import static util.ItUtils.resetSettings;
@@ -76,7 +77,7 @@ public class RealmAuthenticationTest {
   private static final String USERS_PROPERTY = "sonar.fakeauthenticator.users";
 
   @ClassRule
-  public static final Orchestrator orchestrator = Orchestrator.builderEnv()
+  public static final Orchestrator orchestrator = newOrchestratorBuilder()
     .addPlugin(pluginArtifact("security-plugin"))
     .setServerProperty("sonar.security.realm", "FakeRealm")
     .build();
index 071598818426043197c40c4310f2f400e016a2ba..146f37ea777ece77238391f08660464f38bcb3d7 100644 (file)
@@ -34,6 +34,7 @@ import util.user.UserRule;
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.assertj.core.api.Assertions.assertThat;
 import static util.ItUtils.call;
+import static util.ItUtils.newOrchestratorBuilder;
 
 /**
  * Test SSO authentication (using HTTP headers).
@@ -56,7 +57,7 @@ public class SsoAuthenticationTest {
   static final String GROUP_3 = "group-3";
 
   @ClassRule
-  public static final Orchestrator orchestrator = Orchestrator.builderEnv()
+  public static final Orchestrator orchestrator = newOrchestratorBuilder()
     .setServerProperty("sonar.web.sso.enable", "true")
     .setServerProperty("sonar.web.sso.loginHeader", LOGIN_HEADER)
     .setServerProperty("sonar.web.sso.nameHeader", NAME_HEADER)
index ca5516f3896578c9334a77968958cd7316a814ef..92ff670f0e3d464336c992e286a8e53617cb12ea 100644 (file)
@@ -39,6 +39,7 @@ import util.ItUtils;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.sonarqube.tests.Byteman.Process.WEB;
 import static util.ItUtils.expectHttpError;
+import static util.ItUtils.newOrchestratorBuilder;
 
 public class UserEsResilienceTest {
 
@@ -47,7 +48,7 @@ public class UserEsResilienceTest {
   private static final Byteman byteman;
 
   static {
-    byteman = new Byteman(Orchestrator.builderEnv(), WEB);
+    byteman = new Byteman(newOrchestratorBuilder(), WEB);
     orchestrator = byteman
       .getOrchestratorBuilder()
       .setServerProperty("sonar.search.recovery.delayInMs", "1000")
index 4eb7d0138dd960e85f76fd4920e4831efd6e53a1..0f448dd9a7a5651035b4ab37c17236104568e733 100644 (file)
@@ -25,6 +25,7 @@ import org.junit.ClassRule;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.pluginArtifact;
 import static util.ItUtils.xooPlugin;
 
@@ -44,7 +45,7 @@ import static util.ItUtils.xooPlugin;
 public class UserSuite {
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
     .addPlugin(xooPlugin())
 
     // Used in BaseIdentityProviderTest
index 6412ec5c48e115dd8f32e925ee5fc19ffcd0fb23..e3bc89f92698781cfb538d2a4fce9363a09c526e 100644 (file)
@@ -24,6 +24,7 @@ import org.junit.ClassRule;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
+import static util.ItUtils.newOrchestratorBuilder;
 import static util.ItUtils.xooPlugin;
 
 @RunWith(Suite.class)
@@ -34,7 +35,7 @@ import static util.ItUtils.xooPlugin;
 public class WebhooksSuite {
 
   @ClassRule
-  public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
+  public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
     .addPlugin(xooPlugin())
 
     // reduce memory for Elasticsearch
index d91c8e37872a4669f199ecf911fa00abb341be2c..a5c763180de10c2cfff6772afef739fc11f2e486 100644 (file)
@@ -25,6 +25,7 @@ import com.google.common.collect.ImmutableMap;
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
 import com.sonar.orchestrator.Orchestrator;
+import com.sonar.orchestrator.OrchestratorBuilder;
 import com.sonar.orchestrator.build.BuildResult;
 import com.sonar.orchestrator.build.SonarRunner;
 import com.sonar.orchestrator.container.Server;
@@ -54,6 +55,7 @@ import okhttp3.OkHttpClient;
 import okhttp3.Request;
 import okhttp3.Response;
 import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.StringUtils;
 import org.json.simple.JSONArray;
 import org.json.simple.JSONObject;
 import org.json.simple.JSONValue;
@@ -96,8 +98,23 @@ public class ItUtils {
   private ItUtils() {
   }
 
+  public static OrchestratorBuilder newOrchestratorBuilder() {
+    OrchestratorBuilder builder = Orchestrator.builderEnv();
+    String version = System.getProperty("sonar.runtimeVersion");
+    if (StringUtils.isEmpty(version)) {
+      File zip = FileLocation.byWildcardMavenFilename(new File("../sonar-application/build/distributions"), "sonar-application-*.zip").getFile();
+      builder.setZipFile(zip);
+    } else {
+      builder.setSonarVersion(version);
+    }
+    return builder
+      // reduce memory for Elasticsearch
+      .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m")
+      .setOrchestratorProperty("orchestrator.workspaceDir", "build/it");
+  }
+
   public static FileLocation xooPlugin() {
-    return FileLocation.byWildcardMavenFilename(new File("../plugins/sonar-xoo-plugin/target"), "sonar-xoo-plugin-*.jar");
+    return FileLocation.byWildcardMavenFilename(new File("../plugins/sonar-xoo-plugin/build/libs"), "sonar-xoo-plugin-*.jar");
   }
 
   public static List<Issue> getAllServerIssues(Orchestrator orchestrator) {
@@ -164,7 +181,7 @@ public class ItUtils {
    * @param dirName the directory of it/plugins, for example "sonar-fake-plugin".
    */
   public static FileLocation pluginArtifact(String dirName) {
-    return FileLocation.byWildcardMavenFilename(new File("plugins/" + dirName + "/target"), dirName + "-*.jar");
+    return FileLocation.byWildcardMavenFilename(new File("plugins/" + dirName + "/build/libs"), dirName + "-*.jar");
   }
 
   /**
diff --git a/third-party-licenses.sh b/third-party-licenses.sh
deleted file mode 100755 (executable)
index c97a17c..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-mvn org.codehaus.mojo:license-maven-plugin:aggregate-add-third-party -Dlicense.includedScopes=compile -pl sonar-application -am
-
-cat target/generated-sources/license/THIRD-PARTY.txt
index 7c1acf457ea4be410f639a0cbf5e4f402e6f27a4..eaf9879c83cdd2a9c25c356dc9993b1251c323c0 100755 (executable)
--- a/travis.sh
+++ b/travis.sh
@@ -23,83 +23,12 @@ function installJdk8 {
   export PATH=$JAVA_HOME/bin:$PATH
 }
 
-#
-# Maven 3.2.5 is installed by default on Travis. Maven 3.5 is preferred.
-#
-function installMaven {
-  echo "Setup Maven"
-  mkdir -p ~/maven
-  pushd ~/maven > /dev/null
-  if [ ! -d "apache-maven-3.5" ]; then
-    echo "Download Maven 3.5"
-    curl -sSL https://archive.apache.org/dist/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz | tar zx -C ~/maven
-  fi
-  popd > /dev/null
-  export M2_HOME=~/maven/apache-maven-3.5.0
-  export PATH=$M2_HOME/bin:$PATH
-}
-
 function installNode {
   set +u
   source ~/.nvm/nvm.sh && nvm install 8
   set -u
 }
 
-#
-# Replaces the version defined in sources, usually x.y-SNAPSHOT,
-# by a version identifying the build.
-# The build version is composed of 4 fields, including the semantic version and
-# the build number provided by Travis.
-#
-# Exported variables:
-# - INITIAL_VERSION: version as defined in pom.xml
-# - BUILD_VERSION: version including the build number
-# - PROJECT_VERSION: target Maven version. The name of this variable is important because
-#   it's used by QA when extracting version from Artifactory build info.
-#
-# Example of SNAPSHOT
-# INITIAL_VERSION=6.3-SNAPSHOT
-# BUILD_VERSION=6.3.0.12345
-# PROJECT_VERSION=6.3.0.12345
-#
-# Example of RC
-# INITIAL_VERSION=6.3-RC1
-# BUILD_VERSION=6.3.0.12345
-# PROJECT_VERSION=6.3-RC1
-#
-# Example of GA
-# INITIAL_VERSION=6.3
-# BUILD_VERSION=6.3.0.12345
-# PROJECT_VERSION=6.3
-#
-function fixBuildVersion {
-  export INITIAL_VERSION=`maven_expression "project.version"`
-
-  # remove suffix -SNAPSHOT or -RC
-  without_suffix=`echo $INITIAL_VERSION | sed "s/-.*//g"`
-
-  IFS=$'.'
-  fields_count=`echo $without_suffix | wc -w`
-  unset IFS
-  if [ $fields_count -lt 3 ]; then
-    export BUILD_VERSION="$without_suffix.0.$TRAVIS_BUILD_NUMBER"
-  else
-    export BUILD_VERSION="$without_suffix.$TRAVIS_BUILD_NUMBER"
-  fi
-
-  if [[ "${INITIAL_VERSION}" == *"-SNAPSHOT" ]]; then
-    # SNAPSHOT
-    export PROJECT_VERSION=$BUILD_VERSION
-    mvn org.codehaus.mojo:versions-maven-plugin:2.2:set -DnewVersion=$PROJECT_VERSION -DgenerateBackupPoms=false -B -e
-  else
-    # not a SNAPSHOT: milestone, RC or GA
-    export PROJECT_VERSION=$INITIAL_VERSION
-  fi
-
-  echo "Build Version  : $BUILD_VERSION"
-  echo "Project Version: $PROJECT_VERSION"
-}
-
 #
 # Configure Maven settings and install some script utilities
 #
@@ -134,14 +63,10 @@ case "$TARGET" in
 BUILD)
 
   installJdk8
-  installMaven
   installNode
-  fixBuildVersion
-
-  # Minimal Maven settings
-  export MAVEN_OPTS="-Xmx1G -Xms128m"
-  MAVEN_ARGS="-T 1C -Dmaven.test.redirectTestOutputToFile=false -Dsurefire.useFile=false -B -e -V -DbuildVersion=$BUILD_VERSION -Dtests.es.logger.level=WARN -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn"
 
+  # Used by Next
+  export INITIAL_VERSION=$(cat gradle.properties | grep version | awk -F= '{print $2}')
 
   # Fetch all commit history so that SonarQube has exact blame information
   # for issue auto-assignment
@@ -153,27 +78,22 @@ BUILD)
 
   if [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
     echo 'Build and analyze master'
-    mvn org.jacoco:jacoco-maven-plugin:prepare-agent deploy \
-          $MAVEN_ARGS \
-          -Pdeploy-sonarsource,release
-        
-    mvn sonar:sonar \
-          -Dsonar.host.url=$SONAR_HOST_URL \
-          -Dsonar.login=$SONAR_TOKEN \
-          -Dsonar.projectVersion=$INITIAL_VERSION \
-          -Dsonar.analysis.buildNumber=$BUILD_NUMBER \
-          -Dsonar.analysis.pipeline=$BUILD_NUMBER \
-          -Dsonar.analysis.sha1=$GIT_COMMIT \
-          -Dsonar.analysis.repository=$TRAVIS_REPO_SLUG
+    ./gradlew --no-daemon --console plain \
+        -DbuildNumber=$BUILD_NUMBER \
+        build sonarqube artifactoryPublish -PjacocoEnabled=true -Prelease=true \
+        -Dsonar.host.url=$SONAR_HOST_URL \
+        -Dsonar.login=$SONAR_TOKEN \
+        -Dsonar.projectVersion=$INITIAL_VERSION \
+        -Dsonar.analysis.buildNumber=$BUILD_NUMBER \
+        -Dsonar.analysis.pipeline=$BUILD_NUMBER \
+        -Dsonar.analysis.sha1=$GIT_COMMIT \
+        -Dsonar.analysis.repository=$TRAVIS_REPO_SLUG
 
   elif [[ "$TRAVIS_BRANCH" == "branch-"* ]] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
     echo 'Build release branch'
-
-    mvn org.jacoco:jacoco-maven-plugin:prepare-agent deploy \
-        $MAVEN_ARGS \
-        -Pdeploy-sonarsource,release
-
-    mvn sonar:sonar \
+    ./gradlew --no-daemon --console plain \
+        -DbuildNumber=$BUILD_NUMBER \
+        build sonarqube artifactoryPublish -PjacocoEnabled=true -Prelease=true \
         -Dsonar.host.url=$SONAR_HOST_URL \
         -Dsonar.login=$SONAR_TOKEN \
         -Dsonar.branch.name=$TRAVIS_BRANCH \
@@ -185,13 +105,9 @@ BUILD)
   
   elif [ "$TRAVIS_PULL_REQUEST" != "false" ] && [ -n "${GITHUB_TOKEN:-}" ]; then
     echo 'Build and analyze internal pull request'
-
-    mvn org.jacoco:jacoco-maven-plugin:prepare-agent deploy \
-        $MAVEN_ARGS \
-        -Dsource.skip=true \
-        -Pdeploy-sonarsource,release
-
-    mvn sonar:sonar \
+    ./gradlew --no-daemon --console plain \
+        -DbuildNumber=$BUILD_NUMBER \
+        build sonarqube artifactoryPublish -PjacocoEnabled=true -Prelease=true \
         -Dsonar.host.url=$SONAR_HOST_URL \
         -Dsonar.login=$SONAR_TOKEN \
         -Dsonar.analysis.buildNumber=$BUILD_NUMBER \
@@ -207,10 +123,10 @@ BUILD)
 
   else
     echo 'Build feature branch or external pull request'
-    mvn deploy $MAVEN_ARGS -Pdeploy-sonarsource,release
+    ./gradlew  --no-daemon --console plain \
+        -DbuildNumber=$BUILD_NUMBER -Prelease=true \
+        build artifactoryPublish
   fi
-
-  ./run-integration-tests.sh "Lite" ""
   ;;
 
 WEB_TESTS)