Zusammenspiel org.apache.log4j und ProGuard 4.4 klappt nicht

vfl_freak

Premium-User
Hallo zusammen,

ich versuche derzeit, mein Projekt (unter Borland JBuilder2007) von Java5 auf Java6 umzustellen.

Nach reichlich Gefummel mit "unsupported version number [50.0]" fand ich heraus, dass dass ich diesbzgl. meine Obfuscator-Version ProGuard 3.2 updaten musste. Habe nun die Version 4.4 runtergeladen und versucht erneut zu compilieren (mittels ANT und build.xml).
Nun bekomme ich jede Menge Warnings in dieser Art:
Java:
[proguard] Warning: worker.mainApp: can't find referenced class org.apache.log4j.Logger
[proguard] Warning: xxx.DlgTerminPopUp: can't find referenced class org.apache.log4j.Logger
...
[proguard] Warning: xxx.mainFrm: can't find referenced class edu.virtualschool.jco.JCOSecretKey

Dabei ist dann irgendwas Schicht im Schacht mit dem Hinweis auf "240 unresolved references to classes or interfaces" und der Bitte, doch diese Warnings erstmal zu korrigieren ..... :-( (was ja eigentlich vernünftig ist und ich eh gemacht hätte)

In den entsprechenden Sourcen sieht es dann so aus (Beispiel für mainApp) :
Java:
import org.apache.log4j.Logger; // manchmal auch "....log4j.*"
.....
final Logger log4 = Logger.getLogger( mainApp.class );

Leider habe ich nun überhaupt keine Idee, was ich hier zu tun habe!
Der Import funktioniert ja prinzipiell, aber woran stört sich ProGuard hier?

Ich hoffe, dass irgendwer damit Erfahrung hat ... ;)

Danke im voraus!
Gruß
Klaus
 
Zuletzt bearbeitet:
Hi.
In den entsprechenden Sourcen sieht es dann so aus (Beispiel für mainApp) :
Java:
import org.apache.log4j.Logger; // manchmal auch "....log4j.*"
.....
final Logger log4 = Logger.getLogger( mainApp.class );

Leider habe ich nun überhaupt keine Idee, was ich hier zu tun habe!
Der Import funktioniert ja prinzipiell, aber woran stört sich ProGuard hier?
Es findet halt einfach die Klassen nicht. D.h. du hast offenbar die notwendigen Jars nicht als -injars in der Proguard Konfiguration angegeben.

Gruß
 
Moin deepthroat,

erstmal Danke für die schnell Antwort :)
Stimmt, die w_log4j_ant.pro habe ich bislang nicht angefasst ... alleine schon, weil ich mit damit nicht auskenne und leider auch keine Doku dazu besitze :-(

Es gibt aber schon folgende Einträge :
Code:
...
#-libraryjars <java.home>/lib/rt.jar;<java.home>/lib/jsse.jar
#-injars      w_org.jar
#-outjar      eseca_nsl_worker_ant.jar
...
#-keep  class org.apache.**
-keep  class org.apache.log4j.*
-keep  class net.lamot.java.*
-keep  class javax.comm.*
#-keep  class org.apache.log4j.chainsaw.*
#-keep  class org.apache.log4j.config.*
#-keep  class org.apache.log4j.helpers.*
#-keep  class org.apache.log4j.jdbc.*
#-keep  class org.apache.log4j.lf5.*
#-keep  class org.apache.log4j.lf5.util.*
#-keep  class org.apache.log4j.lf5.viewer.*
#-keep  class org.apache.log4j.lf5.viewer.categoryexplorer.*
#-keep  class org.apache.log4j.lf5.viewer.configure.*
#-keep  class org.apache.log4j.net.*
#-keep  class org.apache.log4j.or.*
#-keep  class org.apache.log4j.performance.*
#-keep  class org.apache.log4j.spi.*
#-keep  class org.apache.log4j.varia.*
#-keep  class org.apache.log4j.xml.*

Ich gehe mal davon aus, dass eine # am Zeilenanfang dann diese entspr. Zeile auskommentiert, richtig?
Was genau machen denn ersten drei Zeilen, falls es kein Kommentar ist
Was genau macht das '-keep' ?
Reicht jetzt ggf. sowas wie
Code:
-injars  <meinPfad>/log4j...jar
einfügen?

Danke und Gruß
Klaus
 
Ich gehe mal davon aus, dass eine # am Zeilenanfang dann diese entspr. Zeile auskommentiert, richtig?
Ja.
Was genau machen denn ersten drei Zeilen, falls es kein Kommentar ist
Kann man alles hier (http://proguard.sourceforge.net/manual/usage.html#iooptions) nachlesen.
Was genau macht das '-keep' ?
ProGuard schmeißt alle Klassen, Methoden etc. raus, die nicht benutzt werden. Manchmal muß man da eingreifen.
Reicht jetzt ggf. sowas wie
Code:
-injars  <meinPfad>/log4j...jar
einfügen?
Evlt. benötigst du noch ein paar -keep Optionen oder du gibst -dontshrink an.

Gruß
 
Ah, super! Danke für den Link :)

Habe gerade mal parallel den Pfad der log4j-Lib in die build.xml im Target "obfuscate" eingetragen ... und siehe da: statt rund 240 nur noch 54 Warnings von anderen Libs :p

Dass scheint dann auf jeden Fall der richtige Weg zu sein!

Danke für Deine Hilfe resp. den Denkanstoss :)
Gruß
Klaus
 

Neue Beiträge

Zurück