java - 是否可以使用 Java 和 kotlin 来创建 Spring Boot 应用程序?
问题描述
我一直在尝试使用带有 Java 和 Koltin 的 Maven 构建一个 Spring Boot 应用程序。没有错误,什么都没有,但是在运行它时它只是说 NoDefClassException 并且没有找到我的异常,我的存储库,基本上任何来自 kotlin 的东西。这是我的 pom.xml 插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<configuration>
<args>
<arg>-Xjsr305=strict</arg>
</args>
<compilerPlugins>
<plugin>spring</plugin>
</compilerPlugins>
</configuration>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-allopen</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>compile</id>
<phase>process-sources</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>1.9.1</version>
<configuration>
<schemaVersion>V2</schemaVersion>
<resourceGroup>media-services</resourceGroup>
<appName>companysystemservices</appName>
<pricingTier>F1</pricingTier>
<region>westeurope</region>
<runtime>
<os>linux</os>
<javaVersion>java11</javaVersion>
<webContainer>java11</webContainer>
</runtime>
<deployment>
<resources>
<resource>
<directory>${project.basedir}/target</directory>
<includes>
<include>*.jar</include>
</includes>
</resource>
</resources>
</deployment>
</configuration>
</plugin>
</plugins>
</build>
我怎样才能让他们在这里编译和运行所有东西?
编辑:我的包资源管理器是这样的:
src/main/java
com.company
annotations
config
controllers
daos
dtos
model
services
utils
CompanyApp.java
模型中有 3 个 kotlin,第一个包含 10 个异常,第二个 12 个存储库和最后 3 个 sql 投影作为数据类。
我还添加了一个 CommandLineRunner 并试图抛出一个异常,得到了这个:
java.lang.NoClassDefFoundError: com/company/model/BadRequest400Exception
at com.company.CompanyApplication.run(CompanyApplication.java:20) ~[classes/:na]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:795) ~[spring-boot-2.3.4.RELEASE.jar:2.3.4.RELEASE]
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:779) ~[spring-boot-2.3.4.RELEASE.jar:2.3.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:322) ~[spring-boot-2.3.4.RELEASE.jar:2.3.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) ~[spring-boot-2.3.4.RELEASE.jar:2.3.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.3.4.RELEASE.jar:2.3.4.RELEASE]
at com.company.CompanyApplication.main(CompanyApplication.java:15) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.3.4.RELEASE.jar:2.3.4.RELEASE]
Caused by: java.lang.ClassNotFoundException: com.company.model.BadRequest400Exception
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na]
at java.base/java.lang.Class.forName0(Native Method) ~[na:na]
at java.base/java.lang.Class.forName(Class.java:398) ~[na:na]
at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:144) ~[spring-boot-devtools-2.3.4.RELEASE.jar:2.3.4.RELEASE]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na]
... 12 common frames omitted
我试图在本地的eclipse上运行它,它在intellij上运行良好。但是日食是免费的,所以我更喜欢日食,但似乎无法让它发挥作用。
解决方案
对的,这是可能的。据我在您的项目结构中看到的,您在 java 源代码下有 Kotlin 代码。我将这种方法与 gradle 和 IntelliJ 一起使用,但它应该与 eclipse 和 maven 一起使用。例如,如果您有
src/main/java
com.company
config
JavaConfig.java
KotlinConfig.kt
您需要将 java 和 Kotlin 源代码分开。
src/main/java
com.company
config
JavaConfig.java
src/main/kotlin
com.company
config
KotlinConfig.kt
推荐阅读
- c# - 通过 DecompileTypeAsString 反编译时如何反编译生成相同代码的特定方法
- android - Android导航组件不适用于对话框片段
- flutter - Flutter:应用内产品在产品名称旁边显示应用名称
- javascript - Zapier 的代码循环遍历一组对象,每个对象提取一个值,然后平均这些值
- android - 计时器完成后重定向到不同的片段
- accessibility-insights - Accessibility Insights for Windows 中的 ControlType 是什么,它如何映射到 HTML 元素?
- python - 如何在 pyspark 环境会话中设置 blob conf
- bash - 如何处理超时运行的脚本的非超时异常?
- angular - 选择控件绑定在 Angular 8 中不起作用
- python - 我的输入有时需要多次才能进入 if 语句