[Gradle, JS] Add distribute resources tasks for all binaries
^KT-41566 fixed
This commit is contained in:
+7
-1
@@ -9,21 +9,27 @@ import org.gradle.api.Project
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsBinaryContainer.Companion.generateBinaryName
|
||||
import org.jetbrains.kotlin.gradle.targets.js.subtargets.BrowserDistribution
|
||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||
|
||||
interface JsBinary {
|
||||
val compilation: KotlinJsCompilation
|
||||
val name: String
|
||||
val mode: KotlinJsBinaryMode
|
||||
val distribution: Distribution
|
||||
}
|
||||
|
||||
sealed class JsIrBinary(
|
||||
override val compilation: KotlinJsCompilation,
|
||||
final override val compilation: KotlinJsCompilation,
|
||||
override val name: String,
|
||||
override val mode: KotlinJsBinaryMode
|
||||
) : JsBinary {
|
||||
override val distribution: Distribution =
|
||||
BrowserDistribution(compilation.target.project)
|
||||
|
||||
val linkTaskName: String = linkTaskName()
|
||||
|
||||
val linkTask: TaskProvider<KotlinJsIrLink>
|
||||
|
||||
+23
-6
@@ -7,13 +7,16 @@ package org.jetbrains.kotlin.gradle.targets.js.ir
|
||||
|
||||
import org.gradle.api.Task
|
||||
import org.gradle.api.provider.Provider
|
||||
import org.gradle.api.tasks.Copy
|
||||
import org.gradle.api.tasks.Sync
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJsDce
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.*
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalDceDsl
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
||||
@@ -138,7 +141,8 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
||||
val project = compilation.target.project
|
||||
val nodeJs = NodeJsRootPlugin.apply(project.rootProject)
|
||||
|
||||
val distributeResourcesTask = configureDistributeTasks(compilation)
|
||||
val processResourcesTask = target.project.tasks.named(compilation.processResourcesTaskName)
|
||||
|
||||
val assembleTaskProvider = project.tasks.named(LifecycleBasePlugin.ASSEMBLE_TASK_NAME)
|
||||
|
||||
compilation.binaries
|
||||
@@ -156,10 +160,6 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
||||
) { task ->
|
||||
val entryFileProvider = binary.linkTask.map { it.outputFile }
|
||||
|
||||
task.dependsOn(
|
||||
distributeResourcesTask
|
||||
)
|
||||
|
||||
task.description = "build webpack ${mode.name.toLowerCase()} bundle"
|
||||
task._destinationDirectory = distribution.directory
|
||||
|
||||
@@ -172,6 +172,16 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
||||
)
|
||||
}
|
||||
|
||||
val distributeResourcesTask = registerSubTargetTask<Copy>(
|
||||
disambiguateCamelCased(
|
||||
binary.name,
|
||||
DISTRIBUTE_RESOURCES_TASK_NAME
|
||||
)
|
||||
) {
|
||||
it.from(processResourcesTask)
|
||||
it.into(binary.distribution.directory)
|
||||
}
|
||||
|
||||
if (mode == KotlinJsBinaryMode.PRODUCTION) {
|
||||
assembleTaskProvider.dependsOn(webpackTask)
|
||||
val webpackCommonTask = registerSubTargetTask<Task>(
|
||||
@@ -179,6 +189,13 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
||||
) {
|
||||
it.dependsOn(webpackTask)
|
||||
}
|
||||
|
||||
webpackTask.dependsOn(
|
||||
distributeResourcesTask
|
||||
)
|
||||
|
||||
assembleTaskProvider.dependsOn(distributeResourcesTask)
|
||||
|
||||
registerSubTargetTask<Task>(disambiguateCamelCased(DISTRIBUTION_TASK_NAME)) {
|
||||
it.dependsOn(webpackCommonTask)
|
||||
it.dependsOn(distributeResourcesTask)
|
||||
|
||||
+16
-9
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.gradle.targets.js.ir
|
||||
|
||||
import org.gradle.api.DomainObjectSet
|
||||
import org.gradle.api.GradleException
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.plugins.ExtensionAware
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
@@ -13,9 +14,11 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinTargetWithBinaries
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
|
||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.DEVELOPMENT
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.PRODUCTION
|
||||
import org.jetbrains.kotlin.gradle.targets.js.subtargets.BrowserDistribution
|
||||
import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinJsSubTarget
|
||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||
import javax.inject.Inject
|
||||
@@ -39,7 +42,7 @@ constructor(
|
||||
@JvmOverloads
|
||||
fun executable(
|
||||
compilation: KotlinJsCompilation = defaultCompilation
|
||||
) {
|
||||
): List<JsBinary> {
|
||||
if (target is KotlinJsIrTarget) {
|
||||
target.whenBrowserConfigured {
|
||||
(this as KotlinJsIrSubTarget).produceExecutable()
|
||||
@@ -49,7 +52,7 @@ constructor(
|
||||
(this as KotlinJsIrSubTarget).produceExecutable()
|
||||
}
|
||||
|
||||
compilation.binaries.executableIrInternal(compilation)
|
||||
return compilation.binaries.executableIrInternal(compilation)
|
||||
}
|
||||
|
||||
if (target is KotlinJsTarget) {
|
||||
@@ -64,11 +67,13 @@ constructor(
|
||||
(this as KotlinJsSubTarget).produceExecutable()
|
||||
}
|
||||
|
||||
compilation.binaries.executableLegacyInternal(compilation)
|
||||
return compilation.binaries.executableLegacyInternal(compilation)
|
||||
}
|
||||
|
||||
throw GradleException("Target should be either KotlinJsTarget or KotlinJsIrTarget, but found $target")
|
||||
}
|
||||
|
||||
internal fun executableIrInternal(compilation: KotlinJsCompilation) = createBinaries(
|
||||
internal fun executableIrInternal(compilation: KotlinJsCompilation): List<JsBinary> = createBinaries(
|
||||
compilation = compilation,
|
||||
jsBinaryType = KotlinJsBinaryType.EXECUTABLE,
|
||||
create = ::Executable
|
||||
@@ -82,6 +87,7 @@ constructor(
|
||||
override val compilation: KotlinJsCompilation = compilation
|
||||
override val name: String = name
|
||||
override val mode: KotlinJsBinaryMode = type
|
||||
override val distribution: Distribution = BrowserDistribution(compilation.target.project)
|
||||
}
|
||||
}
|
||||
)
|
||||
@@ -97,8 +103,8 @@ constructor(
|
||||
modes: Collection<KotlinJsBinaryMode> = listOf(PRODUCTION, DEVELOPMENT),
|
||||
jsBinaryType: KotlinJsBinaryType,
|
||||
create: (compilation: KotlinJsCompilation, name: String, mode: KotlinJsBinaryMode) -> T
|
||||
) {
|
||||
modes.forEach {
|
||||
) =
|
||||
modes.map {
|
||||
createBinary(
|
||||
compilation,
|
||||
it,
|
||||
@@ -106,14 +112,13 @@ constructor(
|
||||
create
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun <T : JsBinary> createBinary(
|
||||
compilation: KotlinJsCompilation,
|
||||
mode: KotlinJsBinaryMode,
|
||||
jsBinaryType: KotlinJsBinaryType,
|
||||
create: (compilation: KotlinJsCompilation, name: String, mode: KotlinJsBinaryMode) -> T
|
||||
) {
|
||||
): JsBinary {
|
||||
val name = generateBinaryName(
|
||||
compilation,
|
||||
mode,
|
||||
@@ -121,7 +126,7 @@ constructor(
|
||||
)
|
||||
|
||||
if (name in binaryNames) {
|
||||
return
|
||||
return single { it.name == name }
|
||||
}
|
||||
|
||||
binaryNames.add(name)
|
||||
@@ -132,6 +137,8 @@ constructor(
|
||||
if (this is ExtensionAware) {
|
||||
extensions.add(binary.name, binary)
|
||||
}
|
||||
|
||||
return binary
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
-22
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.gradle.targets.js.ir
|
||||
import org.gradle.api.NamedDomainObjectContainer
|
||||
import org.gradle.api.Task
|
||||
import org.gradle.api.plugins.ExtensionAware
|
||||
import org.gradle.api.tasks.Copy
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
||||
import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator
|
||||
@@ -26,7 +25,6 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolverPlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||
import org.jetbrains.kotlin.gradle.targets.js.subtargets.BrowserDistribution
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
||||
import org.jetbrains.kotlin.gradle.tasks.dependsOn
|
||||
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||
import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
|
||||
import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
|
||||
@@ -186,26 +184,6 @@ abstract class KotlinJsIrSubTarget(
|
||||
|
||||
}
|
||||
|
||||
protected fun configureDistributeTasks(compilation: KotlinJsIrCompilation): TaskProvider<out Copy> {
|
||||
val project = compilation.target.project
|
||||
|
||||
val processResourcesTask = target.project.tasks.named(compilation.processResourcesTaskName)
|
||||
|
||||
val distributeResourcesTask = registerSubTargetTask<Copy>(
|
||||
disambiguateCamelCased(
|
||||
DISTRIBUTE_RESOURCES_TASK_NAME
|
||||
)
|
||||
) {
|
||||
it.from(processResourcesTask)
|
||||
it.into(distribution.directory)
|
||||
}
|
||||
|
||||
val assembleTaskProvider = project.tasks.named(LifecycleBasePlugin.ASSEMBLE_TASK_NAME)
|
||||
assembleTaskProvider.dependsOn(distributeResourcesTask)
|
||||
|
||||
return distributeResourcesTask
|
||||
}
|
||||
|
||||
internal inline fun <reified T : Task> registerSubTargetTask(
|
||||
name: String,
|
||||
args: List<Any> = emptyList(),
|
||||
|
||||
Reference in New Issue
Block a user