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.
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.)
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.
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>
Tags und Links java class ant jar duplicates