前段时间接了一个 parttime job,是给生命学院的老师开发一个 Cytoscape 的插件。本文作个简单的技术总结,全部的细节都基于 Cytoscape3.3.0,阅读时请注意版本号。php
首先要安装好 Cytoscape、JDK 8 和 Maven。在此我不作赘述。java
若是你没有接触过 Maven,最好稍微了解一下。由于 Hello World 就须要利用 Maven 命令自动生产模范代码。Cytoscape 的 wiki 上便有详细的介绍,请参见 Tutorial:Creating_an_OSGi_Bundle_Cytoscape_3_App。git
关于 Maven,还有两个问题须要解决,其中一个是若是你使用了 Java 8 的函数式编程特性,颇有可能致使编译能经过可是没办法用 Maven 打包,这是 Maven 插件的问题,个人解决方案是避免使用。若是你必定要使用 Java 8 的新特性,能够尝试一下使用最新版本的插件。另一个问题是怎样引入一个外部的 jar 包。这能够参考 stringApp 这个插件的 pom.xml。注意,其中 groupID 是org.cytoscape
的这些包依赖的写法和末尾那些外部包依赖写法上的区别。由于Cytoscape本身的那些包只是编译时依赖,而外部包是运行时依赖。github
Cytoscape 的插件就是 jar包,除了须要放在jar包里面的常规 class 文件,咱们还须要放一些数据文件,好比 sqlite3 的数据库,csv 格式的文本文件等等。那么怎么在运行时访问这些资源呢?sql
针对这个问题,你能够看我在Stackoverflow上的一个回答:add sqlite DB to executable JAR file数据库
通常状况下能够继承 AbstractTask,将任务在 run 方法中实现。这样作的好处在于 Cytoscape 能够捕获到其中的异常,在日志中显示,以供除虫。并且能够利用 TaskMonitor 显示执行任务的进度。可是在实践中发现显示任务进度这个功能会和弹出窗口冲突,也就是说我无法在执行任务的中途弹出一个窗口让用户作一些选择。这个时候就只能放弃继承 AbstractTask,直接把任务放在所触发的动做中。apache
可使用标准输出,也可使用 Cytoscape 的日志系统。(在 Windows 下使用命令行启动 Cytoscape,可是 cmd 的标准输出并不能显示,因此推荐用后者)后者能够点击 Cytoscape 界面左下角的图标显示。编程
import org.apache.log4j.Logger; final Logger logger = Logger.getLogger("org.cytoscape.application.userlog");
阅读别人开发的 Cytoscape 插件是最快捷的学习方法,当你多方求索而不得时能够考虑在 Cytoscape 的 Google Groups 里面求助。若是仍是不行,就只能诉诸 Cytoscape 源码了。app
就说这么多,建议从这里开始,https://github.com/cytoscape/cytoscape-app-samples,挑几个样例过一遍代码,再开始编码。函数式编程