我想使用单独的 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/