【问题标题】:Compile kotlin code to both JVM and JavaScript将 kotlin 代码编译为 JVM 和 JavaScript
【发布时间】:2015-08-20 16:46:51
【问题描述】:

我真的很喜欢将框架编码一次,然后能够将其编译为 jvm 字节码以及 javascript 以供 Web 使用的想法。

目前可以使用 kotlin 编译器吗?

【问题讨论】:

    标签: javascript compilation jvm kotlin


    【解决方案1】:

    这是可能的,但您可能会遇到一些困难。首先,您只能使用 Maven 构建和配置它:只需设置两个执行。第二个问题是 IDE 无法处理多个目标,因此您可以使用技巧来启用/禁用 stdlib/kotlin-js-library

    你可以在https://github.com/Kotlin/kotlinx.html看到它

    它是多模块项目.. 模块 jvm 只为 JVM 编译,模块 js 只为 javascript,模块共享给两者

    注意 maven 配置文件:当您编辑共享模块时,您可以启用 js 或 jvm 但不能同时启用:否则 IDE 会发疯。在编译期间,默认情况下两个配置文件都处于活动状态,因此您将获得多目标 jar

    【讨论】:

      【解决方案2】:

      在一段时间内,这会导致问题。不过这个主意很好,所以人们一直在问。

      检查我的项目https://github.com/C06A/KUrlet,我只是在其中执行此操作:在根级模块中包含共享代码,并将其源目录包含在每个子模块的 sourceSets 属性中(一个针对 JVM,一个针对 JS)。

      【讨论】:

        【解决方案3】:

        我创建了一个针对 JVM 的 projet kotlin maven,它可以编译为 JVM 和 JS。

        1. 打开 Intellij IDEA -> 文件 -> 新建 -> 项目 -> Maven -> 勾选“从原型创建” -> 选择“org.jetbrains.kotlin:kotlin-archetype-jvm”

        2. 编辑 GroupId:com.example.training; ArtifactId:kotlin2js;版本:1.0-SNAPSHOT

        注意:项目(模块)的名称不应包含“-”(破折号)但“_”(下划线)是可以的。

        1. 在路径 src/main/kotlin/com.example.training/ 中创建一个名为 Person 的 kotlin 类

          data class Person (
              val id, Int,
              val firstname: String)
          
        2. 编辑 pom.xml

          a) 添加依赖“kotlin-stdlib.js”

           <dependency>
                  <groupId>org.jetbrains.kotlin</groupId>
                  <artifactId>kotlin-stdlib-js</artifactId>
                  <version>${kotlin.version}</version>
           </dependency>
          

          b) 在插件“kotlin-maven-plugin”中添加目标“js”

          c) (Kotlin/JS 互操作性可选)添加插件以解压缩 lib "kotlin-stdlib-js" 中所需的 js 文件

                <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>
                              </artifactItems>
                              </configuration>
                          </execution>
                      </executions>
              </plugin>
          
          1. 运行 mvn clean compile

          2. 文件夹类包含 Java 的 Person.class。文件夹 js 包含用于 JS 的 kotlin2js.js 和 kotlin2js.meta.js,所有解压的 js 文件都在子文件夹 lib 中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-19
          • 2010-12-31
          • 1970-01-01
          • 2011-02-27
          • 2019-10-12
          相关资源
          最近更新 更多