使用Gradle在Kotlin服务器和客户端项目之间共享代码

Jus*_*bie 7 gradle kotlin

我想使用一个单独的shared项目共享服务器(JVM)和客户端(JS)之间的一些代码.我见过使用Maven 的解决方案,但我不知道如何将其转换为Gradle项目.此外,官方指南中没有任何共享项目的示例.那么,build.gradle这样的设置如何最小化?

hot*_*key 2

使用其他 Kotlin 项目的依赖项构建 Kotlin2JS 项目似乎需要以任何方式复制源代码。一种方法是将 Kotlin 项目源目录添加到 Kotlin2JS 项目源集目录中。

这可以通过范围内的以下行来完成project

sourceSets {  
    main.kotlin.srcDirs += project(':shared').sourceSets.main.kotlin.srcDirs
}
Run Code Online (Sandbox Code Playgroud)

请看整个项目结构:

root/
  shared/
    src/main/kotlin
    build.gradle
  client/
    src/main/kotlin
  server/
    src/main/kotlin
  build.gradle
  settings.gradle
Run Code Online (Sandbox Code Playgroud)

settings.gradle

include 'shared', 'server', 'client'
Run Code Online (Sandbox Code Playgroud)

并在build.gradle

group 'com.example.multiproject'
version '1.0-SNAPSHOT'

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.0-beta-4589"
    }
}

subprojects {
    repositories {
        mavenCentral()
    }
}

project(':client') {
    evaluationDependsOn(':shared')

    apply plugin: 'kotlin2js'
    compileKotlin2Js.kotlinOptions.sourceMap = true
    compileKotlin2Js.kotlinOptions.outputFile = "${projectDir}/web/js/app.js"
    compileKotlin2Js.kotlinOptions.suppressWarnings = true
    compileKotlin2Js.kotlinOptions.verbose = true

    sourceSets {
        main.kotlin.srcDirs += project(':shared').sourceSets.main.kotlin.srcDirs
    }
    dependencies {
        compile 'org.jetbrains.kotlin:kotlin-js-library:1.0.0-beta-4589'
    }
}

project(':server') {
    apply plugin: 'kotlin'
    dependencies {
        compile 'org.jetbrains.kotlin:kotlin-stdlib:1.0.0-beta-4589'
        compile project(':shared')
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,shared项目应包含其自己的build.gradle.