一、寻找入口类
读源码也可以说是一种逆向工程,最重要的就是要知道从哪里开始读代码。对于java二进制程序则最重要的就是找到main函数,找到main函数后才能知道执行逻辑是如何开始的。我们首先看一下mybatis-generator是如何开始的呢?mybatis-generator执行脚本如下(gen.bat):
java -jar mybatis-generator-core-1.3.2.jar -configfile generator.xml -overwrite
我们可以发现是用java执行的可执行jar包mybatis-generator-core-1.3.2.jar,重要我们就会想起jar文件中会有一个\META-INF 目录,目录下面有一个文件MANIFEST.MF,里面内容很多,找到Main-Class:关键字行即可,内容如下:
Main-Class: org.mybatis.generator.api.ShellRunner
如上所示类org.mybatis.generator.api.ShellRunner就是我们要解读源码的入口
二、命令行参数
找到入口函数后就可以到源码中根据类路径找到该类,在解读main入口函数之前,先看一下命令行参数如下
private static final String CONFIG_FILE = "-configfile"; //$NON-NLS-1$
private static final String OVERWRITE = "-overwrite"; //$NON-NLS-1$
private static final String CONTEXT_IDS = "-contextids"; //$NON-NLS-1$
private static final String TABLES = "-tables"; //$NON-NLS-1$
private static final String VERBOSE = "-verbose"; //$NON-NLS-1$
private static final String FORCE_JAVA_LOGGING = "-forceJavaLogging"; //$NON-NLS-1$
private static final String HELP_1 = "-?"; //$NON-NLS-1$
private static final String HELP_2 = "-h"; //$NON-NLS-1$
-config:配置文件,也是我们自动代码对应的xml文件,从后面的执行逻辑可以看出,这个文件是必须有的。它包含了jdbc的类路径驱动包、jdbc相关连接参数信息、接口相关参数信息、领域对象相关参数信息以及要生成代码的表信息等等。
-overwrite:默认下载时带此参数,表示如果之前已经生成过代码,但是还是要用新的进行覆盖;可以忽略此参数。
-contextids:上下文表示,用逗号分隔;可以忽略。
-table:从命令行传入生成的表,用逗号分隔;可以忽略。
-verbose:控制台是否输出详细过程日志;可忽略。
-forceJavaLogging:强制java日志;可忽略。
-?:显示帮助信息,将忽略其他信息,不执行代码生成。
-help:同“?”。