如何以编程方式删除java
或scala
注释?
我当前项目的一个可交付成果是我的代码,以及我的代码依赖的任何依赖项,作为超级jar。我们正在构建一个SDK,因此任何包含的依赖项都需要重命名,以免干扰SDK客户端的依赖项(这意味着如果我们使用的是apache commons版本X,并且它们使用的是版本Y,则没有任何依赖项冲突)。我们使用sbt-assembly
来重命名我们的代码所依赖的包。例如org.apache。* - > com.mycompany.org.apache。*
我们的项目主要用scala
编写,我们正在使用sbt
来构建。最近我确定着色会导致ScalaSignature
注释出现问题。当在客户的项目中使用超级jar时,这反过来会导致构建问题。
我已确定删除ScalaSignature
可解决问题。我使用ProGuard
来做这件事,但是这个工具对于我们想要实现的目标来说是过度的。我只是好奇是否有人找到了一个可以删除指定注释的工具。或者更好的是,这个工具可以重命名包,同时以ScalaSignature
满意的方式保留scalac
。
答案 0 :(得分:1)
您可能想要检查JavaAssist库,clearly allows to get/add annotations dynamically。
在此之后,理论上应该可以通过以下方式使用AnnotationsAttribute
(我们自己尝试过,但如果以下内容有效,请告诉我们):
MethodInfo minfo = m.getMethodInfo();
AnnotationsAttribute attr = (AnnotationsAttribute)
minfo.getAttribute(AnnotationsAttribute.invisibleTag);
Annotation[] annotations = attr.getAnnotations();
// ...remove the unnecessary annotation from array...
attr.setAnnotations(annotations);