instrumentation.gradle 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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 {
  17. afterEvaluate { Project subProj ->
  18. if (subProj.getPlugins().hasPlugin('java')) {
  19. // Make it so all instrumentation subproject tests can be run with a single command.
  20. instr_project.tasks.test.dependsOn(subProj.tasks.test)
  21. instr_project.dependencies {
  22. compile(project(subProj.getPath()))
  23. }
  24. }
  25. }
  26. }
  27. dependencies {
  28. compile(project(':auto-tooling')) {
  29. exclude module: ':auto-bootstrap'
  30. }
  31. }
  32. configurations {
  33. // exclude bootstrap dependencies from shadowJar
  34. runtime.exclude module: deps.slf4j
  35. runtime.exclude group: 'org.slf4j'
  36. runtime.exclude group: 'io.opentelemetry', module: 'opentelemetry-api'
  37. }
  38. // need to perform shading in two steps in order to avoid shading java.util.logging.Logger
  39. // in the java-util-logging instrumentation since that instrumentation needs to
  40. // reference unshaded java.util.logging.Logger
  41. // (java.util.logging.Logger shading is not needed in any of the instrumentation modules,
  42. // but it is needed for the dependencies, e.g. guava, which use java.util.logging.Logger)
  43. task shadowJarStep1(type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar) {
  44. archiveClassifier = 'step1'
  45. destinationDirectory = file("${project.buildDir}/step1")
  46. configurations = [project.configurations.runtime]
  47. dependencies {
  48. exclude(project(':instrumentation:java-util-logging'))
  49. }
  50. // rewrite dependencies calling Logger.getLogger
  51. relocate 'java.util.logging.Logger', 'io.opentelemetry.auto.bootstrap.PatchLogger'
  52. }
  53. shadowJar {
  54. dependsOn shadowJarStep1
  55. from {
  56. zipTree(shadowJarStep1.archiveFile)
  57. }
  58. mergeServiceFiles()
  59. exclude '**/module-info.class'
  60. dependencies {
  61. exclude(dependency("org.projectlombok:lombok:$versions.lombok"))
  62. }
  63. // Prevents conflict with other SLF4J instances. Important for premain.
  64. relocate 'org.slf4j', 'io.opentelemetry.auto.slf4j'
  65. dependencies {
  66. exclude(project(':auto-bootstrap'))
  67. }
  68. // relocate OpenTelemetry API usage
  69. relocate "io.opentelemetry.OpenTelemetry", "io.opentelemetry.auto.shaded.io.opentelemetry.OpenTelemetry"
  70. relocate "io.opentelemetry.common", "io.opentelemetry.auto.shaded.io.opentelemetry.common"
  71. relocate "io.opentelemetry.context", "io.opentelemetry.auto.shaded.io.opentelemetry.context"
  72. relocate "io.opentelemetry.correlationcontext", "io.opentelemetry.auto.shaded.io.opentelemetry.correlationcontext"
  73. relocate "io.opentelemetry.internal", "io.opentelemetry.auto.shaded.io.opentelemetry.internal"
  74. relocate "io.opentelemetry.metrics", "io.opentelemetry.auto.shaded.io.opentelemetry.metrics"
  75. relocate "io.opentelemetry.trace", "io.opentelemetry.auto.shaded.io.opentelemetry.trace"
  76. // relocate OpenTelemetry API dependency usage
  77. relocate "io.grpc.Context", "io.opentelemetry.auto.shaded.io.grpc.Context"
  78. // this is for instrumentation on opentelemetry-api itself
  79. relocate "unshaded.io.opentelemetry", "io.opentelemetry"
  80. relocate "unshaded.io.grpc", "io.grpc"
  81. }