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

标签 gradle kotlin

我想使用单独的 shared 项目在服务器 (JVM) 和客户端 (JS) 之间共享一些代码。我看过一个solution使用 Maven,但我不确定如何将其转换为 Gradle 项目。此外,official guide 中没有任何共享项目的示例。 .那么,具有这种设置的最小 build.gradle 看起来如何?

最佳答案

为了完整起见,这是我几乎同时使用热键创建的设置:

主要的settings.gradle:include 'shared', 'client', 'server'

build.gradle:

buildscript {
  ext {
    kotlinVer = '1.0.0-beta-4589'
  }
  repositories {
    mavenCentral()
    maven {
      url 'http://oss.sonatype.org/content/repositories/snapshots'
    }
  }
  dependencies {
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVer"
  }
}

allprojects {
  apply plugin: 'idea'
  group = 'some.company'
  version = '0.0.1'

  ext {
    kotlinVer = '1.0.0-beta-4589'
    // Lib versions go there.
  }
  repositories {
    mavenLocal()
    mavenCentral()
    maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
    maven { url "https://oss.sonatype.org/content/repositories/releases/" }
  }
}

project('shared') {
  apply plugin: 'kotlin'
}

project('server') {
  apply plugin: 'kotlin'
  apply plugin: 'application'

  mainClassName = 'some.company.Main'
  dependencies {
    compile project(':shared')
  }
}

project('client') {
  apply plugin: 'kotlin2js'
  dependencies {
    compile project(':shared')
  }
}

客户端build.gradle:

apply plugin: 'kotlin2js'

compileKotlin2Js {
  kotlinOptions.outputFile = "server/src/main/resources/static/js/app.js"
  kotlinOptions.sourceMap = true
}

sourceSets {
  main.kotlin.srcDirs += '../shared/src/main/kotlin'
  // hotkey's solution:
  // main.kotlin.srcDirs += project(':shared').sourceSets.main.kotlin.srcDirs
}

dependencies {
  compile "org.jetbrains.kotlin:kotlin-js-library:$kotlinVer"
}

服务器build.gradle:

apply plugin: 'kotlin'

sourceCompatibility = 1.7
targetCompatibility = 1.7

dependencies {
  // Libs go there.
  compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVer"
  testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlinVer"
}

共享项目的 build.gradle 仅包含 apply plugin: 'kotlin' 而且,我不确定使用共享库是否简单(或必要,在很多情况下),所以我想它甚至可以保持空白。

gradle client:build 在服务器的静态资源文件夹中生成 JavaScript 文件。 gradle idea 生成具有正确链接的依赖项和源文件夹的 IntelliJ 项目(只要使用默认名称 - src/main/kotlin 等;请参阅 Kotlin Gradle 官方手册自定义源目录)。

关于gradle - 使用 Gradle 在 Kotlin 服务器和客户端项目之间共享代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34999133/

相关文章:

android - 目标 SDK 卡在 22

android - 关于将 android block 添加到顶级 build.gradle 的 Android 文档是否错误

java - 如何停止 Gradle 将依赖项扩展为 ExpandedArchives?

Kotlin - OkHttp - 从 onResponse 返回

java - 使用 gradle 生成 OSGI-INF/serviceComponent.xml

kotlin - 绑定(bind)类引用返回协变类型的目的是什么?

android - 为什么在生命周期范围内 fragment 的上下文为空

mongodb - 在 Kotlin 中,为什么 jackson 在某些情况下无法解码非注释对象而不是在其他情况下

kotlin - 抛弃Kotlin箭头中的嵌套选项

java - ClassNotFoundException : android. View .include