Я использую proguard с приложением Spring mvc и maven.
Мой раздел сборки pom.xml выглядит так:
<build>
<finalName>myapp</finalName>
<plugins>
<plugin>
<groupId>com.pyx4me</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<obfuscate>true</obfuscate>
<!--<options>-->
<!--<option>-keep public class</option>-->
<!--</options>-->
<injar>${project.build.finalName}</injar>
<injar>${project.build.finalName}</injar>
<inFilter>com.myapp.*</inFilter>
</configuration>
</plugin>
</plugins>
Я также пробовал:
<injar>${project.build.finalName}.war</injar>
Когда я запускаю:
mvn clean install
Сообщение об ошибке сборки:
[proguard] Reading program war [/Users/me/dev/git/myproject/myapp/target/myapp.war] (filtered)
[proguard] Error: The input doesn't contain any classes. Did you specify the proper '-injars' options?
ERROR] Failed to execute goal com.pyx4me:proguard-maven-plugin:2.0.4:proguard (default) on project myapp: Obfuscation failed (result=1) -> [Help 1]
Кажется, моя банка была правильно поднята, поскольку сообщения перед отображением :
[INFO] --- proguard-maven-plugin:2.0.4:proguard (default) @ myapp ---
[INFO] execute ProGuard [-injars, '/Users/me/dev/gitserver/myproject/myapp/target/myapp.war'(!META-INF/maven/**,com.myapp.*), -outjars, '/Users/me/dev/git/myproject/myapp/target/myapp_pg.war', -libraryjars, ....
Кроме того, какие варианты вы предлагаете мне использовать? Это весенний mvc, поэтому у меня есть аннотации вроде:
] Таким образом, я полагаю, что ни один из этих классов / полей не следует переименовывать.
(Моя цель - просто сделать это головной болью для тех, кто декомпилирует, чтобы они не могли просто декомпилировать и использовать код. Обфускация позволит им использовать его, но они не смогут поддерживать кодовую базу, если только они его переписывают. У меня нет никаких необычных алгоритмов, поэтому мне нечего скрывать в этом отношении.)
Обновление
Позвольте мне пояснить, что мой весенний mvc по какой-то причине использует maven (я ' m, новый для maven) при выполнении чистой установки mvn создается как файл myapp.war, так и взорванный war myapp / (это то, что я хочу развернуть в производственной среде, а не файл myapp.war)
В моей папке myapp есть:
/target/myapp/
/target/myapp/meta-inf (empty folder)
/target/myapp/web-inf
/target/myapp/web-inf/classes (com.myapp. ...)
/target/myapp/web-inf/lib/
/target/myapp/web-inf/ web.xml, application.xml (for spring)
/target/myapp/web-inf/views/
Значит, proguard должен запутываться в папке / target / myapp / web-inf / classes, верно? Как мне сказать ему это сделать?
Обновление 2
Теперь я получаю следующее:
Хорошо, я не получаю: не удалось выполнить цель ... proguard ..Не могу переименовать / Users / me / dev / git / project1 / myapp / target / myapp / web-inf / classes (см. Мой раздел обновлений, чтобы узнать, что я изменил в моем pom.xml)
Я изменил свой pom.xml с:
<configuration>
<obfuscate>true</obfuscate>
<injar>${project.build.finalName}/WEB-INF/classes/</injar>
<inFilter>com/myapp/**</inFilter>
</configuration>