【问题标题】:Kotlin not working with Eclipse Workspace ResolutionKotlin 无法使用 Eclipse 工作区分辨率
【发布时间】: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


【解决方案1】:

临时解决办法

我可以通过Project menu -> Maven -> "Disable Workspace Resolution" 让应用再次运行,然后手动转到每个依赖项项目并执行 Maven -> install

这很不令人满意,因为禁用工作区分辨率时会丢失许多开发人员生产力功能。 所以我暂时保留这个问题并提供赏金以希望得到更永久的修复。

【讨论】:

    【解决方案2】:

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

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

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

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

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

      这可能是因为项目的着陆方式(排序顺序、加载顺序、 还有什么?)。

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

      它可能正在构建项目,使 Eclipse 出现意外 状态。

      这可能是因为某种 delta 逻辑认为没有 需要尝试更改为无构建,因为启动 项目。

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

    【讨论】:

      猜你喜欢
      • 2012-05-19
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 2013-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多