從源碼構建 Protege

Protege 源碼有2種選擇:

選擇 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.layouts1.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.pluginsmaven-assembly-plugin中的executionproperties中的protege.version也需要改爲與protege項目對應的版本;還有一個可選項是version部分改爲<version>${protege.version}</version>以使得protege-distributionprotege版本一致。隨後運行 Maven 進行構建即可構建成功。

運行

由於內有需要 Java 5 才能運行的組件,目前測試能夠運行 Protege 的最高 Java 版本是 Java 8;Java 11 環境無法運行,會報錯。可參考 Protege 發行版的做法,自帶 Java 環境。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章