mirror of https://github.com/grpc/grpc-java.git
124 lines
4.3 KiB
Groovy
124 lines
4.3 KiB
Groovy
buildscript {
|
|
dependencies {
|
|
classpath 'com.google.guava:guava:30.0-android'
|
|
}
|
|
}
|
|
|
|
plugins {
|
|
id "java-library"
|
|
id "java-test-fixtures"
|
|
id "maven-publish"
|
|
|
|
id "me.champeau.gradle.japicmp"
|
|
id "me.champeau.jmh"
|
|
id "ru.vyarus.animalsniffer"
|
|
}
|
|
|
|
import static java.nio.charset.StandardCharsets.US_ASCII;
|
|
|
|
import com.google.common.primitives.Bytes;
|
|
|
|
description = 'gRPC: Core'
|
|
|
|
dependencies {
|
|
api project(':grpc-api')
|
|
implementation libraries.gson,
|
|
libraries.android.annotations,
|
|
libraries.animalsniffer.annotations,
|
|
libraries.errorprone.annotations,
|
|
libraries.guava,
|
|
libraries.perfmark.api
|
|
testFixturesApi libraries.junit
|
|
testFixturesImplementation libraries.guava,
|
|
libraries.mockito.core,
|
|
libraries.truth,
|
|
project(':grpc-testing')
|
|
testImplementation testFixtures(project(':grpc-context')),
|
|
testFixtures(project(':grpc-api')),
|
|
project(':grpc-testing'),
|
|
project(':grpc-grpclb')
|
|
testImplementation (libraries.guava.testlib) {
|
|
exclude group: 'junit', module: 'junit'
|
|
}
|
|
|
|
testRuntimeOnly project(':grpc-census')
|
|
|
|
jmh project(':grpc-testing')
|
|
|
|
signature libraries.signature.java
|
|
signature libraries.signature.android
|
|
}
|
|
|
|
tasks.named("javadoc").configure {
|
|
exclude 'io/grpc/internal/**'
|
|
exclude 'io/grpc/inprocess/Internal*'
|
|
// Disabled until kinda stable.
|
|
exclude 'io/grpc/perfmark/**'
|
|
}
|
|
|
|
animalsniffer {
|
|
// Don't check sourceSets.jmh
|
|
sourceSets = [
|
|
sourceSets.main,
|
|
sourceSets.test
|
|
]
|
|
}
|
|
|
|
components.java.withVariantsFromConfiguration(configurations.testFixturesApiElements) { skip() }
|
|
components.java.withVariantsFromConfiguration(configurations.testFixturesRuntimeElements) { skip() }
|
|
|
|
import net.ltgt.gradle.errorprone.CheckSeverity
|
|
|
|
def replaceBytes(byte[] haystack, byte[] needle, byte[] replacement) {
|
|
int i = Bytes.indexOf(haystack, needle);
|
|
assert i != -1;
|
|
byte[] result = new byte[haystack.length - needle.length + replacement.length];
|
|
System.arraycopy(haystack, 0, result, 0, i);
|
|
System.arraycopy(replacement, 0, result, i, replacement.length);
|
|
System.arraycopy(haystack, i + needle.length, result, i + replacement.length, haystack.length - i - needle.length);
|
|
return result;
|
|
}
|
|
|
|
def bigEndianShortBytes(int value) {
|
|
return [value >> 8, value & 0xFF] as byte[];
|
|
}
|
|
|
|
def replaceConstant(File file, String needle, String replacement) {
|
|
// CONSTANT_Utf8_info. https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.4.7
|
|
byte[] needleBytes = Bytes.concat(
|
|
[1] as byte[], bigEndianShortBytes(needle.length()), needle.getBytes(US_ASCII));
|
|
byte[] replacementBytes = Bytes.concat(
|
|
[1] as byte[], bigEndianShortBytes(replacement.length()), replacement.getBytes(US_ASCII));
|
|
file.setBytes(replaceBytes(file.getBytes(), needleBytes, replacementBytes));
|
|
}
|
|
|
|
plugins.withId("java") {
|
|
tasks.named("compileJava").configure {
|
|
doLast {
|
|
// Replace value of Signature Attribute.
|
|
// https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.9
|
|
//
|
|
// Have new compilations compile against a public class, without breaking the internal
|
|
// ABI for the moment. After giving users some time to recompile, this should be removed
|
|
// and #7211 can continue. When this is removed, at the very least the generics need to
|
|
// be changed to avoid <? extends io.grpc.internal.*>.
|
|
project.replaceConstant(
|
|
destinationDirectory.file(
|
|
"io/grpc/internal/AbstractManagedChannelImplBuilder.class").get().getAsFile(),
|
|
"<T:Lio/grpc/internal/AbstractManagedChannelImplBuilder<TT;>;>Lio/grpc/ManagedChannelBuilder<TT;>;",
|
|
"<T:Lio/grpc/ManagedChannelBuilder<TT;>;>Lio/grpc/ManagedChannelBuilder<TT;>;");
|
|
project.replaceConstant(
|
|
destinationDirectory.file(
|
|
"io/grpc/internal/AbstractServerImplBuilder.class").get().getAsFile(),
|
|
"<T:Lio/grpc/internal/AbstractServerImplBuilder<TT;>;>Lio/grpc/ServerBuilder<TT;>;",
|
|
"<T:Lio/grpc/ServerBuilder<TT;>;>Lio/grpc/ServerBuilder<TT;>;");
|
|
}
|
|
}
|
|
}
|
|
|
|
tasks.register("versionFile") {
|
|
doLast {
|
|
new File(buildDir, "version").write("${project.version}\n")
|
|
}
|
|
}
|