2017-03-11 48 views
2

我有三個模塊:客戶端,共享服務器。將Kotlin2JavaScript代碼分割成幾個Maven模塊

服務器是一個「正常」Kotlin模塊,編譯爲JVM ByteCode。 應將共享編譯爲JS和JVM ByteCod 客戶端僅編譯爲JS。

我有安裝共享編譯JS和ByteCode - 這工作正常。問題是,客戶端模塊無法編譯,因爲它沒有看到來自客戶端的類。

科特林代碼:

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的模塊,在編譯一去一個JS文件?

+0

看看它是如何在https://github.com/Kotlin/kotlinx.html完成,例如 – bashor

回答

1

解決方案確實在kotlin的github examples。下面是一個總結:

  1. 該庫必須生成一個包含js文件和* .class文件的jar文件。要做到這一點,你必須告訴科特林編譯器生成js文件,並把它們放到類文件夾,並在編譯的類目錄中的所有文件科特林爲* .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項目必須告訴maven解壓縮依賴項並使js文件可用。更改的pom.xml方式如下:

    <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>