Springboot使用Java和Kotlin混编(Maven)

pom.xml

参考
Kotlin语言中文站 - 同时编译 Kotlin 与 Java 源代码
Kotlin语言中文站 - 无参编译器插件

<properties>
    <java.version>1.8</java.version>
	<kotlin.version>1.4.21</kotlin.version>
	<!-- 启用kotlin增量编译 -->
	<kotlin.compiler.incremental>true</kotlin.compiler.incremental>
</properties>

<dependencies>
	<!-- kotlin -->
	<dependency>
		<groupId>org.jetbrains.kotlin</groupId>
		<artifactId>kotlin-reflect</artifactId>
		<version>${kotlin.version}</version>
	</dependency>
	<dependency>
		<groupId>org.jetbrains.kotlin</groupId>
		<artifactId>kotlin-stdlib-jdk8</artifactId>
		<version>${kotlin.version}</version>
	</dependency>
	<dependency>
		<groupId>com.fasterxml.jackson.module</groupId>
		<artifactId>jackson-module-kotlin</artifactId>
	</dependency>
</dependencies>

<build>
	<plugins>
	    <plugin>
	        <groupId>org.jetbrains.kotlin</groupId>
	        <artifactId>kotlin-maven-plugin</artifactId>
	        <configuration>
	            <jvmTarget>1.8</jvmTarget>
	            <args>
	                <arg>-Xjsr305=strict</arg>
	            </args>
	            <compilerPlugins>
	            	<!-- Spring使用动态代理需要所有Bean可继承,该插件为所有Bean添加open关键字 -->
	                <plugin>spring</plugin>
	                <!-- 该插件为jpa实体类解决没有无参构造器的问题 -->
	                <!-- <plugin>jpa</plugin> -->
	                <plugin>no-arg</plugin>
	            </compilerPlugins>
	            <pluginOptions>
	            	<!-- 有些持久层框架需要实体类需要无参构造器,使用该注解标注解决kotlin data class没有无参构造器的问题 -->
	                <option>no-arg:annotation=com.example.annotations.NoArg</option>
	            </pluginOptions>
	        </configuration>
	        <dependencies>
	            <dependency>
	                <groupId>org.jetbrains.kotlin</groupId>
	                <artifactId>kotlin-maven-allopen</artifactId>
	                <version>${kotlin.version}</version>
	            </dependency>
	            <dependency>
	                <groupId>org.jetbrains.kotlin</groupId>
	                <artifactId>kotlin-maven-noarg</artifactId>
	                <version>${kotlin.version}</version>
	            </dependency>
	        </dependencies>
	    </plugin>
	    <!-- java和kotlin混和编译处理 -->
	    <plugin>
	        <groupId>org.apache.maven.plugins</groupId>
	        <artifactId>maven-compiler-plugin</artifactId>
	        <configuration>
	            <source>${java.version}</source>
	            <target>${java.version}</target>
	        </configuration>
	        <executions>
	            <!-- 替换会被 maven 特别处理的 default-compile -->
	            <execution>
	                <id>default-compile</id>
	                <phase>none</phase>
	            </execution>
	            <!-- 替换会被 maven 特别处理的 default-testCompile -->
	            <execution>
	                <id>default-testCompile</id>
	                <phase>none</phase>
	            </execution>
	            <execution>
	                <id>java-compile</id>
	                <phase>compile</phase>
	                <goals>
	                    <goal>compile</goal>
	                </goals>
	            </execution>
	            <execution>
	                <id>java-test-compile</id>
	                <phase>test-compile</phase>
	                <goals>
	                    <goal>testCompile</goal>
	                </goals>
	                <configuration>
	                    <skip>true</skip>
	                </configuration>
	            </execution>
	        </executions>
	    </plugin>
	</plugins>
	</build>

com.example.annotations.NoArg.kt

package com.example.annotations

/**
 * 标注在kotlin data class上来生成无参构造函数
 * 须在pom文件kotlin-maven-plugin插件中配置
 */
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.BINARY)
annotation class NoArg
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值