如何使用Maven和ProGuard混淆webapp

时间:2010-12-22 23:34:35

标签: web-applications maven-2 obfuscation war proguard

我使用Maven和maven-war-plugin来构建我的WAR。所有JSP都使用jspc-maven-plugin进行预编译,所有类都放入JAR(WEB-INF / lib)。到目前为止一切正常。现在我尝试配置proguard-maven-plugin来混淆我的代码。

首先,我尝试在编译阶段对所有类进行模糊处理,但之后我在编译JSP时遇到了麻烦。我找到了一些定义包阶段的例子。但在这种情况下,我不知道如何处理我的JAR文件,这是alrady打包到WAR。最后,我尝试将我的WAR设置为< injar> mywebapp.war< / injar>。但这也行不通。我错过了什么?

        <plugin>
            <groupId>com.pyx4me</groupId>
            <artifactId>proguard-maven-plugin</artifactId>
            <version>2.0.4</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>proguard</goal>
                    </goals>
                </execution>
            </executions>               
            <configuration>
                <obfuscate>true</obfuscate>
                <includeDependency>false</includeDependency> 
                <injar>${project.artifactId}-v${project.version}.war</injar>
                <outjar>${project.artifactId}-v${project.version}-obf.war</outjar> 
                <outputDirectory>${project.build.directory}</outputDirectory> 
                <maxMemory>256m</maxMemory>
                <libs>
                    <!--  Java Runtime -->
                    <lib>${java.home}/../Classes/classes.jar</lib>
                    <lib>${java.home}/../Classes/jce.jar</lib>
                </libs>                 
                <options>
                    <option>-allowaccessmodification</option>
                    <option>-dontskipnonpubliclibraryclasses</option>
                    <option>-dontskipnonpubliclibraryclassmembers</option>
                </options>
            </configuration>
        </plugin>

你有任何提示,例子来完成这项工作吗?

非常感谢! 大卫

1 个答案:

答案 0 :(得分:6)

查看可用的Maven lifecycles。特别是默认生命周期。你可能遇到的问题是,Maven可以保证某些插件,比如jar和war插件,但是其他插件,比如你的proguard插件,它可能没有。

我认为如果您将执行阶段从package更改为prepare-package,那么在将JSP文件打包到JAR文件中并随后进入WAR文件之前,应该对JSP文件进行模糊处理。而且这个阶段不应该干扰你可能拥有的任何课程的编译。