概述
背景
鉴于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打包失败所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复