mybatis-generator-gui项目打jar包执行

方案一:

 项目右键  ==========  run as   ============   maven install

 

会在项目target目录下生成一个jar包

 

 

 

 

 jar 包的内部结构

 

这个jar 包执行总是报错,一开始提示没有设置main class,手动修改META-INF 下的 MANIFEST.MF ,加入 

Main-Class: com.zzg.mybatis.generator.MainUI
Class-Path: .

再执行还是报错,提示

Caused by: java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory

接下来看方案二,方案二虽然也不能执行,但是找到了出错的问题,修改后能够正常执行

 方案二:

项目右键   =================  export  =================    runnable jar file   

 

 

选择 jar 启动时执行哪个类中的 main 方法  、导出的目录  、依赖的 jar 包打包的方式

第一个Extract required libraries into generated JAR意思是将依赖的jar解压出来变成class丢进你生成的jar里面;
第二个Package required libraries into generated JAR意思是将依赖的jar不解压,直接放进你生成的jar里面;
第三个Copy required libraries into a sub-folder next to the generated JAR意思是将依赖的jar放到你生成jar的同级目录下的”xxx_lib”文件夹里面。

这里我选的第一个(第一个和第二个都亲测可用,第三个应该也是可以的,只是没有去测试)

 

 第一种 jar 包的内部结构

 注意看这里的 resources 目录,它里面的东西并没有直接放在根目录,导致类似下面的代码获取到的 url 都是 null

URL url = Thread.currentThread().getContextClassLoader().getResource("fxml/MainUI.fxml");

 只需要把 resources 里的文件都拷贝到根目录即可

 

 到此 jar 包已经可以正常执行

 使用过程中又遇到了已下问题:

问题1:

 于是把lib包又给拷出去了

 问题2:

点击【代码生成】,查看生成的文件是ANSI格式的,不能直接放到项目中使用,否则会中文乱码

但是之前在编辑器中直接 run as Java application的时候生成的文件是UTF-8格式的

 解决方案有两个

一:在写文件时指定文件格式

BufferedReader reader;
BufferedWriter writer;
 
//reader = new BufferedReader(new FileReader(new File(filedir,filename)));
reader =  new  BufferedReader( new  InputStreamReader( new  FileInputStream( new  File(filedir,filename)), "UTF-8" ));
 
//writer = new BufferedWriter(new FileWriter(new File(filedir,emailDomain+".txt"),true));
writer =  new  BufferedWriter( new  OutputStreamWriter( new  FileOutputStream( new  File(filedir,emailDomain+ ".txt" ), true ), "UTF-8" ));

 二:运行jar包时指定jar包的编码格式

java -jar -Dfile.encoding=utf-8 gui2.jar

 问题3:

首次进入界面连接之前保存过的数据库,提示连接失败

 

 

[ERROR] [18:31:15.352] [JavaFX Application Thread] [] com.zzg.mybatis.generator.controller.MainUIController.lambda$3:163 --> No suitable driver found for jdbc:mysql://localhost:3306/project01?useUnicode=true&useSSL=false&characterEncoding=utf8
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/project01?useUnicode=true&useSSL=false&characterEncoding=utf8
        at java.sql.DriverManager.getConnection(Unknown Source) ~[na:1.8.0_281]
        at java.sql.DriverManager.getConnection(Unknown Source) ~[na:1.8.0_281]
        at com.zzg.mybatis.generator.util.DbUtil.getTableNames(DbUtil.java:34) ~[gui2.jar:na]

但是参数什么的都没有错,用相同的参数再去创建连接,是可以创建成功的,创建成功后再去双击打开之前保存的连接,发现又不报错了 ,肯定是缺少了初始化什么东西了,对比一下两个连接数据库的方法,发现直接双击打开保存过的连接少了三行代码,加上以后就没再报错了

 

 但是我还是有个疑惑没有解开,为什么打成jar包执行才会有这个问题?之前直接跑main方法是没有这个问题的,之前又是在哪里做了这个?为什么打成jar包后没有去执行那里的代码,流程难道不是一样的吗?

 

posted @ 2021-05-19 17:19  1156740846  阅读(332)  评论(0编辑  收藏  举报