Java和Js中Kotlin多平台项目的Gradle配置 看来一切都好!但是

Java和Js中Kotlin多平台项目的Gradle配置 看来一切都好!但是,gradle,kotlin,multiplatform,gradle-kotlin-dsl,kotlin-multiplatform,Gradle,Kotlin,Multiplatform,Gradle Kotlin Dsl,Kotlin Multiplatform,我已经用Js和Java创建了一个Kotlin多平台项目。我致力于为所有目标创建正确的测试,并为构建创建正确的配置。看起来一切正常,我成功地创建了构建并以正确的方式设置它。今天我打开了项目,它停止了,构建完成了,但是测试和java编译没有执行 那么我如何配置它呢? 有了代码和结果,一切都将更加清晰 build.gradle.kts import com.moowork.gradle.node.npm.NpmTask import com.moowork.gradle.node.task.NodeT

我已经用Js和Java创建了一个Kotlin多平台项目。我致力于为所有目标创建正确的测试,并为构建创建正确的配置。看起来一切正常,我成功地创建了构建并以正确的方式设置它。今天我打开了项目,它停止了,构建完成了,但是测试和java编译没有执行

那么我如何配置它呢?

有了代码和结果,一切都将更加清晰

build.gradle.kts

import com.moowork.gradle.node.npm.NpmTask
import com.moowork.gradle.node.task.NodeTask
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompile

buildscript {
    repositories {
        mavenCentral()
        jcenter()
        maven {
            url = uri("https://plugins.gradle.org/m2/")
        }
    }
    dependencies {
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50")
    }
}

plugins {
    kotlin("multiplatform") version "1.3.50"
    id("com.moowork.node") version "1.3.1"
}

repositories {
    mavenCentral()
    jcenter()
}

group = "com.example"
version = "0.0.1"


kotlin {
    jvm()
    js()
    jvm {
        withJava()
    }
    js {
        nodejs()
    }

    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation(kotlin("stdlib-common"))
            }
        }
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test-common"))
                implementation(kotlin("test-annotations-common"))
            }
        }
        jvm {
            compilations["main"].defaultSourceSet {
                dependencies {
                    implementation(kotlin("stdlib-jdk8"))
                }
            }
            compilations["test"].defaultSourceSet {
                dependencies {
                    implementation(kotlin("test"))
                    implementation(kotlin("test-junit"))
                }
            }
        }
        js {
            sequenceOf("", "Test").forEach {
                tasks.getByName<KotlinJsCompile>("compile${it}KotlinJs") {
                    kotlinOptions {
                        moduleKind = "umd"
                        noStdlib = true
                        metaInfo = true
                    }
                }
            }
            compilations["main"].defaultSourceSet {
                dependencies {
                    implementation(kotlin("stdlib-js"))
                }
            }
            compilations["test"].defaultSourceSet {
                dependencies {
                    implementation(kotlin("test-js"))
                }
            }
        }
    }
}
val compileKotlinJs = tasks.getByName("compileKotlinJs")
val compileTestKotlinJs = tasks.getByName("compileTestKotlinJs")

val libDir = "$buildDir/lib"
val compileOutput = compileKotlinJs.getOutputs().getFiles()
val testOutput = compileTestKotlinJs.getOutputs().getFiles()

val populateNodeModules = tasks.create<Copy>("populateNodeModules") {
    afterEvaluate {
        from(compileOutput)
        from(testOutput)

        configurations["testCompile"].forEach {
            if (it.exists() && !it.isDirectory) {
                from(zipTree(it.absolutePath).matching { include("*.js") })
            }
        }
        for (sourceSet in kotlin.sourceSets) {
            from(sourceSet.resources)
        }
        into("$buildDir/node_modules")
    }
    dependsOn("compileKotlinJs")
}

node {
    download = true;
}

tasks.create<NpmTask> ("installJest") {
    setArgs(setOf("install", "jest"))
}

tasks.create<NodeTask> ("runJest") {
    setDependsOn(setOf("installJest", "populateNodeModules", "compileTestKotlinJs"))
    setScript(file("node_modules/jest/bin/jest.js"))
    setArgs(compileTestKotlinJs.outputs.files.toMutableList().map {projectDir.toURI().relativize(it.toURI())})
}

tasks.getByName("test").dependsOn("runJest")
导入com.moowork.gradle.node.npm.NpmTask
导入com.moowork.gradle.node.task.NodeTask
导入org.jetbrains.kotlin.gradle.dsl.KotlinJsCompile
构建脚本{
存储库{
mavenCentral()
jcenter()
马文{
url=uri(“https://plugins.gradle.org/m2/")
}
}
依赖关系{
类路径(“org.jetbrains.kotlin:kotlin gradle plugin:1.3.50”)
}
}
插件{
kotlin(“多平台”)版本“1.3.50”
id(“com.moowork.node”)版本“1.3.1”
}
存储库{
mavenCentral()
jcenter()
}
group=“com.example”
version=“0.0.1”
科特林{
jvm()
js()
虚拟机{
withJava()
}
js{
nodejs()
}
源集{
通过获取{
依赖关系{
实施(kotlin(“stdlib通用”))
}
}
通过获取{
依赖关系{
实现(kotlin(“测试通用”))
实现(kotlin(“测试注释通用”))
}
}
虚拟机{
编译[“主”].defaultSourceSet{
依赖关系{
实施(kotlin(“stdlib-jdk8”))
}
}
编译[“测试”].defaultSourceSet{
依赖关系{
实施(kotlin(“测试”))
实现(kotlin(“测试junit”))
}
}
}
js{
序列(“,”测试“).forEach{
tasks.getByName(“编译${it}KotlinJs”){
科特洛普斯酒店{
moduleKind=“umd”
nostlib=true
metaInfo=true
}
}
}
编译[“主”].defaultSourceSet{
依赖关系{
实施(kotlin(“stdlib js”))
}
}
编译[“测试”].defaultSourceSet{
依赖关系{
实现(kotlin(“测试js”))
}
}
}
}
}
val compileKotlinJs=tasks.getByName(“compileKotlinJs”)
val compileTestKotlinJs=tasks.getByName(“compileTestKotlinJs”)
val libDir=“$buildDir/lib”
val compileOutput=compileKotlinJs.getOutputs().getFiles()
val testOutput=compileTestKotlinJs.getOutputs().getFiles()
val populateNodeModules=tasks.create(“populateNodeModules”){
后评价{
从(编译输出)
from(testOutput)
配置[“testCompile”]。forEach{
if(it.exists()&&!it.isDirectory){
from(zipTree(it.absolutePath).matching{include(“*.js”)})
}
}
for(kotlin.sourceSet中的sourceSet){
from(sourceSet.resources)
}
进入($buildDir/node_模块)
}
dependsOn(“compileKotlinJs”)
}
节点{
下载=真;
}
tasks.create(“installJest”){
setArgs(setOf(“安装”、“玩笑”))
}
tasks.create(“runJest”){
setDependsOn(setOf(“installJest”、“populateNodeModules”、“compileTestKotlinJs”))
setScript(文件(“node_modules/jest/bin/jest.js”))
setArgs(compileTestKotlinJs.outputs.files.toMutableList().map{projectDir.toURI().relativize(it.toURI())})
}
tasks.getByName(“test”).dependsOn(“runJest”)
看看有多少任务被跳过了!以及如何创建builddir

我使用jest在js中进行测试。 提前谢谢你对我的支持