From 99e82d70fa5ec2cf3a7fcd5058a25a6eaeb47262 Mon Sep 17 00:00:00 2001 From: Nikita Salnikov-Tarnovski Date: Sat, 4 Dec 2021 19:55:30 +0200 Subject: [PATCH] Make gradle cache work when used from different locations (#4794) --- .../kotlin/otel.java-conventions.gradle.kts | 14 ++++++++-- ...strumentation.muzzle-generation.gradle.kts | 11 +++++++- .../gwt-2.0/javaagent/build.gradle.kts | 28 +++++++++---------- javaagent/build.gradle.kts | 16 +++++++---- testing/agent-for-testing/build.gradle.kts | 15 ++++++++-- 5 files changed, 58 insertions(+), 26 deletions(-) diff --git a/conventions/src/main/kotlin/otel.java-conventions.gradle.kts b/conventions/src/main/kotlin/otel.java-conventions.gradle.kts index b01d760db5..7938b167df 100644 --- a/conventions/src/main/kotlin/otel.java-conventions.gradle.kts +++ b/conventions/src/main/kotlin/otel.java-conventions.gradle.kts @@ -213,11 +213,9 @@ tasks.withType().configureEach { jvmArgs("-Dotel.java.disabled.resource.providers=${resourceClassesCsv}") val trustStore = project(":testing-common").file("src/misc/testing-keystore.p12") - inputs.file(trustStore) // Work around payara not working when this is set for some reason. if (project.name != "jaxrs-2.0-payara-testing") { - jvmArgs("-Djavax.net.ssl.trustStore=${trustStore.absolutePath}") - jvmArgs("-Djavax.net.ssl.trustStorePassword=testing") + jvmArgumentProviders.add(KeystoreArgumentsProvider(trustStore)) } // All tests must complete within 15 minutes. @@ -238,6 +236,16 @@ tasks.withType().configureEach { } } +class KeystoreArgumentsProvider( + @InputFile + @PathSensitive(PathSensitivity.RELATIVE) + val trustStore: File +) : CommandLineArgumentProvider { + override fun asArguments(): Iterable = listOf( + "-Djavax.net.ssl.trustStore=${trustStore.absolutePath}", + "-Djavax.net.ssl.trustStorePassword=testing") +} + afterEvaluate { val testJavaVersion = gradle.startParameter.projectProperties["testJavaVersion"]?.let(JavaVersion::toVersion) val useJ9 = gradle.startParameter.projectProperties["testJavaVM"]?.run { this == "openj9" } diff --git a/gradle-plugins/src/main/kotlin/io.opentelemetry.instrumentation.muzzle-generation.gradle.kts b/gradle-plugins/src/main/kotlin/io.opentelemetry.instrumentation.muzzle-generation.gradle.kts index ebfdaec5b4..14bfd6352b 100644 --- a/gradle-plugins/src/main/kotlin/io.opentelemetry.instrumentation.muzzle-generation.gradle.kts +++ b/gradle-plugins/src/main/kotlin/io.opentelemetry.instrumentation.muzzle-generation.gradle.kts @@ -64,7 +64,7 @@ tasks { fun createLanguageTask( compileTaskProvider: TaskProvider<*>, name: String): TaskProvider<*> { - return tasks.register(name) { + return tasks.register(name) { setGroup("Byte Buddy") outputs.cacheIf { true } var transformationClassPath = inputClasspath @@ -91,3 +91,12 @@ fun createTransformation(classPath: FileCollection, pluginClassName: String): Tr plugin = ClasspathByteBuddyPlugin::class.java } } + +//TODO remove when https://github.com/raphw/byte-buddy/issues/1169 is fixed +open class ByteBuddyTask : ByteBuddySimpleTask() { + @InputDirectory + @PathSensitive(PathSensitivity.RELATIVE) + override fun getSource(): File? { + return super.getSource() + } +} diff --git a/instrumentation/gwt-2.0/javaagent/build.gradle.kts b/instrumentation/gwt-2.0/javaagent/build.gradle.kts index 42bae2918b..ddcf1801ad 100644 --- a/instrumentation/gwt-2.0/javaagent/build.gradle.kts +++ b/instrumentation/gwt-2.0/javaagent/build.gradle.kts @@ -45,38 +45,38 @@ dependencies { testImplementation("org.eclipse.jetty:jetty-webapp:9.4.35.v20201120") } -val warDir = "$buildDir/testapp/war" +val warDir = file("$buildDir/testapp/war") val launcher = javaToolchains.launcherFor { languageVersion.set(JavaLanguageVersion.of(8)) } +class CompilerArgumentsProvider : CommandLineArgumentProvider { + override fun asArguments(): Iterable = listOf( + "test.gwt.Greeting", // gwt module + "-war", "$buildDir/testapp/war", + "-logLevel", "INFO", + "-localWorkers", "2", + "-compileReport", + "-extra", "$buildDir/testapp/extra", + "-draftCompile" // makes compile a bit faster + ) +} + tasks { val compileGwt by registering(JavaExec::class) { dependsOn(classes) // versions before 2.9 require java8 javaLauncher.set(launcher) - val extraDir = "$buildDir/testapp/extra" - outputs.cacheIf { true } - - outputs.dir(extraDir) outputs.dir(warDir) mainClass.set("com.google.gwt.dev.Compiler") classpath(sourceSets["testapp"].java.srcDirs, sourceSets["testapp"].compileClasspath) - args( - "test.gwt.Greeting", // gwt module - "-war", warDir, - "-logLevel", "INFO", - "-localWorkers", "2", - "-compileReport", - "-extra", extraDir, - "-draftCompile" // makes compile a bit faster - ) + argumentProviders.add(CompilerArgumentsProvider()) } val copyTestWebapp by registering(Copy::class) { diff --git a/javaagent/build.gradle.kts b/javaagent/build.gradle.kts index e74f2c857c..82bd5af3ec 100644 --- a/javaagent/build.gradle.kts +++ b/javaagent/build.gradle.kts @@ -228,14 +228,10 @@ tasks { withType().configureEach { dependsOn(shadowJar) - inputs.file(shadowJar.get().archiveFile) jvmArgs("-Dotel.javaagent.debug=true") - doFirst { - // Defining here to allow jacoco to be first on the command line. - jvmArgs("-javaagent:${shadowJar.get().archiveFile.get().asFile}") - } + jvmArgumentProviders.add(JavaagentProvider(shadowJar.flatMap { it.archiveFile })) testLogging { events("started") @@ -299,3 +295,13 @@ fun ShadowJar.excludeBootstrapJars() { exclude(project(":javaagent-instrumentation-api")) } } + +class JavaagentProvider( + @InputFile + @PathSensitive(PathSensitivity.RELATIVE) + val agentJar: Provider +) : CommandLineArgumentProvider { + override fun asArguments(): Iterable = listOf( + "-javaagent:${file(agentJar).absolutePath}" + ) +} diff --git a/testing/agent-for-testing/build.gradle.kts b/testing/agent-for-testing/build.gradle.kts index c684ec38ad..1eb3ff2a80 100644 --- a/testing/agent-for-testing/build.gradle.kts +++ b/testing/agent-for-testing/build.gradle.kts @@ -43,11 +43,20 @@ tasks { afterEvaluate { withType().configureEach { - dependsOn(jar) - jvmArgs("-Dotel.javaagent.debug=true") - jvmArgs("-javaagent:${jar.get().archiveFile.get().asFile.absolutePath}") jvmArgs("-Dotel.metrics.exporter=otlp") + + jvmArgumentProviders.add(JavaagentProvider(jar.flatMap { it.archiveFile })) } } } + +class JavaagentProvider( + @InputFile + @PathSensitive(PathSensitivity.RELATIVE) + val agentJar: Provider +) : CommandLineArgumentProvider { + override fun asArguments(): Iterable = listOf( + "-javaagent:${file(agentJar).absolutePath}" + ) +}