Я использую 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, поэтому у меня есть аннотации, такие как:
- @ Autowired
- @ Service
- @ Repository
- @ Controller
Так что ни один из этих классов / полей не должен быть переименован, я бы подумал.
(Моя цель просточтобы это стало головной болью для тех, кто декомпилирует, так что они не могут просто декомпилировать и использовать код. Запутывание позволит им использовать его, но они не смогут поддерживать кодовую базу, если они не переписывают его.У меня нет причудливых алгоритмов, поэтому мне нечего скрывать.)
Обновление
Позвольте мне бытьясно, что мой весенний mvc по какой-то причине использует maven (я новичок в 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>