使用Gradle在Kotlin服务器和客户端项目之间共享代码
我想使用一个单独的shared
项目来共享服务器(JVM)和客户端(JS)之间的一些代码。 我见过使用Maven的解决方案 ,但我不知道如何将其转换为Gradle项目。 另外, 官方指南中没有任何共享项目的例子。 那么,如何使用这样的设置最小的build.gradle
?
用另一个Kotlin项目的依赖来构建Kotlin2JS项目似乎需要以任何方式复制源代码。 一种方法是将Kotlin项目源代码添加到Kotlin2JS项目源代码集。
这可以通过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
。
为了完整起见,这是我几乎与热键同时创建的设置:
主要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手册以获取自定义源目录)。
- 如何使用Kotlin DSL配置AppEngine Gradle插件
- Intellij IDEA调试器不能用于Gradle Vert.X项目
- 如何导入Kotlin(Gradle)构建的ShadowJar插件?
- 在build.gradle文件中的compileKotlin块会抛出错误“Could not find method compileKotlin()for arguments ”
- Kotlin胶囊Gradle错误
- 没办法编译我自己的kotlin库
- 错误:执行失败的任务':app:kaptDemoTestingDebugKotlin'
- 在多项目设置中ConfigurationsContainer为空
- 未解决的参考:junit