Cytoscape插件開發小結

前段時間接了一個 parttime job,是給生命學院的老師開發一個 Cytoscape 的插件。本文作個簡單的技術總結,全部的細節都基於 Cytoscape3.3.0,閱讀時請注意版本號。php

Hello World from Maven

首先要安裝好 Cytoscape、JDK 8 和 Maven。在此我不作贅述。java

若是你沒有接觸過 Maven,最好稍微瞭解一下。由於 Hello World 就須要利用 Maven 命令自動生產模範代碼。Cytoscape 的 wiki 上便有詳細的介紹,請參見 Tutorial:Creating_an_OSGi_Bundle_Cytoscape_3_Appgit

關於 Maven,還有兩個問題須要解決,其中一個是若是你使用了 Java 8 的函數式編程特性,頗有可能致使編譯能經過可是沒辦法用 Maven 打包,這是 Maven 插件的問題,個人解決方案是避免使用。若是你必定要使用 Java 8 的新特性,能夠嘗試一下使用最新版本的插件。另一個問題是怎樣引入一個外部的 jar 包。這能夠參考 stringApp 這個插件的 pom.xml。注意,其中 groupID 是org.cytoscape的這些包依賴的寫法和末尾那些外部包依賴寫法上的區別。由於Cytoscape本身的那些包只是編譯時依賴,而外部包是運行時依賴。github

More about packaging

Cytoscape 的插件就是 jar包,除了須要放在jar包裏面的常規 class 文件,咱們還須要放一些數據文件,好比 sqlite3 的數據庫,csv 格式的文本文件等等。那麼怎麼在運行時訪問這些資源呢?sql

針對這個問題,你能夠看我在Stackoverflow上的一個回答:add sqlite DB to executable JAR file數據庫

AbstactTask

通常狀況下能夠繼承 AbstractTask,將任務在 run 方法中實現。這樣作的好處在於 Cytoscape 能夠捕獲到其中的異常,在日誌中顯示,以供除蟲。並且能夠利用 TaskMonitor 顯示執行任務的進度。可是在實踐中發現顯示任務進度這個功能會和彈出窗口衝突,也就是說我無法在執行任務的中途彈出一個窗口讓用戶作一些選擇。這個時候就只能放棄繼承 AbstractTask,直接把任務放在所觸發的動做中。apache

Debugging

可使用標準輸出,也可使用 Cytoscape 的日誌系統。(在 Windows 下使用命令行啓動 Cytoscape,可是 cmd 的標準輸出並不能顯示,因此推薦用後者)後者能夠點擊 Cytoscape 界面左下角的圖標顯示。編程

import org.apache.log4j.Logger;
final Logger logger = Logger.getLogger("org.cytoscape.application.userlog");

Resources

閱讀別人開發的 Cytoscape 插件是最快捷的學習方法,當你多方求索而不得時能夠考慮在 Cytoscape 的 Google Groups 裏面求助。若是仍是不行,就只能訴諸 Cytoscape 源碼了。app

就說這麼多,建議從這裏開始,https://github.com/cytoscape/cytoscape-app-samples,挑幾個樣例過一遍代碼,再開始編碼。函數式編程

相關文章
相關標籤/搜索