Skip to content

Commit 77a8cf4

Browse files
committed
Build: Use attributes to resolve test dependencies in jps build mode
1 parent a32f901 commit 77a8cf4

File tree

10 files changed

+84
-11
lines changed

10 files changed

+84
-11
lines changed

build.gradle.kts

+9
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,15 @@ allprojects {
365365
}
366366
}
367367

368+
configurations.maybeCreate("embeddedElements").apply {
369+
extendsFrom(configurations["embedded"])
370+
isCanBeConsumed = true
371+
isCanBeResolved = false
372+
attributes {
373+
attribute(Usage.USAGE_ATTRIBUTE, objects.named("embedded-java-runtime"))
374+
}
375+
}
376+
368377
jvmTarget = defaultJvmTarget
369378
javaHome = defaultJavaHome
370379

core/builtins/build.gradle.kts

+9-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@ val builtinsNative = fileFrom(rootDir, "core", "builtins", "native")
1111
val kotlinReflect = fileFrom(rootDir, "libraries/stdlib/src/kotlin/reflect")
1212
val builtinsCherryPicked = fileFrom(buildDir, "src")
1313

14+
val runtimeElements by configurations.creating {
15+
isCanBeResolved = false
16+
isCanBeConsumed = true
17+
attributes {
18+
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.JAR))
19+
}
20+
}
21+
1422
val prepareSources by tasks.registering(Sync::class) {
1523
from(kotlinReflect) {
1624
exclude("typeOf.kt")
@@ -47,7 +55,7 @@ val assemble by tasks.getting {
4755
dependsOn(serialize)
4856
}
4957

50-
val builtinsJarArtifact = artifacts.add("default", builtinsJar)
58+
val builtinsJarArtifact = artifacts.add(runtimeElements.name, builtinsJar)
5159

5260
publishing {
5361
publications {

dependencies/tools-jar-api/build.gradle.kts

+9-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,14 @@ plugins {
1010
base
1111
}
1212

13+
val runtimeElements by configurations.creating {
14+
isCanBeResolved = false
15+
isCanBeConsumed = true
16+
attributes {
17+
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.JAR))
18+
}
19+
}
20+
1321
val JDK_18: String by rootProject.extra
1422
val toolsJarFile = toolsJarFile(jdkHome = File(JDK_18)) ?: error("Couldn't find tools.jar in $JDK_18")
1523

@@ -75,4 +83,4 @@ val jar = tasks.register<Jar>("jar") {
7583
}
7684
}
7785

78-
artifacts.add("default", jar)
86+
artifacts.add(runtimeElements.name, jar)

gradle/jps.gradle.kts

+16-3
Original file line numberDiff line numberDiff line change
@@ -103,20 +103,33 @@ if (kotlinBuildProperties.isInJpsBuildIdeaSync) {
103103
apply(mapOf("plugin" to "idea"))
104104
// Make Idea import embedded configuration as transitive dependency for some configurations
105105
afterEvaluate {
106+
val jpsBuildTestDependencies = configurations.maybeCreate("jpsBuildTestDependencies").apply {
107+
isCanBeConsumed = false
108+
isCanBeResolved = true
109+
attributes {
110+
attribute(Usage.USAGE_ATTRIBUTE, objects.named("embedded-java-runtime"))
111+
}
112+
}
113+
106114
listOf(
107115
"testCompile",
108116
"testCompileOnly",
109117
"testRuntime",
110118
"testRuntimeOnly"
111119
).forEach { configurationName ->
112-
val dependencyProjects = configurations
113-
.findByName(configurationName)
120+
val configuration = configurations.findByName(configurationName)
121+
122+
configuration?.apply {
123+
extendsFrom(jpsBuildTestDependencies)
124+
}
125+
126+
val dependencyProjects = configuration
114127
?.dependencies
115128
?.mapNotNull { (it as? ProjectDependency)?.dependencyProject }
116129

117130
dependencies {
118131
dependencyProjects?.forEach {dependencyProject ->
119-
add(configurationName, project(dependencyProject.path, configuration = "embedded"))
132+
add(jpsBuildTestDependencies.name, project(dependencyProject.path))
120133
}
121134
}
122135
}

include/kotlin-compiler/build.gradle.kts

+7-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,13 @@ plugins {
44
}
55

66
val compile by configurations
7-
val fatJarContents by configurations.creating
7+
val fatJarContents by configurations.creating {
8+
isCanBeResolved = true
9+
isCanBeConsumed = false
10+
attributes {
11+
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.JAR))
12+
}
13+
}
814
val fatJarContentsStripMetadata by configurations.creating
915
val fatJarContentsStripServices by configurations.creating
1016

include/kotlin-stdlib-common-sources/build.gradle.kts

+14-2
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,22 @@ plugins {
22
base
33
}
44

5-
val sources by configurations.creating
5+
val sources by configurations.creating {
6+
attributes {
7+
isCanBeResolved = true
8+
isCanBeConsumed = false
9+
attributes {
10+
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.JAR))
11+
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.DOCUMENTATION))
12+
attribute(DocsType.DOCS_TYPE_ATTRIBUTE, objects.named(DocsType.SOURCES))
13+
}
14+
}
15+
}
16+
17+
configurations["embeddedElements"].isCanBeConsumed = false
618

719
dependencies {
8-
sources(project(":kotlin-stdlib-common", configuration = "sources"))
20+
sources(project(":kotlin-stdlib-common"))
921
}
1022

1123
val buildSources by tasks.registering(Jar::class) {

libraries/stdlib/jvm-minimal-for-test/build.gradle.kts

+7-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,13 @@ plugins {
1010
jvmTarget = "1.6"
1111
javaHome = rootProject.extra["JDK_16"] as String
1212

13-
val builtins by configurations.creating
13+
val builtins by configurations.creating {
14+
isCanBeResolved = true
15+
isCanBeConsumed = false
16+
attributes {
17+
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.JAR))
18+
}
19+
}
1420

1521
val runtime by configurations
1622
val runtimeJar by configurations.creating {

libraries/stdlib/jvm/build.gradle

+5-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,11 @@ sourceSets {
4141
configurations {
4242
commonSources
4343
longRunningTestCompile.extendsFrom(testCompile)
44-
builtins
44+
builtins {
45+
attributes {
46+
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements, LibraryElements.JAR))
47+
}
48+
}
4549
compileOnly.extendsFrom(builtins)
4650
}
4751

prepare/compiler/build.gradle.kts

+7-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,13 @@ plugins {
1212

1313
val JDK_18: String by rootProject.extra
1414

15-
val fatJarContents by configurations.creating
15+
val fatJarContents by configurations.creating {
16+
isCanBeResolved = true
17+
isCanBeConsumed = false
18+
attributes {
19+
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.JAR))
20+
}
21+
}
1622
val fatJarContentsStripMetadata by configurations.creating
1723
val fatJarContentsStripServices by configurations.creating
1824
val fatJarContentsStripVersions by configurations.creating

prepare/idea-plugin/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ val libraries by configurations.creating {
145145

146146
val jpsPlugin by configurations.creating {
147147
attributes {
148+
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_RUNTIME))
148149
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.JAR))
149150
}
150151
}

0 commit comments

Comments
 (0)