我有一个基于 Maven 的 web 应用程序,它具有多个“本地”Maven 依赖项(即依赖项本身就是与主应用程序在同一个 Eclipse 工作区中维护的项目)。
我最近重写了从 Java 到 Kotlin 的依赖项之一。以下是 Kotlin 项目的相关部分pom.xml
:
<properties>
<kotlin.version>1.3.50</kotlin.version>
<project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>
<project.reporting.outputEncoding>ISO-8859-1</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>${kotlin.version}</version><!--$NO-MVN-MAN-VER$ -->
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-kotlin</artifactId>
<version>2.9.9</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
<plugins>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
当我尝试在 Eclipse 内的 Tomcat 中启动应用程序时,出现错误:
22:40:22 SEVERE: Context initialization failed
[...]
Caused by: java.lang.NoClassDefFoundError: ... (one of my classes from the new project)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1363)
我已经执行了许多故障排除步骤,并且毫无疑问地确定问题是由依赖项目中的 Kotlin 引起的,即如果我将 Kotlin 项目恢复到原始 Java 项目,一切都会再次正常运行。
如何使用最新版本的 Eclipse、Kotlin、Maven、Tomcat 和 m2e-wtp 解决此问题?