누구나 프로 가드로 자신의 라이오닌을 컴파일 한 우버야를 난처하게하는 경험이 있는지 궁금합니다. 나는 Google에서 해결책을 찾기 위해 최선을 다했지만 정말 답을 찾을 수 없습니다. 이것이 가능한지 궁금합니다.ProGuard로 클로저 우버러를 난독 화
저는 기본 프로젝트를 혼란스럽게 만들려고했습니다. 여기에 core.clj 파일입니다 :
(ns proguard.core
(:gen-class))
(defn -main
"I don't do a whole lot."
[& args]
(println "Hello, World!"))
프로젝트 파일 :
(defproject proguard "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.4.0"]]
:aot :all
:main proguard.core)
내 난독 설정 파일 :
-injars clojure/proguard/target/proguard-0.1.0-SNAPSHOT-standalone.jar
-outjars clojure/test-project
-libraryjars /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/rt.jar
-dontshrink
-dontoptimize
-dontusemixedcaseclassnames
-dontpreverify
-dontnote
-printseeds
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
}
-keep class clojure.core__init { public static void load(); }
-keep class clojure.core_proxy__init { public static void load(); }
-keep class clojure.core_print__init { public static void load(); }
-keep class clojure.genclass__init { public static void load(); }
-keep class clojure.core_deftype__init { public static void load(); }
-keep class clojure.core.protocols__init { public static void load(); }
-keep class clojure.gvec__init { public static void load(); }
-keep class clojure.java.io__init { public static void load(); }
-keep class clojure.lang__init { public static void load(); }
-keep class proguard.core__init {
public static void load();
}
-keep class proguard.core {
public *** super*(...);
}
나는 다음 내가 얻을 난독 항아리를 실행하려고 할 때마다 오류 :
Exception in thread "main" java.lang.ExceptionInInitializerError
at clojure.lang.ve.<init>(Unknown Source)
at clojure.lang.ve.c(Unknown Source)
at clojure.lang.yf.a(Unknown Source)
at proguard.core.<clinit>(Unknown Source)
Caused by: java.lang.ClassNotFoundException: clojure.lang.PersistentList, compiling:(clojure/core.clj:20)
at clojure.lang.at.a(Unknown Source)
at clojure.lang.at.b(Unknown Source)
at clojure.lang.at.a(Unknown Source)
at clojure.lang.bj.a(Unknown Source)
at clojure.lang.at.a(Unknown Source)
at clojure.lang.at.b(Unknown Source)
at clojure.lang.at.a(Unknown Source)
at clojure.lang.at.a(Unknown Source)
at clojure.lang.at.a(Unknown Source)
at clojure.lang.xh.a(Unknown Source)
at clojure.lang.xh.a(Unknown Source)
at clojure.lang.xh.b(Unknown Source)
at clojure.lang.xh.d(Unknown Source)
at clojure.lang.xh.c(Unknown Source)
at clojure.lang.xh.<clinit>(Unknown Source)
... 4 more
Caused by: java.lang.ClassNotFoundException: clojure.lang.PersistentList
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at clojure.lang.ec.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at clojure.lang.xh.h(Unknown Source)
at clojure.lang.bp.b(Unknown Source)
at clojure.lang.bp.a(Unknown Source)
at clojure.lang.bq.a(Unknown Source)
... 19 more
내가 여기서 뭘 잘못하고 있는지 잘 모르겠다 ... 나는 클로저가 목표로하는 proguard 튜토리얼 obfuscating with proguard을 따르려고 노력했다. 그러나 그것은 안드로이드와 개미가 특정 적이기 때문에 프로세스가 데스크탑과 완전히 다른지 궁금하다. lein을 사용하는 응용 프로그램.
미리 감사드립니다.
proguard에 대한 경험이 없지만 stacktrace에서이 obfuscator가 uberjar에서 clojure 런타임을 제외 시켰습니다. 당신의 프로그램에서 작동하는 clojure.jar의 * 모든 클래스를 유지해야합니다. 단지 여러분의 설정에서 보이는 것처럼 여러 개의'__init' 클래스가 아니라 작동시켜야합니다. 나는 추측을하고'-libraryjars'의 목록에 clojure.jar를 추가해야한다고 말합니다. –
안녕하세요, 올바른 방향으로 나를 가리켜 주셔서 감사합니다! 전체 clojure.jar는 집착해야 할 indded 필요 않습니다. 나는 내 자신의 질문에 곧 대답 할 것이다. [편집 : 흠, 질문은 아직 너무 어리지만, 나는 그것을 할 수없는 것 같아요 ...] – deadringer
당신은 자신의 질문에 적절하게 대답해야합니다.질문 앞에 대답이 있으면 혼란 스럽습니다. – Tom