将Kotlin2JavaScript代码分割成几个Maven模块
我有三个模块:客户端,共享,服务器。
Server是一个“正常的”Kotlin模块,编译为JVM ByteCode。 共享应该被编译为JS,而JVM ByteCod Client只能编译成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文件?
解决方案确实是在kotlin的github例子中。 这里是一个总结:
-
该库必须生成一个包含js文件和* .class文件的jar文件。 为了达到这个目的,你必须告诉kotlin编译器生成js文件并把它们放到类文件夹中,并且把所有的kotlin文件编译成class目录下的* .class文件(target / classes)
<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>
-
在使用库的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>