Запуск DocumentationTool для исходников из OpenJDK 11 - PullRequest
0 голосов
/ 13 апреля 2019

Я пытаюсь запустить DocumentationTool на источниках из OpenJDK 11.

Вывод выглядит так:

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;

?

1 Ответ

0 голосов
/ 04 мая 2019

Вы можете либо скомпилировать весь модуль, либо вам нужно «исправить» модуль. Вот пример каждого из них, если вы распакуете 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))
...