Pra*_*ant 4 maven kotlin spring-boot
我已经Spring Boot使用创建了一个项目Kotlin。我想创建一个.jar包含所有依赖项的文件,以便我可以从命令行运行该应用程序。主类的 FQCN 是:com.example.Application.kt。我的配置中有以下配置pom.xml:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.example.Application</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
应用程序无法开始抱怨找不到 mainClass。这是异常示例:
Exception in thread "main" java.lang.ClassNotFoundException: com.example.Application
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:93)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:46)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)
Run Code Online (Sandbox Code Playgroud)
我缺少什么?
我只是想自己学习 Kotlin,但我怀疑您可能需要附加Kt到类名的末尾。例如:
<manifest>
<mainClass>com.example.ApplicationKt</mainClass>
</manifest>
Run Code Online (Sandbox Code Playgroud)
与 Spring 无关,我自己在尝试构建可执行 JAR 时遇到了这个问题。如果您解压 JAR 并查看类文件,我相信您会发现一个ApplicationKt.class.
如果是这样,这是因为您没有main在类中定义该函数。在这种情况下,Kotlin 会生成一个属于<filename>Kt.class您的文件版本的静态方法。根据这个SO答案:
与 Java 不同,Kotlin 允许您定义不在类内部的函数。但如果你想让 Java 与 Kotlin 对话,这就成了一个问题。怎么解决呢?将这些函数转换为名为带有“Kt”后缀的文件的类的静态方法
您可以在文档中找到更多相关信息
| 归档时间: |
|
| 查看次数: |
1758 次 |
| 最近记录: |