簡體   English   中英

為什么 VSCode 一直打開 *.class 文件而不是 .java 文件?

[英]Why does VSCode keep opening *.class files as opposed to .java files?

(我不知道如何將我的屏幕截圖上傳到 stackoverflow。所以這是一個流媒體鏈接: https://streamable.com/0im8tx

在此視頻中,當我 cmd 單擊進入 QueriesController 時,VSCode 打開 QueriesController.class 而不是QueriesController

我在我的工作區中編譯提供了 jar 文件的定義:

    "settings": {
        "java.project.referencedLibraries": {
            "include": [
                "<path-to-jar-that-contains-QueriesController.jar>",
.... 
            "sources": {
                "<path-to-jar-that-contains-QueriesController.jar>": "/my/local/java/definition/src/folder",

有誰知道為什么 VSCode 選擇將定義打開為 a.class 文件而不是 a.java 文件?

我使用命令生成了一個簡單的jar package 並在另一個項目中使用。 確實,當我們單擊 class 名稱時,打開的是.class文件而不是.java文件:

在此處輸入圖像描述

關於如何生成可執行文件jar package,你可以看看這個回復

  1. 編譯.java文件,生成.class;

  2. 生成manifest打包成jar

一般來說,JAR (Java ARchive) 是一種 package 文件格式,通常用於將許多 Java class files和關聯的metadataresources (文本、圖像等)聚合到一個文件中以供分發。

.java 文件不包含在 jar 包中,這就是為什么您打開 .class 文件而不是 .java 文件的原因。

我不熟悉 VSCode,但你的問題在大多數 IDE 中都很常見。

通常在制作 jar 時,它由編譯后的 class 文件組成,而不是原始源代碼。 這樣做的原因是盡可能高效和快速地運行代碼,通常人們不想要 jar 中的源代碼,因為在運行時它們還必須再次重新編譯,這是浪費時間。

在此處輸入圖像描述

看看這張照片。 我剛剛從 mavenrepository 下載了一個 jar 文件,它下載了 jar 的編譯版本。擴展名是.class

IDE 所做的是嘗試使用反編譯器反編譯代碼(在這種情況下,您可以看到 FernFlower 反編譯器)。

但是,它缺少源代碼 (.java) 所具有的格式和代碼內文檔。 這就是為什么大多數 IDE 提供下載源代碼的原因。 Intellij 在頂部顯示了這一點。 其他 IDE 可能會將此設置隱藏得很深。 (你可能需要自己檢查)

下載源碼時,IDE嘗試聯系服務器下載原始源碼。 可能看起來像這樣:

在此處輸入圖像描述

如果仔細觀察,您會發現名稱已更改為代表源代碼的.java

VS Code 在 Java Settings、 Java Download sources 和 Maven download sources下有選項。

默認情況下不啟用。 啟用它后,VS Code 會顯示正確的源文件,盡管名稱看起來是.Class文件。(按 Ctrl + 單擊符號,方法實現、注釋等,JavaDoc 注釋)

如果在 m2 存儲庫中找不到合適的源,它會顯示帶有存根方法的反編譯 class 文件。 與此類似的注釋顯示在文件的開頭。

// Failed to get sources. Instead, stub sources have been generated by the disassembler.
 // Implementation of methods is unavailable.

在任何一種情況下,VS Code 都以只讀模式將 maven 庫文件顯示為.Class文件。 此外,源文件不會顯示在 Java Project Explorer 中。(盡管它存在於 local.m2 存儲庫中)。

希望有幫助! 快樂編碼!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM