1apply plugin: 'java'
2apply plugin: 'com.google.protobuf'
3
4buildscript {
5    repositories {
6        maven { // The google mirror is less flaky than mavenCentral()
7            url "https://maven-central.storage-download.googleapis.com/repos/central/data/" }
8    }
9    dependencies { // ASSUMES GRADLE 2.12 OR HIGHER. Use plugin version 0.7.5 with earlier
10        // gradle versions
11        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.5' }
12}
13
14repositories {
15    maven { // The google mirror is less flaky than mavenCentral()
16        url "https://maven-central.storage-download.googleapis.com/repos/central/data/" }
17    mavenLocal()
18}
19
20// IMPORTANT: You probably want the non-SNAPSHOT version of gRPC. Make sure you
21// are looking at a tagged version of the example and not "master"!
22
23// Feel free to delete the comment at the next line. It is just for safely
24// updating the version in our release process.
25def grpcVersion = '1.16.0-SNAPSHOT' // CURRENT_GRPC_VERSION
26def nettyTcNativeVersion = '2.0.7.Final'
27def protobufVersion = '3.5.1'
28def protocVersion = '3.5.1-1'
29
30dependencies {
31    compile "com.google.api.grpc:proto-google-common-protos:1.0.0"
32    compile "io.grpc:grpc-alts:${grpcVersion}"
33    compile "io.grpc:grpc-netty-shaded:${grpcVersion}"
34    compile "io.grpc:grpc-protobuf:${grpcVersion}"
35    compile "io.grpc:grpc-stub:${grpcVersion}"
36    compileOnly "javax.annotation:javax.annotation-api:1.2"
37
38    // Used in HelloWorldServerTls
39    compile "io.grpc:grpc-netty:${grpcVersion}"
40    compile "io.netty:netty-tcnative-boringssl-static:${nettyTcNativeVersion}"
41
42    compile "com.google.protobuf:protobuf-java-util:${protobufVersion}"
43
44    testCompile "io.grpc:grpc-testing:${grpcVersion}"
45    testCompile "junit:junit:4.12"
46    testCompile "org.mockito:mockito-core:1.9.5"
47}
48
49protobuf {
50    protoc { artifact = "com.google.protobuf:protoc:${protocVersion}" }
51    plugins {
52        grpc { artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}" }
53    }
54    generateProtoTasks {
55        all()*.plugins { grpc {} }
56    }
57}
58
59// Inform IDEs like IntelliJ IDEA, Eclipse or NetBeans about the generated code.
60sourceSets {
61    main {
62        java {
63            srcDirs 'build/generated/source/proto/main/grpc'
64            srcDirs 'build/generated/source/proto/main/java'
65        }
66    }
67}
68
69// Generate IntelliJ IDEA's .idea & .iml project files
70apply plugin: 'idea'
71
72// Provide convenience executables for trying out the examples.
73apply plugin: 'application'
74
75startScripts.enabled = false
76
77task routeGuideServer(type: CreateStartScripts) {
78    mainClassName = 'io.grpc.examples.routeguide.RouteGuideServer'
79    applicationName = 'route-guide-server'
80    outputDir = new File(project.buildDir, 'tmp')
81    classpath = jar.outputs.files + project.configurations.runtime
82}
83
84task routeGuideClient(type: CreateStartScripts) {
85    mainClassName = 'io.grpc.examples.routeguide.RouteGuideClient'
86    applicationName = 'route-guide-client'
87    outputDir = new File(project.buildDir, 'tmp')
88    classpath = jar.outputs.files + project.configurations.runtime
89}
90
91task helloWorldServer(type: CreateStartScripts) {
92    mainClassName = 'io.grpc.examples.helloworld.HelloWorldServer'
93    applicationName = 'hello-world-server'
94    outputDir = new File(project.buildDir, 'tmp')
95    classpath = jar.outputs.files + project.configurations.runtime
96}
97
98task helloWorldClient(type: CreateStartScripts) {
99    mainClassName = 'io.grpc.examples.helloworld.HelloWorldClient'
100    applicationName = 'hello-world-client'
101    outputDir = new File(project.buildDir, 'tmp')
102    classpath = jar.outputs.files + project.configurations.runtime
103}
104
105task helloWorldAltsServer(type: CreateStartScripts) {
106    mainClassName = 'io.grpc.examples.alts.HelloWorldAltsServer'
107    applicationName = 'hello-world-alts-server'
108    outputDir = new File(project.buildDir, 'tmp')
109    classpath = jar.outputs.files + project.configurations.runtime
110}
111
112task helloWorldAltsClient(type: CreateStartScripts) {
113    mainClassName = 'io.grpc.examples.alts.HelloWorldAltsClient'
114    applicationName = 'hello-world-alts-client'
115    outputDir = new File(project.buildDir, 'tmp')
116    classpath = jar.outputs.files + project.configurations.runtime
117}
118
119task helloWorldTlsServer(type: CreateStartScripts) {
120    mainClassName = 'io.grpc.examples.helloworldtls.HelloWorldServerTls'
121    applicationName = 'hello-world-tls-server'
122    outputDir = new File(project.buildDir, 'tmp')
123    classpath = jar.outputs.files + project.configurations.runtime
124}
125
126task helloWorldTlsClient(type: CreateStartScripts) {
127    mainClassName = 'io.grpc.examples.helloworldtls.HelloWorldClientTls'
128    applicationName = 'hello-world-tls-client'
129    outputDir = new File(project.buildDir, 'tmp')
130    classpath = jar.outputs.files + project.configurations.runtime
131}
132
133task compressingHelloWorldClient(type: CreateStartScripts) {
134    mainClassName = 'io.grpc.examples.experimental.CompressingHelloWorldClient'
135    applicationName = 'compressing-hello-world-client'
136    outputDir = new File(project.buildDir, 'tmp')
137    classpath = jar.outputs.files + project.configurations.runtime
138}
139
140applicationDistribution.into('bin') {
141    from(routeGuideServer)
142    from(routeGuideClient)
143    from(helloWorldServer)
144    from(helloWorldClient)
145    from(helloWorldAltsServer)
146    from(helloWorldAltsClient)
147    from(helloWorldTlsServer)
148    from(helloWorldTlsClient)
149    from(compressingHelloWorldClient)
150    fileMode = 0755
151}
152