gpt4 book ai didi

java - 是否可以将自定义元数据添加到 .class 文件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:36 28 4
gpt4 key购买 nike

我们公司已经使用 liquibase 一段时间了,我们已经为数据库迁移设置了一个持续集成环境,当补丁出现错误时会中断工作。

该 CI 环境的一个有趣的“特征”是破坏有一个“可能的罪魁祸首”,因为所有补丁都需要有一个“作者”,并且错误消息显示作者姓名。

如果您不知道 liquibase 是什么,没关系,这不是重点。

重点是:为错误附加一个的名字对软件开发过程非常有好处:问题得到解决的速度更快

所以我在想:Java 堆栈跟踪是否可能?

我们能不能有一个堆栈跟踪,其中包含人名和行号,如下所示?

java.lang.NullPointerException
at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372:john)
at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:3121:mike)
at org.hibernate.event.def.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:232:bob)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:173:bob)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:87:bob)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:862:john)

必须从 SCM 系统中提取此类信息(例如对每个源文件执行“svn blame”)。

现在,暂时忘记浪费编译时间:这可能吗?像那样向类文件添加元数据?

最佳答案

原则上,您可以将自定义信息添加到 .class 文件(有一个属性部分,您可以在其中添加内容)。为此,您必须编写自己的编译器/编译器扩展。没有办法向您的源代码添加一些内容,然后这些内容将显示在类文件中。你在实践中也会遇到重大问题:

  1. 堆栈跟踪构建/打印的方式并不知道您添加到类文件中的任何内容。所以如果你想像上面显示的那样打印这些东西,你必须破解一些核心 JDK 类。
  2. 你想要多少细节?最后一个对给定文件进行任何更改的人?这在实践中不够精确,除非文件由单个开发人员所有。
  3. 以更精细的粒度添加“last-committed-by”信息,比如按方法添加,甚至更糟,按行添加会很快使您的类文件膨胀(类文件的大小限制为 64K)

作为旁注,将错误归咎于人们是否有助于更快地修复错误在很大程度上取决于开发组织的文化。在花费大量时间开发类似的东西之前,请确保你在一个有帮助的地方工作。

关于java - 是否可以将自定义元数据添加到 .class 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10710325/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com