从生成的二进制文件中删除ScalaSignature注释

时间:2016-01-21 19:50:06

标签: java scala sbt proguard sbt-assembly

如何以编程方式删除javascala注释?

我当前项目的一个可交付成果是我的代码,以及我的代码依赖的任何依赖项,作为超级jar。我们正在构建一个SDK,因此任何包含的依赖项都需要重命名,以免干扰SDK客户端的依赖项(这意味着如果我们使用的是apache commons版本X,并且它们使用的是版本Y,则没有任何依赖项冲突)。我们使用sbt-assembly来重命名我们的代码所依赖的包。例如org.apache。* - > com.mycompany.org.apache。*

我们的项目主要用scala编写,我们正在使用sbt来构建。最近我确定着色会导致ScalaSignature注释出现问题。当在客户的项目中使用超级jar时,这反过来会导致构建问题。

我已确定删除ScalaSignature可解决问题。我使用ProGuard来做这件事,但是这个工具对于我们想要实现的目标来说是过度的。我只是好奇是否有人找到了一个可以删除指定注释的工具。或者更好的是,这个工具可以重命名包,同时以ScalaSignature满意的方式保留scalac

1 个答案:

答案 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);