2

我需要保留所有扩展 com.opensymphony.xwork2.ActionSupport 并实现自定义接口的类。

当我尝试这个

-keepnames public class * extends com.opensymphony.xwork2.ActionSupport implements com.company.project.utils.Constantes {
 *; 
 }

我收到以下错误:

期望在“实现”处打开“{”时出错

4

1 回答 1

3

如果有记忆,您可以指定扩展另一个类的类或实现接口的类,但不能同时指定两者。该文档并没有特别清楚地说明这一点,但它暗示在那里。

有几种方法可以解决这个问题,假设您仅指定一个或另一个是不够的:

  • 创建一个空的“标记”接口,并让您想要保留的类扩展它。
  • private static final为您要保留的每个类添加一个静态(如果您愿意,可以是)标记字段,并在 -keep 选项中指定。
  • 咬紧牙关,只列出你想要保留的所有类的名称。

编辑

另一种选择是创建一个这样的类:

public abstract class Foo extends com.opensymphony.xwork2.ActionSupport implements com.company.project.utils.Constantes {
    // ...
}

然后,让所有要保留的类扩展该类。然后你只需要* extends Foo在 -keep 选项中指定。

于 2012-04-24T10:34:00.640 回答