別のshared
プロジェクトを使用して、サーバー(JVM)とクライアント(JS)の間でコードの一部を共有します。 Mavenを使ってsolutionを見たことがありますが、これをGradleプロジェクトに変換する方法がわかりません。また、official guideには共有プロジェクトの例はありません。だから、どのように最小限のbuild.gradle
は、そのような設定と見えるだろうか?Gradleを使用したKotlinサーバーとクライアントプロジェクト間の共有コード
7
A
答えて
2
別のKotlinプロジェクトからの依存関係を持つKotlin2JSプロジェクトを構築するには、何らかの方法でソースをコピーする必要があるようです。これを行う1つの方法は、Kotlin2JSプロジェクトのソースセットディレクトリにKotlinプロジェクトのソースディレクトリを追加することです。
これはproject
範囲に以下の行を行うことができます。
sourceSets {
main.kotlin.srcDirs += project(':shared').sourceSets.main.kotlin.srcDirs
}
プロジェクト全体の構造を参照してください:settings.gradle
で
root/
shared/
src/main/kotlin
build.gradle
client/
src/main/kotlin
server/
src/main/kotlin
build.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
を含まなければならないことに注意してください。
3
完全を期すため、これは私がホットキーと、かなり同時に作成された設定です。
メイン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. GradleとMavenの間でモジュールを共有
- 2. 共有プロトコルバッファライブラリの管理とGradleを使用したコンパイル
- 3. Clojurescript/Clojureでのサーバーとクライアント間のコード共有
- 4. ノード/エクスプレス:ブラウザとサーバー間のセッション共有
- 5. Eclipse Swing/mavenとAndroidstudio/gradleプロジェクトの間でコードを共有するには?
- 6. NuGetを使用して開発者間でコードを共有
- 7. フラグメント間でコードを共有
- 8. Typescriptを使用してnode.jsサーバーとブラウザの間でコードを共有する方法
- 9. Eclipse(Maven)とAndroid Studio(Gradle)の間でJavaモデルクラスを共有
- 10. gradle/intellij - 共有テストリソース
- 11. Android gradle - Androidと依存関係間の変数の共有
- 12. 共有コードへの共有と追加
- 13. gradle-script-kotlinのantタスクの使用
- 14. Angular 2のng2共有ボタンを使用した共有
- 15. ブランチと共有のdevサーバー?
- 16. C#コードとC++コードの間のオブジェクトの共有
- 17. CakePHPはシェルとそのタスク間でコードを共有します
- 18. 異なるサーバー間で共有キャッシュ
- 19. IISサーバー上の.aspxと.phpの間のセッションを共有する
- 20. SQL Serverとライブラリプロジェクト間の空間コードの共有
- 21. TypeScript Webアプリケーションでクライアントとサーバー側のコードを共有する
- 22. Eclipseを使用したソースコードの共有
- 23. UIActivityViewControllerを使用したオーディオファイルの共有
- 24. ポータブルクラスライブラリを使用したXamarin.AndroidプロジェクトとXamarin.IOSプロジェクト間のリソースの共有方法
- 25. Xcodeでプロジェクト間でコードを共有
- 26. マイクロサービス間でコードを共有する
- 27. Googleスクリプト間でコードを共有する
- 28. 小学生グループ間のコード共有
- 29. スパーク作業者間のコード共有
- 30. React ES6クラス間のコード共有
この設定を試しましたか?私はすでにマルチプロジェクトセットアップを作成する方法を知っていましたが、それはサーバーとクライアントの両方が異なるプラグインとライブラリに依存しているようです。私が正しいとすれば、Kotlinクライアントプロジェクトは、 'kotlin'プラグインと' kotlin-stdlib'の代わりに 'kotlin2js'プラグインと' kotlin-js-library'を使うべきです。私は現在、マルチプロジェクトのアプローチを試みていますが、A) 'idea'プラグインを使用すると、IntelliJにはソースフォルダが表示されないため、多くの手動設定が必要です。B)Gradleプロジェクトとしてインポートする場合、リンクされた。私は完全に立ち往生したときにスクリプトをアップロードします。 – JustACluelessNewbie
@JustACluelessNewbie、私は同意する、私はJSの瞬間を逃した。buildscriptのkotlin2jsプラグイン依存関係を教えてください。私は、サブプロジェクトではなく、異なるプロジェクトに異なるプラグインを使用するだけで、私が書いたものに似ていると思います。 – hotkey
@JustACluelessNewbie、私は答えを更新しました。このビルドスクリプトは私の側で設定され、正しいと思われますが、 'client'が正しく構築されているかどうかをチェックする方法はわかりません。プロジェクトの現在のバージョンを確認してください。しかし、 'client'と' server'は 'shared'のクラスを使うことができます。 – hotkey