instrumentation.gradle 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. // this project will run in isolation under the agent's classloader
  2. buildscript {
  3. repositories {
  4. mavenCentral()
  5. }
  6. dependencies {
  7. classpath "net.bytebuddy:byte-buddy-gradle-plugin:${versions.bytebuddy}"
  8. classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${versions.kotlin}"
  9. }
  10. }
  11. plugins {
  12. id "com.github.johnrengelman.shadow"
  13. }
  14. apply from: "${rootDir}/gradle/java.gradle"
  15. Project instr_project = project
  16. subprojects { Project subProj ->
  17. apply plugin: "net.bytebuddy.byte-buddy"
  18. apply plugin: 'muzzle'
  19. subProj.byteBuddy {
  20. transformation {
  21. // Applying NoOp optimizes build by applying bytebuddy plugin to only compileJava task
  22. tasks = ['compileJava', 'compileScala', 'compileKotlin']
  23. plugin = 'io.opentelemetry.auto.tooling.muzzle.MuzzleGradlePlugin$NoOp'
  24. }
  25. }
  26. subProj.afterEvaluate {
  27. subProj.byteBuddy {
  28. transformation {
  29. tasks = ['compileJava', 'compileScala', 'compileKotlin']
  30. plugin = 'io.opentelemetry.auto.tooling.muzzle.MuzzleGradlePlugin'
  31. classPath = project(':auto-tooling').configurations.instrumentationMuzzle + subProj.configurations.compile + subProj.sourceSets.main.output
  32. }
  33. }
  34. String jdkCompile = null
  35. if (project.hasProperty('minJavaVersionForTests') && project.getProperty('minJavaVersionForTests') != JavaVersion.VERSION_1_7) {
  36. def version = JavaVersion.toVersion(project.getProperty('minJavaVersionForTests'))
  37. def name = "java$version.majorVersion"
  38. jdkCompile = "main_${name}Compile"
  39. }
  40. dependencies {
  41. // Apply common dependencies for instrumentation.
  42. compile(project(':auto-tooling')) {
  43. // OpenTelemetry SDK is not needed for compilation, and :opentelemetry-sdk-shaded-for-testing
  44. // is brought in for tests by project(:testing) below
  45. exclude group: 'io.opentelemetry', module: 'opentelemetry-sdk'
  46. }
  47. compile deps.bytebuddy
  48. if (jdkCompile) {
  49. "$jdkCompile"(project(':auto-tooling')) {
  50. // OpenTelemetry SDK is not needed for compilation, and :opentelemetry-sdk-shaded-for-testing
  51. // is brought in for tests by project(:testing) below
  52. exclude group: 'io.opentelemetry', module: 'opentelemetry-sdk'
  53. }
  54. "$jdkCompile" deps.bytebuddy
  55. }
  56. annotationProcessor deps.autoservice
  57. implementation deps.autoservice
  58. testCompile project(':testing')
  59. testAnnotationProcessor deps.autoservice
  60. testImplementation deps.autoservice
  61. }
  62. // Make it so all instrumentation subproject tests can be run with a single command.
  63. instr_project.tasks.test.dependsOn(subProj.tasks.test)
  64. }
  65. instr_project.dependencies {
  66. compile(project(subProj.getPath()))
  67. }
  68. }
  69. dependencies {
  70. compile(project(':auto-tooling')) {
  71. exclude module: ':auto-bootstrap'
  72. }
  73. // TODO: including the jaeger exporter doubles the agent jar file size, would be better for it to be optional component
  74. // (but this can wait until after 0.1.0)
  75. compile group: 'io.opentelemetry', name: 'opentelemetry-exporters-jaeger', version: versions.opentelemetry
  76. compile group: 'io.grpc', name: 'grpc-netty', version: '1.24.0'
  77. }
  78. configurations {
  79. // exclude bootstrap dependencies from shadowJar
  80. runtime.exclude module: deps.slf4j
  81. runtime.exclude group: 'org.slf4j'
  82. runtime.exclude group: 'io.opentelemetry', module: 'opentelemetry-api'
  83. }
  84. shadowJar {
  85. mergeServiceFiles()
  86. exclude '**/module-info.class'
  87. dependencies {
  88. exclude(dependency("org.projectlombok:lombok:$versions.lombok"))
  89. }
  90. // Prevents conflict with other SLF4J instances. Important for premain.
  91. relocate 'org.slf4j', 'io.opentelemetry.auto.slf4j'
  92. // rewrite dependencies calling Logger.getLogger
  93. relocate 'java.util.logging.Logger', 'io.opentelemetry.auto.bootstrap.PatchLogger'
  94. dependencies {
  95. exclude(project(':auto-bootstrap'))
  96. }
  97. // relocate OpenTelemetry API usage
  98. relocate "io.opentelemetry.OpenTelemetry", "io.opentelemetry.auto.shaded.io.opentelemetry.OpenTelemetry"
  99. relocate "io.opentelemetry.context", "io.opentelemetry.auto.shaded.io.opentelemetry.context"
  100. relocate "io.opentelemetry.distributedcontext", "io.opentelemetry.auto.shaded.io.opentelemetry.distributedcontext"
  101. relocate "io.opentelemetry.internal", "io.opentelemetry.auto.shaded.io.opentelemetry.internal"
  102. relocate "io.opentelemetry.metrics", "io.opentelemetry.auto.shaded.io.opentelemetry.metrics"
  103. relocate "io.opentelemetry.trace", "io.opentelemetry.auto.shaded.io.opentelemetry.trace"
  104. }