Использование Proguard с библиотекой, которая использует Spring @Autowired по имени - PullRequest
7 голосов
/ 09 декабря 2010

Я использую Proguard, чтобы запутать библиотеку, имеющую несколько полей @Autowired.Обфускатор переименовывает эти поля класса (потому что они являются частными / внутренними для класса), и, следовательно, мой bean-компонент не может его создать.

@Service
public class LicenseServiceImpl implements LicenseService {

  @Autowired(required=false)
  LicenseSessionStore a;

  @Autowired(required=false)
  LicenseStore b;

...
}

Теперь, вероятно, существует множество способов сделать так, чтобы эти конкретные поля не были автоматически подключены, но я надеялся найти способ сказать Proguard, что не следует запутывать любые внутренние поля, помеченные важной Spring-измы (@Autowired и т. д.).

У кого-нибудь есть идеи о том, как я могу сделать это в общем?

Грант

Ответы [ 2 ]

3 голосов
/ 13 июля 2015

У меня была похожая проблема с сохранением имен классов для аннотированных классов simplexml. Мое исправление было добавить следующее:

-keepclassmembers class * {
    @org.simpleframework.xml.* *;
}

Я думаю, что-то подобное будет работать для вас:

-keepclassmembers class * {
    @org.springframework.beans.factory.annotation.* *;
} 
2 голосов
/ 10 декабря 2010

Я не считаю это правильным ответом на мой вопрос и все же хотел бы элегантного, общего решения этой проблемы. То, что я публикую, - это мой временный обходной путь, который позволил мне преодолеть мою проблему самым грубым, неуклюжим образом.

Я явно исключил эти предметы из обфускации, добавив их в опцию keepclassmembernames:

<option>-keepclassmembernames class * {com.common.license.LicenseSessionStore licenseSessionStore; com.common.license.LicenseStore licenseStore; }</option>

Это не предпочтительное решение, поскольку оно требует определенного именованного переопределения в каждом классе и станет кошмаром обслуживания.

Нужен лучший ответ!

Grant

...