zoukankan      html  css  js  c++  java
  • 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包后没有去执行那里的代码,流程难道不是一样的吗?

  • 相关阅读:
    鉴权系统的梳理及并发问题的考虑
    分布式事物解决选择
    电商平台客服和商铺的数据表设计( 初稿记录)43
    问题整理
    关于
    问题整理
    问题整理(常问3连)
    问题整理
    强引用、软引用、弱引用、幻象引用的区别
    通过aop获取切面方法请求入参名称和值的json打印
  • 原文地址:https://www.cnblogs.com/LcxSummer/p/14786016.html
Copyright © 2011-2022 走看看