springboot 使用java+kotlin混合开发,基于maven打包失败

本文详细解析了在使用Kotlin与SpringBoot开发过程中遇到的打包问题,包括pom.xml配置错误导致的主类识别失败及kotlin编译器路径设置不当引起的编译错误。通过调整spring-boot-maven-plugin配置和明确kotlin源代码路径,成功解决了打包和运行问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

鉴于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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值