我想使用单独的shared
项目共享服务器(JVM)和客户端(JS)之间的一些代码。我已经看过使用Maven的solution,但我不确定如何将其转换为Gradle项目。此外,official guide中没有共享项目的任何示例。那么,具有这种设置的最小build.gradle
怎么样呢?
答案 0 :(得分:4)
为了完整性,这是我与热键同时创建的设置:
主要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手册以获取自定义源目录)。
答案 1 :(得分:2)
使用来自其他Kotlin项目的依赖项构建Kotlin2JS项目似乎需要以任何方式复制源代码。一种方法是将Kotlin项目源dirs添加到Kotlin2JS项目源集dirs。
可以使用project
范围中的以下行完成此操作:
sourceSets {
main.kotlin.srcDirs += project(':shared').sourceSets.main.kotlin.srcDirs
}
请参阅整个项目结构:
root/
shared/
src/main/kotlin
build.gradle
client/
src/main/kotlin
server/
src/main/kotlin
build.gradle
settings.gradle
在settings.gradle
:
include 'shared', 'server', 'client'
在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')
}
}
请注意,shared
项目应包含自己的build.gradle
。