我是靠谱客的博主 生动牛排,最近开发中收集的这篇文章主要介绍springboot 使用java+kotlin混合开发,基于maven打包失败,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

背景

鉴于springboot的快速开发以及kotlin的简介语法,公司新项目使用kotlin进行开发。开发工具使用IDEA,本地运行正常,但是通过maven进行项目打包的时候出现异常

工具

springboot 【2.1.2】  kotlin【1.2.7】jdk【1.8】maven【3.5】

问题分析

查阅网上资料说 运行 

mvn clean kotlin:compile package -Dmaven.test.skip=true,然而并没有什么卵用;

分析:打包问题基本可以先猜测是pom的配置问题,先查看build这块的内容

pom.xml内容如下

	。。。省略部分
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-kotlin</artifactId>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-reflect</artifactId>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
</dependency>
<build>
<sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<configuration>
<args>
<arg>-Xjsr305=strict</arg>
</args>
<compilerPlugins>
<plugin>spring</plugin>
</compilerPlugins>
<jvmTarget>1.8</jvmTarget>
</configuration>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-allopen</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>

执行mvn package 打包操作,控制台报错:

[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.1.2.RELEASE:repackage (default) on project srv-base: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:2.1.2.RELEASE:repackage failed: Unable to find main class -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException

Unable to find main class -> [Help 1] :说明未指定运行主类,spring-boot-maven-plugin中指定启动类路径注意:启动类为Kotlin的.kt文件时,指定的类名后需要加上Kt,【com.xxx.xxx.ApplicationKt否则包启动无法还是无法找到主类

 <plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.xxx.xxx.ApplicationKt</mainClass><!-- 使用kotlin作为启动类时,com.xxx.xxx.Application 后面是需要加上Kt -->
</configuration>
</plugin>

再次打包没有报错,但是运行时还是找不到主类。。。。。查看生成的包内容发现只有java编写的类有生成到包目录下,kotlin文件都未正常生成到包目录中

一脸懵逼,应该是kotlin编译器配置有问题,网上查阅后发现需要指定kotlin编译的项目路径,修改pom中kotlin-maven-plugin 指定资源路径


<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<configuration>
<args>
<arg>-Xjsr305=strict</arg>
</args>
<jvmTarget>1.8</jvmTarget><!-- 需要指定jdk的版本号-->
</configuration>
<executions>
<execution>
<id>compile</id>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
<!--<sourceDir>${project.basedir}/src/main/java</sourceDir>-->
</sourceDirs>
</configuration>
</execution>
<execution>
<id>test-compile</id>
<goals>
<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>
</plugin>

再次打包-》运行,一切正常

已经被maven玩了好几次,这次又被kkotlin-maven-plugin玩了一次,记录一下避免忘记

参考链接:http://www.kotlincn.net/docs/reference/using-maven.html

 

 

最后

以上就是生动牛排为你收集整理的springboot 使用java+kotlin混合开发,基于maven打包失败的全部内容,希望文章能够帮你解决springboot 使用java+kotlin混合开发,基于maven打包失败所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部