[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.gradle.api.tasks.TaskProvider
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
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.dsl.KotlinJsBinaryMode
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsBinaryContainer.Companion.generateBinaryName
|
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
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
|
|
||||||
interface JsBinary {
|
interface JsBinary {
|
||||||
val compilation: KotlinJsCompilation
|
val compilation: KotlinJsCompilation
|
||||||
val name: String
|
val name: String
|
||||||
val mode: KotlinJsBinaryMode
|
val mode: KotlinJsBinaryMode
|
||||||
|
val distribution: Distribution
|
||||||
}
|
}
|
||||||
|
|
||||||
sealed class JsIrBinary(
|
sealed class JsIrBinary(
|
||||||
override val compilation: KotlinJsCompilation,
|
final override val compilation: KotlinJsCompilation,
|
||||||
override val name: String,
|
override val name: String,
|
||||||
override val mode: KotlinJsBinaryMode
|
override val mode: KotlinJsBinaryMode
|
||||||
) : JsBinary {
|
) : JsBinary {
|
||||||
|
override val distribution: Distribution =
|
||||||
|
BrowserDistribution(compilation.target.project)
|
||||||
|
|
||||||
val linkTaskName: String = linkTaskName()
|
val linkTaskName: String = linkTaskName()
|
||||||
|
|
||||||
val linkTask: TaskProvider<KotlinJsIrLink>
|
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.Task
|
||||||
import org.gradle.api.provider.Provider
|
import org.gradle.api.provider.Provider
|
||||||
|
import org.gradle.api.tasks.Copy
|
||||||
import org.gradle.api.tasks.Sync
|
import org.gradle.api.tasks.Sync
|
||||||
import org.gradle.api.tasks.TaskProvider
|
import org.gradle.api.tasks.TaskProvider
|
||||||
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJsDce
|
import org.jetbrains.kotlin.gradle.dsl.KotlinJsDce
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
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.NodeJsRootExtension
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
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 project = compilation.target.project
|
||||||
val nodeJs = NodeJsRootPlugin.apply(project.rootProject)
|
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)
|
val assembleTaskProvider = project.tasks.named(LifecycleBasePlugin.ASSEMBLE_TASK_NAME)
|
||||||
|
|
||||||
compilation.binaries
|
compilation.binaries
|
||||||
@@ -156,10 +160,6 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
|||||||
) { task ->
|
) { task ->
|
||||||
val entryFileProvider = binary.linkTask.map { it.outputFile }
|
val entryFileProvider = binary.linkTask.map { it.outputFile }
|
||||||
|
|
||||||
task.dependsOn(
|
|
||||||
distributeResourcesTask
|
|
||||||
)
|
|
||||||
|
|
||||||
task.description = "build webpack ${mode.name.toLowerCase()} bundle"
|
task.description = "build webpack ${mode.name.toLowerCase()} bundle"
|
||||||
task._destinationDirectory = distribution.directory
|
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) {
|
if (mode == KotlinJsBinaryMode.PRODUCTION) {
|
||||||
assembleTaskProvider.dependsOn(webpackTask)
|
assembleTaskProvider.dependsOn(webpackTask)
|
||||||
val webpackCommonTask = registerSubTargetTask<Task>(
|
val webpackCommonTask = registerSubTargetTask<Task>(
|
||||||
@@ -179,6 +189,13 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
|||||||
) {
|
) {
|
||||||
it.dependsOn(webpackTask)
|
it.dependsOn(webpackTask)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
webpackTask.dependsOn(
|
||||||
|
distributeResourcesTask
|
||||||
|
)
|
||||||
|
|
||||||
|
assembleTaskProvider.dependsOn(distributeResourcesTask)
|
||||||
|
|
||||||
registerSubTargetTask<Task>(disambiguateCamelCased(DISTRIBUTION_TASK_NAME)) {
|
registerSubTargetTask<Task>(disambiguateCamelCased(DISTRIBUTION_TASK_NAME)) {
|
||||||
it.dependsOn(webpackCommonTask)
|
it.dependsOn(webpackCommonTask)
|
||||||
it.dependsOn(distributeResourcesTask)
|
it.dependsOn(distributeResourcesTask)
|
||||||
|
|||||||
+16
-9
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.gradle.targets.js.ir
|
package org.jetbrains.kotlin.gradle.targets.js.ir
|
||||||
|
|
||||||
import org.gradle.api.DomainObjectSet
|
import org.gradle.api.DomainObjectSet
|
||||||
|
import org.gradle.api.GradleException
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.plugins.ExtensionAware
|
import org.gradle.api.plugins.ExtensionAware
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
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.KotlinTargetWithBinaries
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
|
import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
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
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.DEVELOPMENT
|
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.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.targets.js.subtargets.KotlinJsSubTarget
|
||||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@@ -39,7 +42,7 @@ constructor(
|
|||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
fun executable(
|
fun executable(
|
||||||
compilation: KotlinJsCompilation = defaultCompilation
|
compilation: KotlinJsCompilation = defaultCompilation
|
||||||
) {
|
): List<JsBinary> {
|
||||||
if (target is KotlinJsIrTarget) {
|
if (target is KotlinJsIrTarget) {
|
||||||
target.whenBrowserConfigured {
|
target.whenBrowserConfigured {
|
||||||
(this as KotlinJsIrSubTarget).produceExecutable()
|
(this as KotlinJsIrSubTarget).produceExecutable()
|
||||||
@@ -49,7 +52,7 @@ constructor(
|
|||||||
(this as KotlinJsIrSubTarget).produceExecutable()
|
(this as KotlinJsIrSubTarget).produceExecutable()
|
||||||
}
|
}
|
||||||
|
|
||||||
compilation.binaries.executableIrInternal(compilation)
|
return compilation.binaries.executableIrInternal(compilation)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (target is KotlinJsTarget) {
|
if (target is KotlinJsTarget) {
|
||||||
@@ -64,11 +67,13 @@ constructor(
|
|||||||
(this as KotlinJsSubTarget).produceExecutable()
|
(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,
|
compilation = compilation,
|
||||||
jsBinaryType = KotlinJsBinaryType.EXECUTABLE,
|
jsBinaryType = KotlinJsBinaryType.EXECUTABLE,
|
||||||
create = ::Executable
|
create = ::Executable
|
||||||
@@ -82,6 +87,7 @@ constructor(
|
|||||||
override val compilation: KotlinJsCompilation = compilation
|
override val compilation: KotlinJsCompilation = compilation
|
||||||
override val name: String = name
|
override val name: String = name
|
||||||
override val mode: KotlinJsBinaryMode = type
|
override val mode: KotlinJsBinaryMode = type
|
||||||
|
override val distribution: Distribution = BrowserDistribution(compilation.target.project)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -97,8 +103,8 @@ constructor(
|
|||||||
modes: Collection<KotlinJsBinaryMode> = listOf(PRODUCTION, DEVELOPMENT),
|
modes: Collection<KotlinJsBinaryMode> = listOf(PRODUCTION, DEVELOPMENT),
|
||||||
jsBinaryType: KotlinJsBinaryType,
|
jsBinaryType: KotlinJsBinaryType,
|
||||||
create: (compilation: KotlinJsCompilation, name: String, mode: KotlinJsBinaryMode) -> T
|
create: (compilation: KotlinJsCompilation, name: String, mode: KotlinJsBinaryMode) -> T
|
||||||
) {
|
) =
|
||||||
modes.forEach {
|
modes.map {
|
||||||
createBinary(
|
createBinary(
|
||||||
compilation,
|
compilation,
|
||||||
it,
|
it,
|
||||||
@@ -106,14 +112,13 @@ constructor(
|
|||||||
create
|
create
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private fun <T : JsBinary> createBinary(
|
private fun <T : JsBinary> createBinary(
|
||||||
compilation: KotlinJsCompilation,
|
compilation: KotlinJsCompilation,
|
||||||
mode: KotlinJsBinaryMode,
|
mode: KotlinJsBinaryMode,
|
||||||
jsBinaryType: KotlinJsBinaryType,
|
jsBinaryType: KotlinJsBinaryType,
|
||||||
create: (compilation: KotlinJsCompilation, name: String, mode: KotlinJsBinaryMode) -> T
|
create: (compilation: KotlinJsCompilation, name: String, mode: KotlinJsBinaryMode) -> T
|
||||||
) {
|
): JsBinary {
|
||||||
val name = generateBinaryName(
|
val name = generateBinaryName(
|
||||||
compilation,
|
compilation,
|
||||||
mode,
|
mode,
|
||||||
@@ -121,7 +126,7 @@ constructor(
|
|||||||
)
|
)
|
||||||
|
|
||||||
if (name in binaryNames) {
|
if (name in binaryNames) {
|
||||||
return
|
return single { it.name == name }
|
||||||
}
|
}
|
||||||
|
|
||||||
binaryNames.add(name)
|
binaryNames.add(name)
|
||||||
@@ -132,6 +137,8 @@ constructor(
|
|||||||
if (this is ExtensionAware) {
|
if (this is ExtensionAware) {
|
||||||
extensions.add(binary.name, binary)
|
extensions.add(binary.name, binary)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return binary
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
-22
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.gradle.targets.js.ir
|
|||||||
import org.gradle.api.NamedDomainObjectContainer
|
import org.gradle.api.NamedDomainObjectContainer
|
||||||
import org.gradle.api.Task
|
import org.gradle.api.Task
|
||||||
import org.gradle.api.plugins.ExtensionAware
|
import org.gradle.api.plugins.ExtensionAware
|
||||||
import org.gradle.api.tasks.Copy
|
|
||||||
import org.gradle.api.tasks.TaskProvider
|
import org.gradle.api.tasks.TaskProvider
|
||||||
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
||||||
import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator
|
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.npm.npmProject
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.subtargets.BrowserDistribution
|
import org.jetbrains.kotlin.gradle.targets.js.subtargets.BrowserDistribution
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
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.tasks.registerTask
|
||||||
import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
|
import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
|
||||||
import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
|
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(
|
internal inline fun <reified T : Task> registerSubTargetTask(
|
||||||
name: String,
|
name: String,
|
||||||
args: List<Any> = emptyList(),
|
args: List<Any> = emptyList(),
|
||||||
|
|||||||
Reference in New Issue
Block a user