Proguard说它找不到任何课程

Bla*_*man 7 java obfuscation spring proguard maven

我正在使用带有spring mvc应用程序和maven的proguard.

我的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>
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

<injar>${project.build.finalName}.war</injar>
Run Code Online (Sandbox Code Playgroud)

当我跑:

mvn clean install
Run Code Online (Sandbox Code Playgroud)

构建失败消息:

[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]
Run Code Online (Sandbox Code Playgroud)

它似乎已经正确地拾取了我的jar作为显示之前的消息:

[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, ....
Run Code Online (Sandbox Code Playgroud)

另外,您建议我使用哪些选项? 这是一个春天的mvc所以我有这样的注释:

  1. @Autowired
  2. @服务
  3. @Repository
  4. @Controller

因此,任何这些类/字段都不应该重命名我想象.

(我的目标只是让那些反编译的人头疼,这样他们就不能反编译和使用代码.混淆会让他们使用它,但他们无法维护代码库,除非他们重新写它.我没有任何花哨的算法,所以在这方面我没有什么可隐瞒的.)

更新

让我在这里说清楚,我的spring mvc使用maven出于某种原因(我是maven的新手),当做一个mvn clean install时会生成一个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/
Run Code Online (Sandbox Code Playgroud)

那么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>
Run Code Online (Sandbox Code Playgroud)

Eri*_*une 5

ProGuard过滤器处理文件名,因此

.....(!META-INF/maven/**,com.myapp.*)
Run Code Online (Sandbox Code Playgroud)

可能不会匹配任何类文件.你可能想要

.....(!META-INF/maven/**,com/myapp/**)
Run Code Online (Sandbox Code Playgroud)

请参阅ProGuard手册>使用>文件过滤器