Welche Auswirkungen hat das Vorhandensein doppelter Klassen in Java-Jar?

8

Ich baue eine java jar Datei mit ant. Ich muss zusätzliche jars mit "zipfileset src=" xxx.jar "" zipfileset src="yyy.jar" einschließen und sowohl xxx.jar als auch yyy.jar haben die Klassen mit den vollständig qualifizierten SAME-Klassennamen. Die resultierende JAR-Datei enthält also doppelte Klassennamen. Was sind die möglichen Auswirkungen von Duplikaten?

Danke.

    
romeo romeo 24.01.2012, 21:05
quelle

5 Antworten

15

Wenn es sich um doppelte Implementierungen handelt, ist nichts - egal, welche geladen werden sollen.

Wenn nicht, sind Sie der Reihenfolge der Klassenladung ausgeliefert und erhalten möglicherweise eine andere Version als gewünscht.

Es ist angegeben, dass Klassenpfadeinträge in der angegebenen Reihenfolge durchsucht werden (gemäß dieses Klassenpfaddokument ). Dies ist jedoch nur relevant, wenn Sie die Erstellung eines Klassenpfads vollständig steuern können (anders als beispielsweise in einer Web-App).

(Mit der Einschränkung, dass der Classpath-Platzhalter die Reihenfolge nicht deterministisch macht.)

    
Dave Newton 24.01.2012 21:09
quelle
4

Im Allgemeinen wird diese Situation nicht empfohlen und sollte vermieden werden.

Jars in Java sind nur Container für Ihre Klassendateien. Java verwendet Klassenloader, die den Klassenpfad betrachten und Klassendateien von dort laden. Wenn Sie also 2 Gläser A.jar und B.jar haben, die dieselbe Klasse x.y.Foo haben, wird die Klasse aus dem Jar geladen, die zuerst im Klassenpfad steht. Wenn Ihr Klassenpfad also A.jar, B.jar (in dieser Reihenfolge) ist, wird die Klasse Foo von A.jar zur Laufzeit verwendet. Diese Inkonsistenz kann aus meiner Erfahrung zu sehr schwer zu behebenden Fehlern führen.

    
Mark Bramnik 24.01.2012 21:16
quelle
1

Was bedeutet dupliziert? Es ist offensichtlich, dass Sie nicht 2 Klassen mit demselben Namen im selben Paket haben können (selbst Ihr Projekt wird nicht kompiliert), aber wenn Sie meinen, dass Sie 2 Klassen mit demselben Namen in verschiedenen Paketen haben, ist "ok". p>     

elopez 24.01.2012 21:34
quelle
0

Ich stimme Dave zu.

Können Sie sie nach Namensraum trennen, um die von ihm vorgeschlagenen Fallstricke zu vermeiden?

    
Travis J 24.01.2012 21:12
quelle
0

Eine weitere Antwort, die ich hier nicht besprochen habe, ist, dass, wenn Sie planen, Ihre Gläser, aars, apks zu signieren, dann wird es sich beschweren, dass Sie doppelte Einträge haben

%Vor%     
sabujp 31.08.2017 17:41
quelle

Tags und Links