前些时间,我在 BioAnno 上遇到一位分享了许多插件的小伙伴。后来发现他主要是用 Java 在做开发,很有意思。一般我用 Java 开发 TBtools 插件我就直接上脚本源码。而这位小伙伴另辟蹊径,搞定了 exe 编译和分析。这个技能和方法很不错,值得学习。为此,我邀请他写了一个教程,希望对感兴趣的朋友也有帮助。
CJ-陈程杰
前期准备
l安装java8-11:https://blog.csdn.net/JunLeon/article/details/122623465
l安装java编辑器IntelliJ IDEA:https://www.jetbrains.com/zh-cn/idea/download/other.html
l安装exe4j:https://blog.csdn.net/MoMozzzzz/article/details/124500607
lJava入门:个人比较推荐《JAVA开发实战经典》
主要流程
1.IntelliJ IDEA新建java项目,编写脚本,测试
2.导入第三方库(可选)
3.将java项目打包为jar文件
4.使用exe4j将jar文件打包为exe文件
5.使用TBtools的plugin creator将exe文件制作为插件
Java安装
一般安装java8-java11之间的版本即可,不要安装过高的版本,否则很可能会出现不兼容的问题导致报错,因为高版本的JDK往往对脚本编写方式进行了优化,本意是方便写代码,但这些新的代码编写方式往往无法被之前的版本识别
Java编辑器IntelliJ IDEA
写java脚本推荐使用社区免费版的IntelliJ IDEA,个人感觉非常好用。里面有许多实用的快捷键,并能自动进行脚本检查,发现许多不易察觉的错误并自动给出多种解决方案,大大提高了写代码的效率,还可以很方便的将第三方库导入到自己的项目,并一起打包成.jar文件。感觉就像用pycharm写python脚本一样顺手,但缺点是占用电脑内存比较高。
安装exe4j
按流程安装即可,需要手动激活一下,网上一搜就可以发现许多公用的密钥
https://blog.csdn.net/MoMozzzzz/article/details/124500607
开始操作
1.新建java项目,编写脚本:
编写一个简单的得到反向互补序列的脚本:
个人比较喜欢用kimi辅助编程(https://kimi.moonshot.cn/)
import java.io.*;
public class DNAReverseComplementFASTA {
public static void main(String[] args) {
String inputFilePath =args[0]; // 输入FASTA文件路径
String outputFilePath = args[1]; // 输出FASTA文件路径
try {
// 读取FASTA文件并获取反向互补序列
String reverseComplementFASTA = getReverseComplementFASTA(inputFilePath);
// 将反向互补序列写入新的FASTA文件
writeFile(outputFilePath, reverseComplementFASTA);
System.out.println("Reverse complement FASTA has been written to " + outputFilePath);
} catch (IOException e) {
e.printStackTrace();
}
}
public static String getReverseComplementFASTA(String filePath) throws IOException {
StringBuilder reverseComplementBuilder = new StringBuilder();
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = br.readLine()) != null) {
if (line.startsWith(">")) {
// 如果是描述头,则直接添加到结果中
reverseComplementBuilder.append(line).append("\n");
} else {
// 如果是序列,则计算反向互补序列
String reverseComplement = getReverseComplement(line);
reverseComplementBuilder.append(reverseComplement).append("\n");
}
}
}
return reverseComplementBuilder.toString();
}
public static String getReverseComplement(String dna) {
StringBuilder reverseComplement = new StringBuilder(dna.length());
for (int i = dna.length() - 1; i >= 0; i--) {
char base = dna.charAt(i);
switch (base) {
case 'A':
reverseComplement.append('T');
break;
case 'T':
reverseComplement.append('A');
break;
case 'C':
reverseComplement.append('G');
break;
case 'G':
reverseComplement.append('C');
break;
default:
throw new IllegalArgumentException("Invalid DNA base: " + base);
}
}
return reverseComplement.toString();
}
public static void writeFile(String filePath, String content) throws IOException {
try (BufferedWriter bw = new BufferedWriter(new FileWriter(filePath))) {
bw.write(content);
}
}
}
红框中的args[0],args[1]这些就是脚本需要接收的命令行参数,这个在最后制作TBtools插件时会用到。
导入第三方库(可选)
先将下载的第三方库(一般是.jar结尾的文件)复制到自己的项目下,在IntelliJ IDEA中右键这个文件,选择最下方的 添加为库 就好了,这里以java中的统计学包apache commons math3为例进行演示:
将项目打包为jar文件
脚本写好之后,需要将java项目打包为jar文件,可以参考下面这个链接:
https://blog.csdn.net/weixin_45118229/article/details/134492142
构建好之后会在这个目录看到一个jar文件:
个人比较喜欢直接在IntelliJ IDEA里面将java项目打包为jar文件,后期熟练了之后只需要鼠标点点点就好了,方便快捷而且不会报错。
得到jar文件之后,一般我会自己在控制台测试一下(win+R;cmd),确认没有问题之后再将jar文件转为exe可执行文件
使用exe4j将jar文件打包为exe文件
可以参考下面这个链接:
https://blog.csdn.net/MoMozzzzz/article/details/124500607
但有两个地方要改一下。由于制作的是命令行参数的程序,而不是GUI程序,因此在第4步要选择下图中的console application:
并在第6步设置最低版本为1.8.0:
顺利得到exe文件之后,一般我也会在命令行界面进行测试,确保没问题之后就可以使用TBTOOLS的plugin creator,将可执行文件整理成TBTOOLS插件了。
使用TBTOOLS的plugin creator将exe文件制作为插件
点击下图这里选择刚刚生成的exe文件:
后面就可以按照官网上的一些教程制作自己的个性化插件了:
https://www.yuque.com/cjchen/hirv8i/rzn46gano35stgvo