Suh*_*asD 4 java obfuscation spring proguard maven
我有一个项目是另一个项目的一部分。我正在使用Maven构建过程来制作项目的jar。我使用ProGuard对其进行了模糊处理。我有一些控制器可以处理UI请求。
问:我的问题是未混淆的jar正在工作。所有控制器都被命中,但是混淆的jar无法正常工作(没有控制器被命中)。混淆有什么问题?
我的Servlet.XML:
<context:component-scan base-package="myPackage.controllers" />
<mvc:annotation-driven />
样例控制器代码:
package myPackage.controllers.information;
import myPackage.beans.InfoBean;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@RestController
@RequestMapping("/information")
public class InformationController {
    @RequestMapping(method = RequestMethod.GET)
    public return_bean getAllInformation() {
        //some logic
    }
    @RequestMapping(value = "/{infoId}", method = RequestMethod.PUT)
    public return_bean updateInformation(@PathVariable String InfoId, @RequestBody InfoBean info) {
        // some logic
    }
}
我与ProGuard相关的POM.XML内容:
<plugin>
    <groupId>com.github.wvengen</groupId>
    <artifactId>proguard-maven-plugin</artifactId>
    <version>2.0.13</version>
    <dependencies>
        <dependency>
            <groupId>net.sf.proguard</groupId>
            <artifactId>proguard-base</artifactId>
            <version>5.2.1</version>
            <scope>runtime</scope>
        </dependency>
    </dependencies>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>proguard</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <maxMemory>576m</maxMemory>
        <obfuscate>true</obfuscate>
        <!-- File with proguard configuration -->
        <proguardInclude>${basedir}/proguard.conf</proguardInclude>
        <libs>
            <lib>${java7home}/jre/lib/rt.jar</lib>
            <lib>${java7home}/jre/lib/jce.jar</lib>
        </libs>
    </configuration>
</plugin>
我的ProGuard.conf文件内容:
-dontnot
-dontwarn
-dontshrink
-dontoptimize
-keep public class * { public protected *;}
-keep class myPackage.controllers.** { public protected *;}
-keepattributes SourceFile,Signature,LineNumberTable,Exceptions, *Annotation*
-keepparameternames
-printmapping '${logFilesPath}/${project.artifactId}.log'
我检查了混淆的jar,所有注释都保留了。同样,在我的信息包中,我还有其他一些仅具有包级别访问权限的类。因此,它们也变得令人困惑。但是我所有具有RequestMappings的类都是公共的,并且不会被混淆。
我的跑步环境:
1)我的项目使用Java 1.7。但是这个jar被放置在Java 1.8上运行的项目中
2)ProGuard版本:5.2.1
3)春季:4.0.9
4)杰克逊:1.9.11
(注意:在上述环境中,未用药的罐子可以工作,但不能使用被混淆的罐子)
我需要在ProGuard.conf文件中添加以下内容
-keepdirectories
默认情况下,在混淆过程中将删除目录条目。这样做是为了减小罐子的尺寸。当我使用Spring的“组件扫描”功能(可能需要目录结构)时,我需要使其保持正常工作。
| 归档时间: | 
 | 
| 查看次数: | 1015 次 | 
| 最近记录: |