iohao / ioGame

无锁异步化、事件驱动架构设计的 java netty 网络编程框架; 轻量级,无需依赖任何第三方中间件或数据库就能支持集群、分布式; 适用于网络游戏服务器、物联网、内部系统及各种需要长连接的场景; 通过 ioGame 你可以很容易的搭建出一个集群无中心节点、集群自动化、分布式的网络服务器;FXGL、Unity、UE、Cocos Creator、Godot、Netty、Protobuf、webSocket、tcp、socket;java Netty 游戏服务器框架; Java Netty Game Server.
http://game.iohao.com
GNU Affero General Public License v3.0
918 stars 205 forks source link

将项目打包成 fat jar 并启动,框架会无法识别 action 所在位置的行数 #347

Closed SaltedFishKnight closed 3 months ago

SaltedFishKnight commented 3 months ago

你的问题

根据 快速从零编写服务器完整示例,demo 使用 maven-assembly-plugin 打包成 fat jar,然后使用 -jar 方式启动 DemoApplication 时,显示的 action 所在类的位置行均为 1

在我自己的项目中,使用 maven-shade-plugin 打成 fat jar,再使用 -classpath 方式启动项目,存在同样的错误

预期值

期望的预期值

使用 IDEA debug 运行服务器时没有出错

预期值

实际值

在启动时, CMD 所显示的实际值

实际值

实际上,在 简单介绍 中也出现同样的错误

image

补充

出错的代码在 ActionCommandDocKit,底层是 File 的 exists()

代码

FileKit

HuTool

DemoApplication 正确显示行数时的 debug 值

正确值

根据我的测试,以下两种情况都会令 DemoApplication 出错

1、以 jar 包方式启动时的 debug 值

jar

2、路径存在空格时的 debug 值

空格

当目录包含空格或者 jar 文件时,File 的 exists() 会返回 false,导致进入 continue 跳入下个循环,而不是执行 javaProjectBuilder.addSourceTree(file),导致 ActionCommandDoc 的 classLineNumber 字段,将使用默认值 1

版本

iohao commented 3 months ago

或许是正常的,因为编译后已经没有源码了,所以无法打印代码行数。

你可以到 https://github.com/paul-hammant/qdox/issues 交流下,看下是否还有其他方法能实现。