将 kotlin 代码编译为 JVM 和 JavaScript
Compile kotlin code to both JVM and JavaScript
我真的很喜欢编写一次框架,然后能够将其编译为 jvm 字节码以及 javascript 供 Web 使用的想法。
目前可以使用 kotlin 编译器吗?
这是可能的,但您可能会遇到一些困难。首先,您只能使用 Maven 构建和配置它:只需设置两个执行。第二个问题是 IDE 无法处理多个目标,因此您可以使用技巧 enable/disable 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 -> 检查 "create from archetype" -> 选择 "org.jetbrains.kotlin:kotlin-archetype-jvm"
编辑GroupId:com.example.training; ArtifactId:kotlin2js; Version:1.0-快照
NOTE: a name of project (module) should not contains "-" (a dash) but "_" (an underscore) is ok.
在路径 src/main/kotlin/com.example.training/
中创建一个名为 Person 的 class 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
文件夹 classes 包含 java 的 Person.class。文件夹 js 包含 kotlin2js.js 和 kotlin2js.meta.js 用于 JS,所有解压的 js 文件都在子文件夹 lib 中。
我真的很喜欢编写一次框架,然后能够将其编译为 jvm 字节码以及 javascript 供 Web 使用的想法。
目前可以使用 kotlin 编译器吗?
这是可能的,但您可能会遇到一些困难。首先,您只能使用 Maven 构建和配置它:只需设置两个执行。第二个问题是 IDE 无法处理多个目标,因此您可以使用技巧 enable/disable 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 -> 检查 "create from archetype" -> 选择 "org.jetbrains.kotlin:kotlin-archetype-jvm"
编辑GroupId:com.example.training; ArtifactId:kotlin2js; Version:1.0-快照
NOTE: a name of project (module) should not contains "-" (a dash) but "_" (an underscore) is ok.
在路径 src/main/kotlin/com.example.training/
中创建一个名为 Person 的 class kotlindata 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
文件夹 classes 包含 java 的 Person.class。文件夹 js 包含 kotlin2js.js 和 kotlin2js.meta.js 用于 JS,所有解压的 js 文件都在子文件夹 lib 中。