안녕하세요.
개발/운영 환경 : spring 3.x + ibatis 2.x + oracle 입니다.
프로젝트를 일부분을 다른 업체에서 서비스하게 되었습니다.
역컴파일 같은걸 방지하기 위해 코드 또는 클래스를 난독화를 할려고 합니다.
난독화는 ProGuard 으로 해서 테스트하고 있습니다만, 쉽지 않네요.
환경 설정을 아래와 같이 해서 테스트하였습니다. 난독화는 되기는 하였지만, 구동을 시키면 p.cmm.web.TimeoutFilter 클래스를 찾을 수 없다고 나옵니다.
-injars in.jar
-outjars out.jar
-libraryjars 'C:\Program Files\Java\jre6\lib\rt.jar'
-libraryjars lib\aopalliance-1.0.jar
-libraryjars lib\aspectjrt-1.6.8.jar
-libraryjars lib\com.springsource.javax.validation-1.0.0.GA.jar
-libraryjars lib\com.springsource.net.sf.cglib-2.2.0.jar
-libraryjars lib\com.springsource.org.hibernate-3.3.1.GA.jar
-libraryjars lib\com.springsource.org.hibernate.annotations-3.4.0.GA.jar
-libraryjars lib\com.springsource.org.hibernate.validator-4.0.2.GA.jar
-libraryjars lib\commons-codec-1.5.jar
-libraryjars lib\commons-io.jar
-libraryjars lib\commons-logging-1.1.1.jar
-libraryjars lib\commons-pool-1.6.jar
-libraryjars lib\ecj-3.7.2.jar
-libraryjars lib\el-api.jar
-libraryjars lib\html2image-0.9.jar
-libraryjars lib\httpclient-4.1.1.jar
-libraryjars lib\httpclient-cache-4.1.1.jar
-libraryjars lib\httpcore-4.1.jar
-libraryjars lib\httpmime-4.1.1.jar
-libraryjars lib\ibatis-2.3.4.726.jar
-libraryjars lib\jackson-core-asl-1.5.1.jar
-libraryjars lib\jackson-mapper-asl-1.5.1.jar
-libraryjars lib\jasper-el.jar
-libraryjars lib\jasper.jar
-libraryjars lib\javax.inject-1.jar
-libraryjars lib\jdom-2.0.3.jar
-libraryjars lib\jericho-html-3.2.jar
-libraryjars lib\jsp-api.jar
-libraryjars lib\jstl.jar
-libraryjars lib\log4j-1.2.16.jar
-libraryjars lib\ojdbc6.jar
-libraryjars lib\org.springframework.aop-3.1.1.RELEASE.jar
-libraryjars lib\org.springframework.asm-3.1.1.RELEASE.jar
-libraryjars lib\org.springframework.aspects-3.1.1.RELEASE.jar
-libraryjars lib\org.springframework.beans-3.1.1.RELEASE.jar
-libraryjars lib\org.springframework.context-3.1.1.RELEASE.jar
-libraryjars lib\org.springframework.context.support-3.1.1.RELEASE.jar
-libraryjars lib\org.springframework.core-3.1.1.RELEASE.jar
-libraryjars lib\org.springframework.expression-3.1.1.RELEASE.jar
-libraryjars lib\org.springframework.instrument-3.1.1.RELEASE.jar
-libraryjars lib\org.springframework.jdbc-3.1.1.RELEASE.jar
-libraryjars lib\org.springframework.jms-3.1.1.RELEASE.jar
-libraryjars lib\org.springframework.orm-3.1.1.RELEASE.jar
-libraryjars lib\org.springframework.oxm-3.1.1.RELEASE.jar
-libraryjars lib\org.springframework.test-3.1.1.RELEASE.jar
-libraryjars lib\org.springframework.transaction-3.1.1.RELEASE.jar
-libraryjars lib\org.springframework.web-3.1.1.RELEASE.jar
-libraryjars lib\org.springframework.web.portlet-3.1.1.RELEASE.jar
-libraryjars lib\org.springframework.web.servlet-3.1.1.RELEASE.jar
-libraryjars lib\servlet-api.jar
-libraryjars lib\sitemesh-3.0-alpha-2.jar
-libraryjars lib\slf4j-api-1.6.4.jar
-libraryjars lib\slf4j-jcl-1.6.4.jar
-libraryjars lib\spring-security-acl-3.1.0.RELEASE.jar
-libraryjars lib\spring-security-aspects-3.1.0.RELEASE.jar
-libraryjars lib\spring-security-config-3.1.0.RELEASE.jar
-libraryjars lib\spring-security-core-3.1.0.RELEASE.jar
-libraryjars lib\spring-security-taglibs-3.1.0.RELEASE.jar
-libraryjars lib\spring-security-web-3.1.0.RELEASE.jar
-libraryjars lib\standard.jar
-libraryjars lib\tomcat-dbcp.jar
-libraryjars lib\xalan.jar
-dontskipnonpubliclibraryclassmembers
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontpreverify
-verbose
-keep public class p.cmm.binding.BindingInitializer
-keep public class p.cmm.web.TimeoutFilter
-keep public class p.cmm.web.ModelAndJsonViewResolver
-keep public class p.service.security.AuthenticationSuccessSuppotHandler
-keep public class p.service.security.UserDetailsService
#-keep public class * extends portal.common.web.AjaxSessionTimeoutFilter
-keep class * extends @Crontroller *
#-keep class Calc {
# public static void main(java.lang.String[]);
#}
#-keepclasseswithmembers,allowshrinking class * {
# public <init>(android.content.Context,android.util.AttributeSet);
#}
#-keepclasseswithmembers,allowshrinking class * {
# public <init>(android.content.Context,android.util.AttributeSet,int);
#}
# Also keep - Enumerations. Keep the special static methods that are required in
# enumeration classes.
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# Keep names - Native method names. Keep all native class/method names.
-keepclasseswithmembers,allowshrinking class * {
native <methods>;
}