簡體   English   中英

在OpenJDK 11上運行DocumentationTool

[英]Running DocumentationTool on sources from OpenJDK 11

我試圖在OpenJDK 11的源代碼上運行DocumentationTool

輸出如下所示:

Constructing Javadoc information...
/Users/Borkdude/git/openjdk-jdk11/src/java.base/share/classes/java/lang/IllegalStateException.java:26: error: package exists in another module: java.base
package java.lang;

這重復了大約100次。

我在Clojure中看到的代碼如下:

(import '[javax.tools ToolProvider])
(let [dt (ToolProvider/getSystemDocumentationTool)
        fm (.getStandardFileManager dt nil nil nil)
        files (.getJavaFileObjectsFromFiles
               fm
               (filter #(str/ends-with? (.getPath %) ".java")
                       (file-seq (io/file "/Users/Borkdude/git/openjdk-jdk11/src/java.base/share/classes/java/lang"))))
        task (.getTask dt nil fm nil nil nil files)]
    (.call task))

如何擺脫錯誤:

error: package exists in another module: java.base
package java.lang;

您可以編譯整個模塊,也可以“修補”模塊。 這是每個的示例,假設您將src.zip解壓縮到/tmp

要編譯整個模塊:

(import '[javax.tools ToolProvider])
(require '[clojure.string :as str])

(let [dt (ToolProvider/getSystemDocumentationTool)
      fm (.getStandardFileManager dt nil nil nil)
      files (.getJavaFileObjectsFromFiles
             fm
             (filter #(str/ends-with? (.getPath %) ".java")
                     (file-seq (io/file "/tmp/src/java.base/"))))
      task (.getTask dt nil fm nil nil nil files)]
  (.call task))  

修補模塊(即只編譯某些來源):

(let [dt (ToolProvider/getSystemDocumentationTool)
      fm (.getStandardFileManager dt nil nil nil)
      files (.getJavaFileObjectsFromFiles
             fm
             (filter #(str/ends-with? (.getPath %) ".java")
                     (file-seq (io/file "/tmp/src/java.base/java/lang"))))
      opts ["--patch-module" "java.base=/tmp/src"]
      task (.getTask dt nil fm nil nil opts files)]
  (.call task))

暫無
暫無

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

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