我非常喜欢一次编码框架的想法,然后能够将其编译为jvm字节代码以及javascript以供web使用。
kotlin编译器目前是否可以使用?
答案 0 :(得分:7)
有可能但你可能会面临一些困难。首先,您只能使用Maven构建和配置它:只需设置两个执行。第二个问题是IDE无法处理多个目标,因此您可以使用技巧来启用/禁用stdlib / kotlin-js-library
您可以在https://github.com/Kotlin/kotlinx.html
看到它它是多模块项目..模块jvm只为JVM编译,模块js只为javascript编译,模块共享到两者
注意maven配置文件:编辑共享模块时,您可以启用js或jvm,但不能同时启用两者:否则IDE会发疯。在编译期间,默认情况下两个配置文件都处于活动状态,因此您将获得多目标jar
答案 1 :(得分:0)
这段时间会导致问题。然而这个想法非常好,所以人们不断询问。
检查我的项目https://github.com/C06A/KUrlet我做了这样的事情:在根级模块中包含共享代码,并将其源目录包含在每个子模块的sourceSets属性中(一个目标是JVM,另一个是JS)。
答案 2 :(得分:0)
我创建了一个针对kotlin maven的projet JVM,可以将其编译为JVM和JS。
打开Intellij IDEA->文件->新建->项目-> Maven->选中“从原型创建”->选择“ org.jetbrains.kotlin:kotlin-archetype-jvm”
< / li>编辑GroupId:com.example.training; ArtifactId:kotlin2js;版本:1.0-SNAPSHOT
注意:项目(模块)的名称不应包含“-”(破折号),而“ _”(下划线)则可以。
在路径src / main / kotlin / com.example.training /
中创建名为Person的类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编译
文件夹类包含Java的Person.class。 JS文件夹包含JS的kotlin2js.js和kotlin2js.meta.js,所有解压缩的js文件都位于子文件夹lib中。