收缩JAR的Proguard没有正确地获取依赖类

时间:2013-07-22 06:59:46

标签: proguard

我是使用Proguard的新手(这看起来非常有用!)。我希望使用起点(比如一个公共接口)创建一个最小的JAR(没有任何混淆),并希望proguard将传递地接收依赖类。然而,依赖类似乎缺少私有成员,它的公共getter / setter和注释只有构造函数和toString方法可用。具体来说,我的SpecialService接口引用了SpecialObject(也许还有很多其他接口)。我想知道是否有可能只提到SpecialService作为保持类,并且所有依赖(非库)c lasses(具有所有属性 - 没有混淆或优化)都应该在输出jar中提取。

<options>
    <option>-keepattributes</option>
    <option>-keep @javax.ws.rs.Path public class com.kilo.SpecialService { private public protected *;}</option>
</options>

我已尝试过所有配置,但似乎无法正常工作。

SpecialService.java:

@GET
@Path("someComplexObjectsWithIntInputs")
List<SpecialObject> getSomeComplexObjectsWithIntInputs(
        @QueryParam("ids") List<Integer> ids);

SpecialObject.java

public class SpecialObject {
private String name;
private Integer id;
private Date date;
public SpecialObject() {
}
public SpecialObject(String name, Integer id, Date date) {
    this.name = name;
    this.id = id;
    this.date = date;
}
public String getName() {
    return name;
}
public Integer getId() {
    return id;
}
public Date getDate() {
    return date;
}
public String getFoo() {
    return "foo";
}
public void setName(String name) {
    this.name = name;
}
public void setId(Integer id) {
    this.id = id;
}
public void setDate(Date date) {
    this.date = date;
}
@Override
public String toString() {
    return "SpecialObject [name=" + name + ", id=" + id + ", date=" + date
            + "]";
}

输出SpecialObject.java:

/*    */ public class SpecialObject
/*    */ {
/*    */   public String toString()
/*    */   {
/* 56 */     return "SpecialObject [name=" + null + ", id=" + null + ", date=" + null + "]";
/*    */   }
/*    */ }

提前致谢!

如果有人想玩,我已经添加了一个示例设置@ https://github.com/kilokahn/proguard-tester/blob/master/proguard-tester-parent/proguard-tester-rs-api/pom.xml

1 个答案:

答案 0 :(得分:0)

找出执行此操作的简单配置。愚蠢的我!

<option>-keepclassmembers class * { *;}</option>

更新了设置以反映这一点。