Protege 源碼有2種選擇:
- protegeproject/protege: 根據官方 Wiki,該版本缺少部分第三方插件
- protegeproject/protege-distribution:有第三方插件
選擇 protegeproject/protege-distribution 進行構建。
Zest
克隆後載入項目時出錯
Cannot resolve org.eclipse.zest:layouts:1.0.0
一開始還以爲是這個包已經退出了歷史的舞臺,找到了其源碼,位於 Github 上的 gef-legacy 中,然而發現在其從 Eclipse 的一個插件項目變成 Maven 項目以後,第一個版本已經是1.1.0
;再往前,作爲 Eclipse 插件項目時 bundle version 是1.0.0.qualifier
。完全沒有找到1.0.0
這個版本。
曾經注意到protege-distribution
項目需要拉取一個託管於 Github 上的 Maven 倉庫,當時在代理中添加了這個倉庫的地址,以爲上面的依賴已經拉取到了,然而當我瀏覽 Protege Project 的倉庫的時候,發現這個倉庫里正存在org.eclipse.zest.layouts
的1.0.0
版本,說明拉取仍然失敗了。於是將這個倉庫鏡像到了國內。在代理中添加鏡像地址後,成功拉取,還順帶解決了org.eclipse.equinox.supplement
這個依賴。
edu.stanford.protege:protege-desktop
繼續加載項目,碰到如下報錯。
edu.stanford.protege:protege-desktop:zip:os-x:5.6.0 was not found
沒有已經構建好的protege-desktop
,而我們正是需要這個產品,估計需要先構建好protege
,再從protege-distribution
構建第三方插件,最終合成具有第三方插件的 Protege 吧。那就回到構建無第三方插件的protege
項目中。
org.protege.editor.owl.model.obofoundry.OboFoundryRegistryParser_IT
轉到構建protege
項目以後,開始測試protege-editor-owl
模塊時可能會見到failsafe-reports
給出如下報告。
-------------------------------------------------------------------------------
Test set: org.protege.editor.owl.model.obofoundry.OboFoundryRegistryParser_IT
-------------------------------------------------------------------------------
Tests run: 2, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 1.008 sec <<< FAILURE! - in org.protege.editor.owl.model.obofoundry.OboFoundryRegistryParser_IT
shouldParseRegistryFromStandardLocation(org.protege.editor.owl.model.obofoundry.OboFoundryRegistryParser_IT) Time elapsed: 0.978 sec <<< ERROR!
com.fasterxml.jackson.core.JsonParseException:
Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
at [Source: (BufferedInputStream); line: 1, column: 2]
at org.protege.editor.owl.model.obofoundry.OboFoundryRegistryParser_IT.shouldParseRegistryFromStandardLocation(OboFoundryRegistryParser_IT.java:19)
可能原因是OboFoundryRegistryParser_IT
在請求 https://obofoundry.org/registry/ontologies.jsonld 時,該網站返回了 html 響應而不是 json 響應,com.fasterxml.jackson
沒有解析到標準的 json 文件而報錯。不想大費周章改代碼的話,解決辦法可以是註釋掉shouldParseRegistryFromStandardLocation
這個測試類方法,暫時跳過這一項測試。
protege-distribution
構建完成後,是時候回到protege-distribution
的構建了。由於上述步驟只構建了platform-independent
版本,沒有單獨的 Windows、Linux 和 Mac OS X 版本,這些系統特異版本的壓縮包文件在自己部署的 Maven 倉庫中是下載不到的,因此,在pom.xml
中的所有關於系統特異性的任務定義都需要註釋掉,例如org.apache.maven.plugins
、maven-assembly-plugin
中的execution
;properties
中的protege.version
也需要改爲與protege
項目對應的版本;還有一個可選項是version
部分改爲<version>${protege.version}</version>
以使得protege-distribution
與protege
版本一致。隨後運行 Maven 進行構建即可構建成功。
運行
由於內有需要 Java 5 才能運行的組件,目前測試能夠運行 Protege 的最高 Java 版本是 Java 8;Java 11 環境無法運行,會報錯。可參考 Protege 發行版的做法,自帶 Java 環境。