2017-03-11 11 views
2

私は3つのモジュールを持っています:クライアント、共有、サーバー。Kotlin2JavaScriptコードを複数のMavenモジュールに分割

サーバはJVMのByteCodeにコンパイルされた「通常の」Kotlinモジュールです。 共有はJSとJVMにコンパイルする必要があります。ByteCod クライアントはJSのみでコンパイルされます。

JSとByteCodeをコンパイルするためのセットアップ共有があります。これは問題なく動作します。問題は、クライアントモジュールがクライアントからのクラスを認識しないためコンパイルできないということです。

Kotlinコード:

import com.a.typical.super.long.package.which.contains.ModelId 

interface ClientOrca { 

    fun test(): ModelId 
} 

[ERROR] <ClientKt>:[1,8] Unresolved reference: com 
[ERROR] <ClientKt>:[5,15] Unresolved reference: ModelId 

どのようにセットアップ(Mavenを持つ)プロジェクトことができますいくつかのMavenのモジュールに分割されている私のコードは、1-行く1つのJSファイルにしてコンパイルされるように?

+0

例えば、それはhttps://github.com/Kotlin/kotlinx.htmlで行われる方法を参照してください:のpom.xmlに以下の方法を変更します – bashor

答えて

1

実際には溶液はコットリンのものである。

  1. ライブラリはJSファイルと* .classファイルを含むjarファイルを生成することがあります。ここにまとめたものです。あなたはJSファイルを生成し、クラスのフォルダにそれらを入れてもにすべてのkotlinファイルをコンパイルするkotlinコンパイラに指示する必要があり、この*でクラスのディレクトリ内の.classファイル(ターゲット/クラス)

    <plugin> 
         <groupId>org.jetbrains.kotlin</groupId> 
         <artifactId>kotlin-maven-plugin</artifactId> 
         <version>${kotlin.version}</version> 
         <executions> 
          <execution> 
           <id>compile</id> 
           <phase>compile</phase> 
           <goals> 
            <goal>js</goal> 
            <goal>compile</goal> 
           </goals> 
           <configuration> 
            <sourceDirs> 
             <sourceDir>${project.basedir}/src/main/kotlin</sourceDir> 
             <sourceDir>${project.basedir}/src/main/java</sourceDir> 
            </sourceDirs> 
            <outputFile>${project.build.outputDirectory}/${project.artifactId}.js</outputFile> <!-- super important! --> 
           </configuration> 
          </execution> 
          <execution> 
           <id>test-compile</id> 
           <phase>test-compile</phase> 
           <goals> 
            <goal>test-js</goal> 
            <goal>test-compile</goal> 
           </goals> 
           <configuration> 
            <sourceDirs> 
             <sourceDir>${project.basedir}/src/test/kotlin</sourceDir> 
             <sourceDir>${project.basedir}/src/test/java</sourceDir> 
            </sourceDirs> 
           </configuration> 
          </execution> 
         </executions> 
         <!-- Insert these lines --> 
         <configuration> 
          <moduleKind>commonjs</moduleKind> 
         </configuration> 
         <!-- end of inserted text --> 
        </plugin> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-jar-plugin</artifactId> 
         <version>3.0.2</version> 
         <configuration> 
          <forceCreation>true</forceCreation> 
          <includes> 
           <include>**/*</include> 
          </includes> 
          <archive> 
           <forced/> 
           <manifestEntries> 
            <Built-By>Me</Built-By> 
            <Implementation-Vendor>Me</Implementation-Vendor> 
            <Implementation-Version>1.0.0</Implementation-Version> 
           </manifestEntries> 
          </archive> 
         </configuration> 
        </plugin> 
    
  2. を達成するためにライブラリを使用するjsプロジェクトは依存関係を解凍し、jsファイルを利用可能にするためにmavenに伝える必要があります。

    <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-dependency-plugin</artifactId> 
         <executions> 
          <execution> 
           <id>unpack</id> 
           <phase>compile</phase> 
           <goals> 
            <goal>unpack</goal> 
           </goals> 
           <configuration> 
            <artifactItems> 
             <artifactItem> 
              <groupId>org.jetbrains.kotlin</groupId> 
              <artifactId>kotlin-stdlib-js</artifactId> 
              <version>${kotlin.version}</version> 
              <outputDirectory>${project.build.directory}/js/lib</outputDirectory> 
              <includes>*.js</includes> 
             </artifactItem> 
             <artifactItem> 
              <groupId>ch.viseon.openOrca</groupId> 
              <artifactId>share</artifactId> 
              <version>${project.version}</version> 
              <outputDirectory>${project.build.directory}/js/lib</outputDirectory> 
              <includes>*.js</includes> 
             </artifactItem> 
            </artifactItems> 
           </configuration> 
          </execution> 
         </executions> 
        </plugin> 
    
関連する問題