无法在 visual studio 代码中 运行 Eclipse Java 项目(无法找到或加载主 class)

Cannot run Eclipse Java project in visual studio code (Could not find or load main class)

我想从 Eclipse 转移到 Visual Studio 代码,我可以完全打开项目。 Visual Studio 代码可以识别 .classpath,反之亦然。

Visual Studio Code can recognize Java project as same as Eclispse do.

然后我使用 Main 方法和 运行 转到 java 文件。它显示错误为

Error: Could not find or load main class com.untitled.game.Game Caused by: java.lang.ClassNotFoundException: com.untitled.game.Game

我从未安装 Code Runner,我尝试通过清理 java 服务器工作区来清理工作区,但没有任何效果。它仍然有同样的问题。

不过,这个项目以前在Eclipse中可以运行,从来没出过问题。

PS。在我按照这个 instuction. 之后,我可以在 VS Code 中创建 Java 项目并正确地 运行 。但是如果我从 Eclipse 运行 Java 项目,它仍然有同样的问题。 (java.lang.ClassNotFoundException)

PS.1 如果我的 Java 项目不在 Windows 驱动器中,VS Code 仍然显示错误,尽管重新配置 .setting 与 [=41] 相同=] 从 VS Code 新创建的项目。

欢迎使用 SO.Are 您刚开始使用 vscode?如果是,请检查Java解释器是否选择正确,是否安装了几个必要的扩展,必要的扩展在这个article中有提到。希望能帮到你。

最后,我可以使用 .vscode 文件夹中的设置 运行 vscode 中的 Eclipse java 项目。

首先,正常打开Java项目文件夹。

然后在项目的根目录下创建文件夹 .vscode 并创建两个文件,settings.jsonlaunch.json.

settings.json文件中,添加项目配置如下。

{
    "java.project.sourcePaths": ["src"],
    "java.project.outputPath": "bin",
    "java.project.referencedLibraries": [
        "lib/**/*.jar"
    ]
}
再次

运行项目,会看到报错,不用担心,vscode会自动添加配置。 在launch.json文件中,你会看到这样的配置。

{
  "configurations": [
    {
      "type": "java",
      "name": "Launch Game",
      "request": "launch",
      "mainClass": "com.untitled.game.Game",
      "projectName": "Alien Hunter",
    }
  ]
}

如果运行将位置在Windows驱动器之外的项目,它仍然有错误,因为它将-cp "path"命令缩短为.argfile 保存在 %temp% 文件夹中并在 运行 启动项目时调用。

添加配置以解决问题。

"shortenCommandLine": "none"

如果Eclipse中有原生库,以我的项目为例,我使用的是LWJGL,我会添加如下配置。

"vmArgs": "-Djava.library.path=lib/lwjgl/native/windows"

如果项目在src文件夹之外的另一个文件夹中有资源,例如res文件夹,文件夹right-click和selectAdd Folder to Java Source Path,项目可以访问资源文件。

launch.json

{
  "configurations": [
    {
      "type": "java",
      "name": "Launch Game",
      "request": "launch",
      "mainClass": "com.untitled.game.Game",
      "projectName": "Alien Hunter",
      "vmArgs": "-Djava.library.path=lib/lwjgl/native/windows",
      "shortenCommandLine": "none"
    }
  ]
}