6

我有一个基于 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 解决此问题?

4

2 回答 2

2

临时解决办法

我可以通过进入Project menu -> Maven -> "Disable Workspace Resolution"然后手动进入每个依赖项项目并执行Maven -> install来让应用程序再次运行。

这是非常不令人满意的,因为禁用工作区分辨率时会丢失许多开发人员的生产力功能。因此,我将暂时保留这个问题并提供赏金,以期获得更永久的解决方案。

于 2019-09-17T15:28:41.800 回答
0

您的依赖项看起来不错。我没有发现任何错误。

但这里有一些你应该研究的理论:

  • 这可能是因为工作区中有多个项目。

    工作区中可能有多个项目会增加出现问题的机会。

    这可能是因为其他项目具有不同的性质。

    这可能是因为项目如何着陆(排序顺序,加载顺序,其他什么?)。

    这可能是因为某处的某些逻辑是不稳定的。

    它可能正在构建项目使 Eclipse 处于意外状态。

    这可能是因为某种增量逻辑认为由于启动项目而无需尝试任何构建的更改。

    这可能是因为正在使用的启动机制是错误的。

于 2019-10-09T06:28:44.433 回答