【发布时间】:2019-09-17 05:56:39
【问题描述】:
我有一个基于 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 解决此问题?
【问题讨论】:
-
该类在jar文件中可用吗?如果没有在本地重建项目并确认 jar 文件中存在类文件并尝试。你试过在tomcat中部署你的应用程序吗?
-
是的,缺少的类存在于依赖项目的 jar 中。我通过进入
target/文件夹和jar -tvf验证了这一点 -
尝试清理tomcat工作目录并启动应用程序。还可以尝试在本地 tomcat 中运行 eclipse 之外的应用程序。
-
在 Eclipse 之外运行正常(在另一台机器上)
-
两个项目都在同一个工作区?与主项目一起导入?
标签: eclipse maven kotlin m2e-wtp