简介
IDE,IDE,IDE,集成开发环境当然好啦,可以有效的组织工程结构,有语法高亮,自动提示等等功能(如: eclipse, idea等等)。但是,有时我们在一个只有命令行界面的机器上,开发一个java小工具,没必要搞那么复杂吧,下面是我正在开发的一个小设备的初始化工具,looklook,纯纯的命令行。
先看项目结构树
一、modules目录
放的是基础功能类
devio.java:通过jna模块调用libtih_usb3_comm.so,实现设备枚举、设备打开、设备通信,关闭设备连接等功能。
devfunc.java: 通过调用devio的通信接口,调用设备的硬件功能。
util.java: 里面就是一些类型转换,解析之类的常用函数。
二、libs目录
放的是jna模块的jar包以及c动态库(设备通信库)
三、bin目录
通过make生成的工具,以jar包的形式输出到bin目录。同时make的同时,可以把libs目录复制到bin目录,以便于后期工具的发布(直接复制bin目录到其他机器上就可以了)。
四、classes目录:
通过make - javac 生成的.class文件,临时存放到classes目录下,待生成jar包后,直接删除掉。
五、init.java
工具的main入口在这里。
六、Makefile
当然是主角了,所有的编译过程都在这里了,内容如下:
CLASSPATH=-cp .:libs/jna-4.1.0.jar
all:
javac $(CLASSPATH) -d classes modules/devio.java
javac $(CLASSPATH) -d classes modules/devfunc.java
javac $(CLASSPATH) -d classes modules/util.java
jar cvf bin/modules.jar -C classes .
rm -fr classes/* bin/tassu1.log
cp -fr ./libs ./bin
@javac -cp bin/modules.jar -d classes init.java
jar -cvfe bin/init.jar init -C classes .
rm -fr classes/* bin/tassu1.log
run:
cd ./bin && java -Djava.ext.dirs=.:./libs -jar init.jar
Makefile解释
1. 设置CLASSPATH
CLASSPATH=cp .:libs/jna-4.1.0.jar
javac 根据设置好的路径寻找依赖的jar包,本文中只是寻找jna包。
2. all 开始编译
前3行,编译modules中的java类,生成的.class文件放到classes文件夹中。
第4行,把编译好的.class文件压缩成jar包,生成到bin文件夹。
第5行,删除classes中的.class文件,没用了。
第6行,把libs目录拷贝到bin目录。
第7行,编译init工具,将生成的.class文件放到classes文件夹中。(注意:因为init工具依赖的是modules.jar, 所以-cp换成bin/modules.jar)。
第8行,把init.class压缩成init.jar, 并指定main函数所在的类。
第9行,删除classes中的.class文件。
编译过程如图
3. 测试
直接在命令行下,输入:make run就可以执行init.jar包了。
cd ./bin && java -Djava.ext.dirs=.:./libs -jar init.jar
意思是,先从Makefile所在路径切换到bin路径,然后执行后面的java指令。
-Djava.ext.dirs 指定了init.jar的依赖包的搜寻路径。
发布
bin目录发布后,就没有了上文提到的make run指令了,那怎么办呢?
init.sh
在bin文件夹下,有一个实现写好的init.jar启动脚本,可以直接运行这个脚本启动程序。
init.sh脚本内容如下:
#/usr/bin/bash
java -Djava.ext.dirs=.:./libs -jar init.jar
完!