kotlin-js gradle outputfile错误

时间:2018-03-13 20:56:41

标签: javascript gradle kotlin

我正在研究kotlin-js的例子。我用了这个sample。当我构建前端模块时(如下图所示),我无法看到 web 文件夹。但资源文件应位于 web 文件夹中。怎么了?

Project Source Image

buildscript {
    ext.kotlin_version = '1.2.30'

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

group 'example'
version '1.0-SNAPSHOT'

apply plugin: 'kotlin2js'

repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlin_version"
    testCompile "org.jetbrains.kotlin:kotlin-test-js:$kotlin_version"
}

build.doLast {
    configurations.compile.each { File file ->
        copy {
            includeEmptyDirs = false

            from zipTree(file.absolutePath)
            into "${projectDir}/web"
            include { fileTreeElement ->
                def path = fileTreeElement.path
                path.endsWith(".js") && (path.startsWith("META-INF/resources/") || !path.startsWith("META-INF/"))
            }
        }
    }
}

compileKotlin2Js {
    kotlinOptions.outputFile = "${projectDir}/web/output.js"
    kotlinOptions.sourceMap = true
}

1 个答案:

答案 0 :(得分:0)

您的copy { ... }数据块仅设置从compile配置复制相关性文件,并且不会将项目资源复制到webcompileKotlin2Js任务也没有,它只将已编译的Kotlin类放入该目录。

要复制main源集的资源,您可以添加另一个copy { ... }块,如下所示:

build.doLast {
    // ...
    copy { 
        from sourceSets.main.output.resourcesDir
        into "${projectDir}/web"
    }
}

请注意,如果您只复制文件,最终可能会导致上一次运行中遗留的过时输出文件(如果源目录中不存在文件,则不会从目标中删除其副本)。相反,请考虑使用compileKotlin2Js任务的默认输出文件位置和Sync task来同步目录,如this guide中所述(它没有提及资源;使用{{添加它们) 1}}如上所述)。如果您需要自定义输出文件名,可以use archivesBaseName为此。