Retain distinction between compile and runtime deps of optional deps
Previously, the optional configuration was added to the compile and runtime classpaths of each source set and the the javadoc classpath as well. This had a few disadvantages, the most notable of which is that it meant that the configuration was ifrst resolved and then the outcome of the resolution was added to the compile and runtime classpaths. As a result, none of the attributes on the compile and runtime classpaths were considered to influence variant selection. This commit reworks the optional dependencies plugin so that the compile and runtime classpaths of each source set are now configured to extend from the optional configuration. This allows each classpath configuration's attributes to influence the dependencies that are selected from the optional configuration during resolution. For example, when resolving the compile classpath, compile dependencies (Usage.JAVA_API) will be selected and when resolving the runtime classpath, runtime dependencies (Usage.JAVA_RUNTIME) will be selected. The above-described change means that runtime dependencies of an optional dependencies will no longer leak into the compile classpath. As a result of this, our Gradle plugin's test infrastructure has been updated so that it no longer references runtime dependencies of the Kotlin Gradle plugin at compile time. Closes gh-27965
This commit is contained in:
@@ -43,9 +43,6 @@ import org.apache.http.conn.HttpClientConnectionManager;
|
||||
import org.gradle.testkit.runner.BuildResult;
|
||||
import org.gradle.testkit.runner.GradleRunner;
|
||||
import org.gradle.util.GradleVersion;
|
||||
import org.jetbrains.kotlin.cli.common.PropertiesKt;
|
||||
import org.jetbrains.kotlin.compilerRunner.KotlinLogger;
|
||||
import org.jetbrains.kotlin.daemon.client.KotlinCompilerClient;
|
||||
import org.jetbrains.kotlin.gradle.model.KotlinProject;
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin;
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlugin;
|
||||
@@ -107,9 +104,10 @@ public class GradleBuild {
|
||||
new File("build/resources/main"), new File(pathOfJarContaining(LaunchScript.class)),
|
||||
new File(pathOfJarContaining(ClassVisitor.class)),
|
||||
new File(pathOfJarContaining(DependencyManagementPlugin.class)),
|
||||
new File(pathOfJarContaining(PropertiesKt.class)), new File(pathOfJarContaining(KotlinLogger.class)),
|
||||
new File(pathOfJarContaining("org.jetbrains.kotlin.cli.common.PropertiesKt")),
|
||||
new File(pathOfJarContaining("org.jetbrains.kotlin.compilerRunner.KotlinLogger")),
|
||||
new File(pathOfJarContaining(KotlinPlugin.class)), new File(pathOfJarContaining(KotlinProject.class)),
|
||||
new File(pathOfJarContaining(KotlinCompilerClient.class)),
|
||||
new File(pathOfJarContaining("org.jetbrains.kotlin.daemon.client.KotlinCompilerClient")),
|
||||
new File(pathOfJarContaining(KotlinGradleSubplugin.class)),
|
||||
new File(pathOfJarContaining(ArchiveEntry.class)), new File(pathOfJarContaining(BuildRequest.class)),
|
||||
new File(pathOfJarContaining(HttpClientConnectionManager.class)),
|
||||
@@ -119,6 +117,15 @@ public class GradleBuild {
|
||||
new File(pathOfJarContaining(JsonView.class)), new File(pathOfJarContaining(Platform.class)));
|
||||
}
|
||||
|
||||
private String pathOfJarContaining(String className) {
|
||||
try {
|
||||
return pathOfJarContaining(Class.forName(className));
|
||||
}
|
||||
catch (ClassNotFoundException ex) {
|
||||
throw new IllegalArgumentException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
private String pathOfJarContaining(Class<?> type) {
|
||||
return type.getProtectionDomain().getCodeSource().getLocation().getPath();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user