有没有人研究过 Java 源文件 里面 怎么获取注释信息? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hqtc
V2EX    Java

有没有人研究过 Java 源文件 里面 怎么获取注释信息?

  •  
  •   hqtc 2016-07-27 15:29:14 +08:00 7291 次点击
    这是一个创建于 3395 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如 这样一段 代码

    /** * $function=user.alipayplus.user.json * $paramCheck args(required="M",length="32",sample="['ui','ui']") * $paramCheck number(required="C",length="(10,2)",sample="36",remarks="y:code==123") */ public JSONObject test(String[] args, nt number, String code) { JSONObject object = new JSONObject(); object.put("request", "http-request"); return object; } 

    有什么现成的库能把方法和上面的注释配套解析出来么?

    22 条回复    2016-07-31 15:22:32 +08:00
    lovedebug
        1
    lovedebug  
       2016-07-27 15:40:18 +08:00
    不是自带 JavaDoc 么- - 命令行工具
    jones
        2
    jones  
       2016-07-27 15:52:48 +08:00
    编译后的 class 是不包含注释信息的
    hqtc
        3
    hqtc  
    OP
       2016-07-27 15:57:23 +08:00
    @lovedebug 试过了 用 javadoc api 自定义 doclet 来搞,但是只能在命令行搞,而且 包依赖也不知道怎么搞,这个例子总是“找不到符号 JSONObject ”, 我要解析的 Java 代码我都不知道依赖了哪些包的。。
    hqtc
        4
    hqtc  
    OP
       2016-07-27 15:58:04 +08:00
    @jones 对啊,所有问问大家有没有什么解析 java 源文件的工具
    incompatible
        5
    incompatible  
       2016-07-27 16:47:25 +08:00 via iPhone
    这种场景应该用 Annotation 才对啊
    fwrq41251
        6
    fwrq41251  
       2016-07-27 17:11:01 +08:00
    lovedebug
        7
    lovedebug  
       2016-07-27 17:24:25 +08:00
    @hqtc 你肯定依赖了第三方库关键是你的第三方库没带源码,你找到第三方库源码版本后再试试
    lovedebug
        8
    lovedebug  
       2016-07-27 17:28:17 +08:00
    如果要反编译 class 文件 推荐你用 intellij idea 自己装 ideajad 插件
    Guaidaodl
        9
    Guaidaodl  
       2016-07-27 17:41:24 +08:00
    我觉得楼主想要实现的功能, 不应该用注释, 用 Annotation 才是正解.
    murmur
        10
    murmur  
       2016-07-27 19:36:59 +08:00
    这很明显表单验证么 表单验证应该用 annotation 或者把规则做到 bean 里
    Lonely
        11
    Lonely  
       2016-07-27 19:44:34 +08:00 via iPhone
    牛逼,头一次见到这么玩的
    zts1993
        12
    zts1993  
       2016-07-27 19:58:59 +08:00
    楼上都在胡说啥,,这个我搞过用的是 javaparser


    <dependency>
    <groupId>com.github.javaparser</groupId>
    <artifactId>javaparser-core</artifactId>
    <version>2.3.0</version>
    </dependency>


    可以解析,可以拼装代码。之前用这个写的代码自动生成。。。。
    zts1993
        13
    zts1993  
       2016-07-27 19:59:49 +08:00
    当然了,。验证规则解析不了,看不懂这是个啥。。
    hrong
        14
    hrong  
       2016-07-27 20:05:05 +08:00 via Android
    @Guaidaodl
    @incompatible
    @murmur
    楼主应该只要解析 Source ,不是解析编译过后的 class 文件
    incompatible
        15
    incompatible  
       2016-07-27 20:30:54 +08:00
    @hrong 楼主表面的需求的确是解析源码。但是你仔细看帖子,注释中出现的 paramCheck 这种东西显然是运行时才有意义的东西。所以我觉得楼主跑偏了。
    hrong
        16
    hrong  
       2016-07-27 20:40:44 +08:00 via Android
    @incompatible 你是个好的倾听者,为楼主所想了,应该是你说的意思了,必须用注解啊


    我只顾看楼主表面意思。还请楼主出来释明真意
    pynix
        17
    pynix  
       2016-07-27 21:14:14 +08:00 via Android
    annotation
    hqtc
        18
    hqtc  
    OP
       2016-07-29 10:22:26 +08:00
    @hrong 你是对的,就是分析源码 source~。。感谢各位,由于我只是个小实习生,是为线上业务的接口代码做分析工具,不能让人家的业务代码里使用我自定义 的 annotation 。。。 然后讨论半天,最后决定:把需要的信息写在额外的文件里面 (⊙⊙)b ……
    hqtc
        19
    hqtc  
    OP
       2016-07-29 10:27:54 +08:00
    @zts1993 太感谢了, 我也研究了 javaparser ,还有个库叫 Roaster ( https://github.com/forge/roaster ),然后给开发们提出了方案。 不过最后我们决定,不搞代码里面注释了,改成分析额外的配置文件 ~
    haniklz
        20
    haniklz  
       2016-07-30 18:24:11 +08:00 via Android
    把注释部分 换成自定义注解不就解决问题了吗 唉。
    hqtc
        21
    hqtc  
    OP
       2016-07-31 12:25:02 +08:00
    @haniklz 看 18L
    haniklz
        22
    haniklz  
       2016-07-31 15:22:32 +08:00 via Android
    @hqtc 好吧我只看了主贴没看下面
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2446 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 15:50 PVG 23:50 LAX 07:50 JFK 10:50
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86