【发布时间】:2015-08-20 16:46:51
【问题描述】:
我真的很喜欢将框架编码一次,然后能够将其编译为 jvm 字节码以及 javascript 以供 Web 使用的想法。
目前可以使用 kotlin 编译器吗?
【问题讨论】:
标签: javascript compilation jvm kotlin
我真的很喜欢将框架编码一次,然后能够将其编译为 jvm 字节码以及 javascript 以供 Web 使用的想法。
目前可以使用 kotlin 编译器吗?
【问题讨论】:
标签: javascript compilation jvm kotlin
这是可能的,但您可能会遇到一些困难。首先,您只能使用 Maven 构建和配置它:只需设置两个执行。第二个问题是 IDE 无法处理多个目标,因此您可以使用技巧来启用/禁用 stdlib/kotlin-js-library
你可以在https://github.com/Kotlin/kotlinx.html看到它
它是多模块项目.. 模块 jvm 只为 JVM 编译,模块 js 只为 javascript,模块共享给两者
注意 maven 配置文件:当您编辑共享模块时,您可以启用 js 或 jvm 但不能同时启用:否则 IDE 会发疯。在编译期间,默认情况下两个配置文件都处于活动状态,因此您将获得多目标 jar
【讨论】:
在一段时间内,这会导致问题。不过这个主意很好,所以人们一直在问。
检查我的项目https://github.com/C06A/KUrlet,我只是在其中执行此操作:在根级模块中包含共享代码,并将其源目录包含在每个子模块的 sourceSets 属性中(一个针对 JVM,一个针对 JS)。
【讨论】:
我创建了一个针对 JVM 的 projet kotlin maven,它可以编译为 JVM 和 JS。
打开 Intellij IDEA -> 文件 -> 新建 -> 项目 -> Maven -> 勾选“从原型创建” -> 选择“org.jetbrains.kotlin:kotlin-archetype-jvm”
编辑 GroupId:com.example.training; ArtifactId:kotlin2js;版本:1.0-SNAPSHOT
注意:项目(模块)的名称不应包含“-”(破折号)但“_”(下划线)是可以的。
在路径 src/main/kotlin/com.example.training/ 中创建一个名为 Person 的 kotlin 类
data class Person (
val id, Int,
val firstname: String)
编辑 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>
运行 mvn clean compile
文件夹类包含 Java 的 Person.class。文件夹 js 包含用于 JS 的 kotlin2js.js 和 kotlin2js.meta.js,所有解压的 js 文件都在子文件夹 lib 中。
【讨论】: