blob: 2297beda02c5c36bf2f05b375f5f282176f5e412 [file] [log] [blame]
Kun Zhang4bc2d6d2015-04-17 10:49:11 -07001buildscript {
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -07002 repositories {
3 mavenLocal()
4 maven { url "https://plugins.gradle.org/m2/" }
Eric Anderson675080b2017-02-24 14:53:23 -08005 }
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -07006 dependencies {
7 classpath "com.diffplug.spotless:spotless-plugin-gradle:3.13.0"
8 classpath 'com.google.gradle:osdetector-gradle-plugin:1.4.0'
Eric Andersond66ba242018-07-26 10:35:20 -07009 classpath 'ru.vyarus:gradle-animalsniffer-plugin:1.4.5'
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -070010 classpath 'net.ltgt.gradle:gradle-errorprone-plugin:0.0.13'
11 classpath 'net.ltgt.gradle:gradle-apt-plugin:0.13'
12 classpath "me.champeau.gradle:jmh-gradle-plugin:0.4.5"
13 classpath 'me.champeau.gradle:japicmp-gradle-plugin:0.2.5'
14 }
Kun Zhang4bc2d6d2015-04-17 10:49:11 -070015}
Eric Andersonb938ba52015-02-28 09:59:25 -080016
Louis Ryan540b4d32015-09-04 13:26:24 -070017subprojects {
Eric Andersonc3e8dae2015-01-30 14:58:07 -080018 apply plugin: "checkstyle"
nathanmittler164b7342014-12-15 09:58:05 -080019 apply plugin: "java"
20 apply plugin: "maven"
nmittler52f42202015-01-21 14:30:14 -080021 apply plugin: "idea"
Eric Anderson192144e2015-03-02 13:31:14 -080022 apply plugin: "signing"
Eric Anderson041cdb12015-05-05 12:29:26 -070023 apply plugin: "jacoco"
nathanmittler164b7342014-12-15 09:58:05 -080024
Eric Anderson6164b7b2017-08-26 17:10:18 -070025 apply plugin: "me.champeau.gradle.jmh"
nmittlerc4bcf142015-09-16 15:15:10 -070026 apply plugin: "com.google.osdetector"
Eric Anderson42aa64c2017-02-02 13:48:12 -080027 // The plugin only has an effect if a signature is specified
28 apply plugin: "ru.vyarus.animalsniffer"
zpencer37e6f5f2018-07-19 13:35:27 -070029 // jdk10 not supported by errorprone: https://github.com/google/error-prone/issues/860
30 if (!JavaVersion.current().isJava10Compatible() &&
31 rootProject.properties.get('errorProne', true)) {
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -070032 apply plugin: "net.ltgt.errorprone"
33 apply plugin: "net.ltgt.apt"
Eric Anderson982541b2017-04-26 13:33:27 -070034
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -070035 dependencies {
36 // The ErrorProne plugin defaults to the latest, which would break our
37 // build if error prone releases a new version with a new check
38 errorprone 'com.google.errorprone:error_prone_core:2.2.0'
39 apt 'com.google.guava:guava-beta-checker:1.0'
Eric Anderson982541b2017-04-26 13:33:27 -070040 }
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -070041 } else {
42 // Remove per-project error-prone checker config
43 allprojects {
44 afterEvaluate { project ->
45 project.tasks.withType(JavaCompile) {
46 options.compilerArgs.removeAll { it.startsWith("-Xep") }
47 }
48 }
49 }
Eric Anderson675080b2017-02-24 14:53:23 -080050 }
zpencer5713ebc2017-07-15 12:41:20 -070051 // TODO(zpencer): remove when intellij 2017.2 is released
52 // https://github.com/gradle/gradle/issues/2315
53 idea.module.inheritOutputDirs = true
nmittlerc4bcf142015-09-16 15:15:10 -070054
nmittlerf8314582015-01-27 10:25:39 -080055 group = "io.grpc"
Kun Zhang28d44ae2018-08-27 17:21:46 -070056 version = "1.16.0-SNAPSHOT" // CURRENT_GRPC_VERSION
nathanmittler164b7342014-12-15 09:58:05 -080057
Eric Anderson7b126b02018-08-27 13:31:59 -070058 sourceCompatibility = 1.7
59 targetCompatibility = 1.7
nathanmittler164b7342014-12-15 09:58:05 -080060
61 repositories {
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -070062 maven { // The google mirror is less flaky than mavenCentral()
63 url "https://maven-central.storage-download.googleapis.com/repos/central/data/" }
zpencer066ad3c2018-03-01 19:11:24 -080064 mavenLocal()
nathanmittler164b7342014-12-15 09:58:05 -080065 }
66
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -070067 [
68 compileJava,
69 compileTestJava,
70 compileJmhJava
71 ].each() {
72 it.options.compilerArgs += [
73 "-Xlint:all",
74 "-Xlint:-options",
Eric Anderson778804f2018-08-16 09:35:25 -070075 "-Xlint:-path",
76 "-Xlint:-try"
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -070077 ]
Eric Anderson76d09552015-03-12 15:25:11 -070078 it.options.encoding = "UTF-8"
Eric Anderson3c03eb72016-07-10 11:40:12 -070079 if (rootProject.hasProperty('failOnWarnings') && rootProject.failOnWarnings.toBoolean()) {
80 it.options.compilerArgs += ["-Werror"]
81 }
nmittler02c953e2015-01-26 14:03:11 -080082 }
83
Eric Anderson641cb352016-05-24 14:29:52 -070084 compileTestJava {
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -070085 // serialVersionUID is basically guaranteed to be useless in our tests
86 // LinkedList doesn't hurt much in tests and has lots of usages
87 options.compilerArgs += [
88 "-Xlint:-serial",
89 "-Xep:JdkObsolete:OFF"
90 ]
Eric Anderson641cb352016-05-24 14:29:52 -070091 }
92
nmittler8c1d38a2015-06-01 08:31:00 -070093 jar.manifest {
94 attributes('Implementation-Title': name,
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -070095 'Implementation-Version': version,
96 'Built-By': System.getProperty('user.name'),
97 'Built-JDK': System.getProperty('java.version'),
98 'Source-Compatibility': sourceCompatibility,
99 'Target-Compatibility': targetCompatibility)
nmittler8c1d38a2015-06-01 08:31:00 -0700100 }
101
Eric Anderson10fb2062015-05-05 10:28:38 -0700102 javadoc.options {
103 encoding = 'UTF-8'
ZHANG Dapeng66ebcb12017-05-17 08:52:07 -0700104 use = true
Eric Anderson10fb2062015-05-05 10:28:38 -0700105 links 'https://docs.oracle.com/javase/8/docs/api/'
106 }
Eric Anderson14444a92015-03-11 16:44:38 -0700107
Jakob Buchgraber7ddcdfd2015-02-13 16:21:53 -0800108 ext {
Kun Zhang6b1e7d62015-05-07 15:20:44 -0700109 def exeSuffix = osdetector.os == 'windows' ? ".exe" : ""
110 protocPluginBaseName = 'protoc-gen-grpc-java'
Eric Anderson46ce4092016-01-26 12:13:06 -0800111 javaPluginPath = "$rootDir/compiler/build/exe/java_plugin/$protocPluginBaseName$exeSuffix"
Kun Zhang6b1e7d62015-05-07 15:20:44 -0700112
Carl Mastrangelo7d455962018-07-20 16:36:00 -0700113 nettyVersion = '4.1.27.Final'
Eric Anderson5f0ee3a2018-03-23 15:45:05 -0700114 guavaVersion = '20.0'
Kun Zhang86d64122018-01-05 16:40:20 -0800115 protobufVersion = '3.5.1'
116 protocVersion = '3.5.1-1'
Kun Zhange2ed2e82016-01-27 08:26:19 -0800117 protobufNanoVersion = '3.0.0-alpha-5'
Bogdan Drutu2a127ce2018-06-04 15:27:27 -0700118 opencensusVersion = '0.12.3'
Kun Zhang6b1e7d62015-05-07 15:20:44 -0700119
Kun Zhang111f6dd2015-05-05 16:11:27 -0700120 configureProtoCompilation = {
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700121 String generatedSourcePath = "${projectDir}/src/generated"
122 if (rootProject.childProjects.containsKey('grpc-compiler')) {
123 // Only when the codegen is built along with the project, will we be able to recompile
124 // the proto files.
125 project.apply plugin: 'com.google.protobuf'
126 project.protobuf {
127 protoc {
128 if (project.hasProperty('protoc')) {
129 path = project.protoc
130 } else {
131 artifact = "com.google.protobuf:protoc:${protocVersion}"
132 }
ZHANG Dapenge1091252016-07-21 16:35:18 -0700133 }
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700134 plugins { grpc { path = javaPluginPath } }
135 generateProtoTasks {
136 all().each { task ->
137 task.dependsOn ':grpc-compiler:java_pluginExecutable'
138 // Delete the generated sources first, so that we can be alerted if they are not re-compiled.
139 task.dependsOn 'deleteGeneratedSource' + task.sourceSet.name
140 // Recompile protos when the codegen has been changed
141 task.inputs.file javaPluginPath
142 // Recompile protos when build.gradle has been changed, because
143 // it's possible the version of protoc has been changed.
144 task.inputs.file "${rootProject.projectDir}/build.gradle"
145 task.plugins { grpc { option 'noversion' } }
146 }
147 }
148 generatedFilesBaseDir = generatedSourcePath
Kun Zhang2cdc5e32015-05-11 16:58:28 -0700149 }
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700150
151 sourceSets.each { sourceSet ->
152 task "deleteGeneratedSource${sourceSet.name}" {
153 doLast {
154 project.delete project.fileTree(dir: generatedSourcePath + '/' + sourceSet.name)
155 }
156 }
157 }
158 } else {
159 // Otherwise, we just use the checked-in generated code.
160 project.sourceSets {
161 main {
162 java {
163 srcDir "${generatedSourcePath}/main/java"
164 srcDir "${generatedSourcePath}/main/javanano"
165 srcDir "${generatedSourcePath}/main/grpc"
166 }
167 }
168 test {
169 java {
170 srcDir "${generatedSourcePath}/test/java"
171 srcDir "${generatedSourcePath}/test/javanano"
172 srcDir "${generatedSourcePath}/test/grpc"
173 }
174 }
175 }
Kun Zhang35f77ee2015-06-22 16:29:30 -0700176 }
177
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700178 [
179 compileJava,
180 compileTestJava,
181 compileJmhJava
182 ].each() {
183 // Protobuf-generated code produces some warnings.
184 // https://github.com/google/protobuf/issues/2718
185 it.options.compilerArgs += [
186 "-Xlint:-cast",
187 "-XepExcludedPaths:.*/src/generated/[^/]+/java/.*",
188 ]
Kun Zhang2cdc5e32015-05-11 16:58:28 -0700189 }
Kun Zhang111f6dd2015-05-05 16:11:27 -0700190 }
191
Eric Anderson65d73c02015-05-21 11:54:04 -0700192 def epoll_suffix = "";
193 if (osdetector.classifier in ["linux-x86_64"]) {
194 // The native code is only pre-compiled on certain platforms.
195 epoll_suffix = ":" + osdetector.classifier
196 }
Jakob Buchgraber7ddcdfd2015-02-13 16:21:53 -0800197 libraries = [
Eric Gribkoff79b24702018-08-09 09:09:21 -0700198 animalsniffer_annotations: "org.codehaus.mojo:animal-sniffer-annotations:1.17",
Eric Anderson15a5ba22018-07-19 13:40:41 -0700199 errorprone: "com.google.errorprone:error_prone_annotations:2.2.0",
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700200 gson: "com.google.code.gson:gson:2.7",
201 guava: "com.google.guava:guava:${guavaVersion}",
202 hpack: 'com.twitter:hpack:0.10.1',
203 javax_annotation: 'javax.annotation:javax.annotation-api:1.2',
204 jsr305: 'com.google.code.findbugs:jsr305:3.0.0',
205 oauth_client: 'com.google.auth:google-auth-library-oauth2-http:0.9.0',
206 google_api_protos: 'com.google.api.grpc:proto-google-common-protos:1.0.0',
207 google_auth_credentials: 'com.google.auth:google-auth-library-credentials:0.9.0',
Jiangtao Li8d6ba232018-08-27 15:27:35 -0700208 google_auth_oauth2_http: 'com.google.auth:google-auth-library-oauth2-http:0.9.0',
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700209 okhttp: 'com.squareup.okhttp:okhttp:2.5.0',
210 okio: 'com.squareup.okio:okio:1.13.0',
211 opencensus_api: "io.opencensus:opencensus-api:${opencensusVersion}",
212 opencensus_contrib_grpc_metrics: "io.opencensus:opencensus-contrib-grpc-metrics:${opencensusVersion}",
213 opencensus_impl: "io.opencensus:opencensus-impl:${opencensusVersion}",
214 opencensus_impl_lite: "io.opencensus:opencensus-impl-lite:${opencensusVersion}",
215 instrumentation_api: 'com.google.instrumentation:instrumentation-api:0.4.3',
216 protobuf: "com.google.protobuf:protobuf-java:${protobufVersion}",
217 protobuf_lite: "com.google.protobuf:protobuf-lite:3.0.1",
218 protoc_lite: "com.google.protobuf:protoc-gen-javalite:3.0.0",
219 protobuf_nano: "com.google.protobuf.nano:protobuf-javanano:${protobufNanoVersion}",
220 protobuf_plugin: 'com.google.protobuf:protobuf-gradle-plugin:0.8.5',
221 protobuf_util: "com.google.protobuf:protobuf-java-util:${protobufVersion}",
222 lang: "org.apache.commons:commons-lang3:3.5",
nathanmittler164b7342014-12-15 09:58:05 -0800223
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700224 netty: "io.netty:netty-codec-http2:[${nettyVersion}]",
225 netty_epoll: "io.netty:netty-transport-native-epoll:${nettyVersion}" + epoll_suffix,
226 netty_proxy_handler: "io.netty:netty-handler-proxy:${nettyVersion}",
Carl Mastrangelo7d455962018-07-20 16:36:00 -0700227 netty_tcnative: 'io.netty:netty-tcnative-boringssl-static:2.0.12.Final',
nathanmittler164b7342014-12-15 09:58:05 -0800228
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700229 conscrypt: 'org.conscrypt:conscrypt-openjdk-uber:1.0.1',
230 re2j: 'com.google.re2j:re2j:1.2',
Eric Anderson7eab0d92018-02-15 17:14:10 -0800231
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700232 // Test dependencies.
233 junit: 'junit:junit:4.12',
234 mockito: 'org.mockito:mockito-core:1.9.5',
Eric Anderson5823fff2018-07-23 14:42:39 -0700235 truth: 'com.google.truth:truth:0.42',
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700236 guava_testlib: 'com.google.guava:guava-testlib:20.0',
Louis Ryana7049bc2016-03-23 13:18:04 -0700237
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700238 // Benchmark dependencies
239 hdrhistogram: 'org.hdrhistogram:HdrHistogram:2.1.10',
240 math: 'org.apache.commons:commons-math3:3.6',
ZHANG Dapengaed886d2016-05-02 14:01:36 -0700241
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700242 // Jetty ALPN dependencies
243 jetty_alpn_agent: 'org.mortbay.jetty.alpn:jetty-alpn-agent:2.0.7'
Jakob Buchgraber7ddcdfd2015-02-13 16:21:53 -0800244 ]
Jakob Buchgraber7ddcdfd2015-02-13 16:21:53 -0800245 }
nathanmittler164b7342014-12-15 09:58:05 -0800246
ZHANG Dapengaed886d2016-05-02 14:01:36 -0700247 // Define a separate configuration for managing the dependency on Jetty ALPN agent.
nmittler74cfe6c2015-05-22 12:25:10 -0700248 configurations {
ZHANG Dapengaed886d2016-05-02 14:01:36 -0700249 alpnagent
Eric Andersona3ff9cd2017-09-18 16:20:18 -0700250
251 compile {
252 // Detect Maven Enforcer's dependencyConvergence failures. We only
253 // care for artifacts used as libraries by others.
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700254 if (!(project.name in [
255 'grpc-benchmarks',
Eric Andersonc30e5092018-07-20 17:59:19 -0700256 'grpc-interop-testing',
257 'grpc-gae-interop-testing-jdk7',
258 'grpc-gae-interop-testing-jdk8',
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700259 ])) {
Eric Andersona3ff9cd2017-09-18 16:20:18 -0700260 resolutionStrategy.failOnVersionConflict()
261 }
262 }
nmittler74cfe6c2015-05-22 12:25:10 -0700263 }
264
nathanmittler164b7342014-12-15 09:58:05 -0800265 dependencies {
266 testCompile libraries.junit,
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700267 libraries.mockito,
268 libraries.truth
nmittler74cfe6c2015-05-22 12:25:10 -0700269
ZHANG Dapengaed886d2016-05-02 14:01:36 -0700270 // Configuration for modules that use Jetty ALPN agent
271 alpnagent libraries.jetty_alpn_agent
Eric Anderson6164b7b2017-08-26 17:10:18 -0700272
273 jmh 'org.openjdk.jmh:jmh-core:1.19',
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700274 'org.openjdk.jmh:jmh-generator-bytecode:1.19'
nathanmittler164b7342014-12-15 09:58:05 -0800275 }
Eric Anderson192144e2015-03-02 13:31:14 -0800276
277 signing {
278 required false
279 sign configurations.archives
280 }
281
nmittler732cfc02015-03-03 07:59:13 -0800282 // Disable JavaDoc doclint on Java 8. It's annoying.
283 if (JavaVersion.current().isJava8Compatible()) {
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700284 allprojects {
285 tasks.withType(Javadoc) {
286 options.addStringOption('Xdoclint:none', '-quiet')
287 }
nmittler732cfc02015-03-03 07:59:13 -0800288 }
nmittler732cfc02015-03-03 07:59:13 -0800289 }
290
zpencer37e6f5f2018-07-19 13:35:27 -0700291 // For jdk10 we must explicitly choose between html4 and html5, otherwise we get a warning
292 if (JavaVersion.current().isJava10Compatible()) {
293 allprojects {
294 tasks.withType(Javadoc) {
295 options.addBooleanOption('html4', true)
296 }
297 }
298 }
299
Eric Andersonc3e8dae2015-01-30 14:58:07 -0800300 checkstyle {
Eric Anderson8188a3e2017-07-12 10:53:50 -0700301 configDir = file("$rootDir/buildscripts")
Eric Anderson6ab27ab2016-04-18 09:15:25 -0700302 toolVersion = "6.17"
Eric Andersonad44f0a2015-05-05 08:54:51 -0700303 ignoreFailures = false
Eric Anderson26141b42015-03-21 10:59:17 -0700304 if (rootProject.hasProperty("checkstyle.ignoreFailures")) {
305 ignoreFailures = rootProject.properties["checkstyle.ignoreFailures"].toBoolean()
306 }
Eric Andersonc3e8dae2015-01-30 14:58:07 -0800307 }
308
309 checkstyleMain {
Kun Zhang693a7d22015-05-06 11:35:08 -0700310 source = fileTree(dir: "src/main", include: "**/*.java")
Eric Andersonc3e8dae2015-01-30 14:58:07 -0800311 }
312
313 checkstyleTest {
Kun Zhang693a7d22015-05-06 11:35:08 -0700314 source = fileTree(dir: "src/test", include: "**/*.java")
Eric Andersonc3e8dae2015-01-30 14:58:07 -0800315 }
316
zpencer4f19f142018-03-13 17:46:03 -0700317 // invoke jmh on a single benchmark class like so:
318 // ./gradlew -PjmhIncludeSingleClass=StatsTraceContextBenchmark clean :grpc-core:jmh
Eric Anderson6164b7b2017-08-26 17:10:18 -0700319 jmh {
320 warmupIterations = 10
321 iterations = 10
322 fork = 1
323 // None of our benchmarks need the tests, and we have pseudo-circular
324 // dependencies that break when including them. (context's testCompile
325 // depends on core; core's testCompile depends on testing)
326 includeTests = false
zpencer4f19f142018-03-13 17:46:03 -0700327 if (project.hasProperty('jmhIncludeSingleClass')) {
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700328 include = [
329 project.property('jmhIncludeSingleClass')
330 ]
zpencer4f19f142018-03-13 17:46:03 -0700331 }
Eric Anderson6164b7b2017-08-26 17:10:18 -0700332 }
333
Eric Anderson192144e2015-03-02 13:31:14 -0800334 task javadocJar(type: Jar) {
335 classifier = 'javadoc'
336 from javadoc
337 }
338
339 task sourcesJar(type: Jar) {
340 classifier = 'sources'
341 from sourceSets.main.allSource
342 }
343
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700344 artifacts { archives javadocJar, sourcesJar }
Eric Anderson192144e2015-03-02 13:31:14 -0800345
346 uploadArchives.repositories.mavenDeployer {
347 beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
Eric Anderson4f4cedf2017-12-14 16:51:14 -0800348 if (rootProject.hasProperty('repositoryDir')) {
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700349 repository(url: new File(rootProject.repositoryDir).toURI())
Eric Anderson4f4cedf2017-12-14 16:51:14 -0800350 } else {
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700351 String stagingUrl
352 if (rootProject.hasProperty('repositoryId')) {
353 stagingUrl = 'https://oss.sonatype.org/service/local/staging/deployByRepositoryId/' +
354 rootProject.repositoryId
355 } else {
356 stagingUrl = 'https://oss.sonatype.org/service/local/staging/deploy/maven2/'
zpencer89259212018-02-13 11:17:53 -0800357 }
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700358 def configureAuth = {
359 if (rootProject.hasProperty('ossrhUsername') && rootProject.hasProperty('ossrhPassword')) {
360 authentication(userName: rootProject.ossrhUsername, password: rootProject.ossrhPassword)
361 }
362 }
363 repository(url: stagingUrl, configureAuth)
364 snapshotRepository(url: 'https://oss.sonatype.org/content/repositories/snapshots/', configureAuth)
Eric Anderson4f4cedf2017-12-14 16:51:14 -0800365 }
Eric Anderson192144e2015-03-02 13:31:14 -0800366 }
zpencerb07c70a2017-10-06 10:44:58 -0700367 uploadArchives.onlyIf { !name.contains("grpc-gae-interop-testing") }
Eric Anderson192144e2015-03-02 13:31:14 -0800368
369 [
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700370 install.repositories.mavenInstaller,
371 uploadArchives.repositories.mavenDeployer,
Eric Anderson192144e2015-03-02 13:31:14 -0800372 ]*.pom*.whenConfigured { pom ->
373 pom.project {
Eric Anderson7e8a02c2015-03-12 17:03:01 -0700374 name "$project.group:$project.name"
Eric Anderson192144e2015-03-02 13:31:14 -0800375 description project.description
376 url 'https://github.com/grpc/grpc-java'
377
378 scm {
Eric Andersonb7354952016-04-08 08:37:07 -0700379 connection 'scm:git:https://github.com/grpc/grpc-java.git'
380 developerConnection 'scm:git:git@github.com:grpc/grpc-java.git'
Eric Anderson192144e2015-03-02 13:31:14 -0800381 url 'https://github.com/grpc/grpc-java'
382 }
383
384 licenses {
385 license {
Carl Mastrangelo7b97df02017-05-31 14:37:42 -0700386 name 'Apache 2.0'
387 url 'https://opensource.org/licenses/Apache-2.0'
Eric Anderson192144e2015-03-02 13:31:14 -0800388 }
389 }
Eric Anderson7e8a02c2015-03-12 17:03:01 -0700390
391 developers {
392 developer {
393 id "grpc.io"
394 name "gRPC Contributors"
395 email "grpc-io@googlegroups.com"
Mehrdad Afshari8ce0bc22017-07-10 22:48:17 +0000396 url "https://grpc.io/"
Eric Anderson7e8a02c2015-03-12 17:03:01 -0700397 // https://issues.gradle.org/browse/GRADLE-2719
Carl Mastrangelo3bfd6302017-05-31 13:29:01 -0700398 organization = "gRPC Authors"
Eric Anderson7e8a02c2015-03-12 17:03:01 -0700399 organizationUrl "https://www.google.com"
400 }
401 }
Eric Anderson192144e2015-03-02 13:31:14 -0800402 }
Eric Anderson90db93b2016-04-08 13:47:30 -0700403 if (!(project.name in
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700404 [
405 "grpc-stub",
406 "grpc-protobuf",
407 "grpc-protobuf-lite",
408 "grpc-protobuf-nano"
409 ])) {
410 def core = pom.dependencies.find {dep -> dep.artifactId == 'grpc-core'}
411 if (core != null) {
412 // Depend on specific version of grpc-core because internal package is unstable
413 core.version = "[" + core.version + "]"
414 }
Eric Anderson90db93b2016-04-08 13:47:30 -0700415 }
Eric Anderson192144e2015-03-02 13:31:14 -0800416 }
Kun Zhang3ddd1d52015-04-22 10:02:19 -0700417 // At a test failure, log the stack trace to the console so that we don't
418 // have to open the HTML in a browser.
419 test {
420 testLogging {
421 exceptionFormat = 'full'
nmittler4ee2a652015-06-01 16:20:08 -0700422 showExceptions true
423 showCauses true
424 showStackTraces true
Kun Zhang3ddd1d52015-04-22 10:02:19 -0700425 }
Eric Anderson56dca032016-02-12 08:48:41 -0800426 maxHeapSize = '1500m'
Kun Zhang3ddd1d52015-04-22 10:02:19 -0700427 }
nathanmittler164b7342014-12-15 09:58:05 -0800428}
zpencera62108a2017-09-27 08:31:43 -0700429
430// Run with: ./gradlew japicmp --continue
431def baselineGrpcVersion = '1.6.1'
432def publicApiSubprojects = [
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700433 // TODO: uncomment after grpc-alts artifact is published.
434 // ':grpc-alts',
435 ':grpc-auth',
436 ':grpc-context',
437 ':grpc-core',
438 ':grpc-grpclb',
439 ':grpc-netty',
440 ':grpc-okhttp',
441 ':grpc-protobuf',
442 ':grpc-protobuf-lite',
443 ':grpc-protobuf-nano',
444 ':grpc-stub',
445 ':grpc-testing',
zpencera62108a2017-09-27 08:31:43 -0700446]
447
448publicApiSubprojects.each { name ->
449 project(":$name") {
450 apply plugin: 'me.champeau.gradle.japicmp'
451
452 // Get the baseline version's jar for this subproject
453 File baselineArtifact = null
454 // Use a detached configuration, otherwise the current version's jar will take precedence
455 // over the baseline jar.
456 // A necessary hack, the intuitive thing does NOT work:
457 // https://discuss.gradle.org/t/is-the-default-configuration-leaking-into-independent-configurations/2088/6
458 def oldGroup = project.group
459 try {
460 project.group = 'virtual_group_for_japicmp'
461 String depModule = "io.grpc:${project.name}:${baselineGrpcVersion}@jar"
462 String depJar = "${project.name}-${baselineGrpcVersion}.jar"
463 Configuration configuration = configurations.detachedConfiguration(
464 dependencies.create(depModule)
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700465 )
zpencera62108a2017-09-27 08:31:43 -0700466 baselineArtifact = files(configuration.files).filter {
467 it.name.equals(depJar)
468 }.singleFile
469 } finally {
470 project.group = oldGroup
471 }
472
473 // Add a japicmp task that compares the current .jar with baseline .jar
474 task japicmp(type: me.champeau.gradle.japicmp.JapicmpTask, dependsOn: jar) {
475 oldClasspath = files(baselineArtifact)
476 newClasspath = files(jar.archivePath)
477 onlyBinaryIncompatibleModified = false
478 // Be quiet about things that did not change
479 onlyModified = true
480 // This task should fail if there are incompatible changes
481 failOnModification = true
482 ignoreMissingClasses = true
483 htmlOutputFile = file("$buildDir/reports/japi.html")
484
485 packageExcludes = ['io.grpc.internal']
486
487 // Also break on source incompatible changes, not just binary.
488 // Eg adding abstract method to public class.
489 // TODO(zpencer): enable after japicmp-gradle-plugin/pull/14
490 // breakOnSourceIncompatibility = true
491
492 // Ignore any classes or methods marked @ExperimentalApi
493 // TODO(zpencer): enable after japicmp-gradle-plugin/pull/15
494 // annotationExcludes = ['@io.grpc.ExperimentalApi']
495 }
496 }
497}
ZHANG Dapeng5ce10f02018-06-11 18:35:18 -0700498
499// format checkers
500apply plugin: "com.diffplug.gradle.spotless"
501apply plugin: 'groovy'
502spotless {
503 groovyGradle {
504 target '**/*.gradle'
505 greclipse()
506 indentWithSpaces()
507 paddedCell()
508 }
509}