Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe ein Projekt myProject. Dann habe ich eine Klasse MeineClasse.java.
In dieser Klasse Versuche ich ein TestClasse() zu instantiieren, welche in einem extern.jar liegt (es ist nicht meine jar, und inliegende Klassen als kompilierte *.class).
Die TestClasse() liegt in der jar in ähnlicher paketstruktur:
Java:
ebene1.ebene2
Weiterhin gibts da eine Paketstruktur:
Java:
impl.aa
impl.ab
impl.ac
impl.ad
impl.ae
impl.af
impl.ag
impl.ah
//.. etc.
Bei dem Versuch die
Java:
TestClasse testClass = new TestClasse() ;
[javac] C:\path\myProject\src\de\paket\MeineClasse.java:68: cannot access impl.ah
[javac] bad class file: impl\ah.class(impl:ah.class)
[javac] class file contains wrong class: impl.aH
[javac] Please remove or make sure it appears in the correct subdirectory of the classpath.
[javac] TestClasse testClass = new TestClasse() ;
[javac] ^
[javac] 1 error
Ja, wenn ich die jar entpacke, gibts dort in dem Ordner impl eine Klasse ah.class.
Wenn ich zB in meiner Source:
Java:
import impl.ah;
machen möchte, schlägt er mir
Java:
import impl.aH;
vor. (mit großem H)
Wobei dann das impl.aH : The import impl.aH cannot be resolved
Und impl.ah :
[javac] bad class file: impl\ah.class(impl:ah.class)
[javac] class file contains wrong class: impl.aH
[javac] Please remove or make sure it appears in the correct subdirectory of the classpath.
[javac] import impl.ah;
Richtig, diese benutze ich auch net.
Jedoch liegt diese in der selben jar wie TestClasse und ich könnte mit vorstellen, dass der Kontruktor von TestClasse() die aH.class welches im package impl liegt, selbst irgendwann benutzt ???:L
alleine an den namen fällt auf : OBFUSCATOR ! ... und die arbeiten meist auf bytecode ebene wo so einige dinge möglich sind die im source eben nicht möglich sind und zu compilerfehlern führen ...
der obfuscator hat die klasse von außen nun mal unzugänglich gemacht ... in dem das file ah.class heißt ... aber die enthaltene klasse aH ...
auf bytecode-ebene kann man den caller entsprechend manipulieren das es trotzdem funktioniert ... aber im source und der compiler weigern sich natürlich ...
ich denke mal der code wurde nicht umsonst obfuscated ...
Eigentlich interesseirt es mich nicht, was ah oder aH machen. TestClasse hat einen Konstruktor und es sollte selber zusehen, wie es ein Objekt instanziiert, wenn es denn korrekt implementiert wurde..
Ist leider eine lizensierte JAR. Diese ist schon dafür gedacht, dass man von ausserhalb Objekte instanziieren kann. Ich muss mich wohl mit denen in Verbindung setzen..
da du uns bis jetzt leider nichts gepostet hast wo du auf aH zugreifst ... oder überhaupt eine instanz der lib erzeugst ... kann man auch schlecht sehen WELCHE klasse du versuchst zu erzeugen ...
daher mal wieder einer der standard-sprüche : ohne genauere informationen wird man dir nicht helfen können ...
und wenn du irgendwas aus lizenz-technischen gründen nicht veröffentlichen darfst ... warum wendest du dich dann an ein öffentliches forum die diese infos nun mal brauchen ... da wäre es definitiv einfacher gewesen sich dierekt mit dem hersteller der lib in verbindung zu setzen ...
auch mal ne frage : warum versuchst du die angemerkte klasse auch dierekt zu imporiteren ? denn ich denke NICHT das das im sinne desjenigen ist der die lib gebaut hat ... da wird es sicher factory-klassen und entsprechende interfaces geben ...
wie gesagt : der code wurde sicher nicht umsonst so gesichert ...
Richtig, diese benutze ich auch net.
Jedoch liegt diese in der selben jar wie TestClasse und ich könnte mit vorstellen, dass der Kontruktor von TestClasse() die aH.class welches im package impl liegt, selbst irgendwann benutzt ???:L
ah.class und aH.class benutze ich selbst (in meiner MeineClasse.java) nicht. Diese wird wenn überhaupt von der TestClasse (TestClasse.class in der extern.JAR) verwendet.
Und solch ein TestClasse Objekt wird von mir instanziiert.
die JAR enthielt anfangs
aa.class
aA.class
ab.class
aB.class
ac.class
aC.class
etc...
als ich die JAR anfangs entpackt habe, hat jar.exe jeweils das zweite a[kleinerBuchstabe].class mit a[großerBuchstabe].class überschrieben. Deswegen fand er die entsprechende Klasse nicht.
unter unix hätte es damit keine probleme gegeben ... denn unix ist auch im dateisystem case-sesitive ...
warum du allerdings auf die idee gekommen bist eine obfuscated lib , welche nun mal mit gleichen namen gegen das entpacken auf windows geschützt ist , zu entpacken würde mich schon mal interessieren ...
es reicht eine lib in den CP aufzunehmen um diese einzubinden -> GRUNDLAGEN !
warum du allerdings auf die idee gekommen bist eine obfuscated lib , welche nun mal mit gleichen namen gegen das entpacken auf windows geschützt ist , zu entpacken würde mich schon mal interessieren ...
geht einfacher : console auf ... ins verzeichnis vom jar navigieren ... neues manifest daneben legen *also vorher NUR das manifest entpacken* und dann mit [c]jar vuf NAME.jar META-INF/Manifest.mf[/c] das manifest überschreiben ...
man kann sich aber auch umständlicher anstellen als es sein muss wenn man die tools im jdk nicht kennt -.-'