Der folgende Editor bietet Ihnen eine kurze Diskussion über das Ladeproblem zweier JAR-Pakete, die genau denselben Paketnamen und Klassennamen enthalten. Der Herausgeber findet es ziemlich gut, deshalb werde ich es jetzt mit Ihnen teilen und es allen als Referenz geben. Folgen wir dem Editor und werfen wir einen Blick darauf.
Zuerst werden wir es von der Präsentationsebene aus vorstellen und uns dann später mit den Prinzipien befassen.
1. Stellen Sie zunächst kurz vor, wie Maven JAR-Dateien zum Testen generiert
<plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.4</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>Main.Main</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> 配置了一个manifest标签来配置Main函数的入口。然后通过如下指令来实现打包。 mvn assembly:assembly
2. Passen Sie zwei JAR-Pakete an, die denselben Paketnamen und Klassennamen enthalten.
Dies hängt mit der Importreihenfolge des Exports zusammen. Nur der erste wird geladen und läuft einwandfrei.
3. Benutzerdefinierte JAR- und JDK-Pakete, die denselben Paketnamen und Klassennamen enthalten
Es hängt mit der Importreihenfolge des Exports zusammen . Ebenso wird nur das erste geladen, aber wenn Sie ein benutzerdefiniertes JAR laden und ausführen, wird ein Fehler gemeldet. Das Laden von JDK ist normal.
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { synchronized (getClassLoadingLock(name)) { // First, check if the class has already been loaded Class<?> c = findLoadedClass(name); if (c == null) { long t0 = System.nanoTime(); try { if (parent != null) { c = parent.loadClass(name, false); } else { c = findBootstrapClassOrNull(name); } } catch (ClassNotFoundException e) { // ClassNotFoundException thrown if class not found // from the non-null parent class loader } if (c == null) { // If still not found, then invoke findClass in order // to find the class. long t1 = System.nanoTime(); c = findClass(name); // this is the defining class loader; record the stats sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0); sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1); sun.misc.PerfCounter.getFindClasses().increment(); } } if (resolve) { resolveClass(c); } return c; } }
4. Allgemeine Befehle für MVN-JAR-Paketkonflikte
MVN-Abhängigkeit: analysieren, mvn dependency:tree
Das obige ist der detaillierte Inhalt vonLadeproblem, wenn zwei JAR-Pakete genau denselben Paketnamen und Klassennamen enthalten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!