2016-08-01 14 views
0

Ich benutze Maven, um ein jar-with-dependencies jar zu erstellen. Eine der Vendor-JAR-Dateien im Projekt hat ähnlich Klassen mit unterschiedlichen Fällen benannt. Zum Beispiel aM.class und am.class.Maven-Build scheint Klassen beim Erstellen von JAR-with-dependencies zu überschreiben

Wenn der Build die JAR-Datei "jar-with-dependencies" erstellt, ist nur aM.class vorhanden. am.class scheint überschrieben oder übersprungen worden zu sein. Das Gleiche passiert für alle ähnlich benannten Klassen-Dateien.

Wir haben ein paar Workarounds, aber ich bin neugierig, warum sich der Maven Build so verhält. Dank

Mein Pom:

 <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.1</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>com.mytest.MyTest</mainClass> 
        </manifest> 
       </archive> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
      </configuration> 
      <executions> 
       <execution> 
        <id>make-assembly</id> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

<dependencies> 
     <dependency> 
      <groupId>com.bloomberglp</groupId> 
      <artifactId>blpapi3</artifactId> 
      <version>3.10.1</version> 
     </dependency> 
</dependencies> 
+0

Hmm dies ist wahrscheinlich aufgrund der Tatsache, dass Sie kompilieren unter Windows und es ist Groß-und Kleinschreibung Betriebssystem. Aber ich bin nicht sicher, warum das OS beim Entpacken der Abhängigkeiten ins Spiel kommen würde. Versuchen Sie es mit der neuesten Version von 'maven-assembly-plugin' 2.6. – Tunaki

+0

Wenn Sie wirklich Klassen haben, die identisch benannt sind und ihr Paket das gleiche ist, wie sollte der Klassenlader so etwas handhaben? Welche Klasse wird zuerst geladen? – khmarbaise

+0

Ja ..... das ist irgendwie peinlich, aber ich habe vergessen, Windows ist nicht Groß-und Kleinschreibung. Der Hersteller-Jar muss unter Linux/Solaris generiert werden. Die Verwendung des Schatten-Plugins anstelle des Assembly-Plugins behebt mein Problem. Danke – Roy

Antwort

0

gleiche Klasse Konflikt Problem mit Maven-Montage-Plugin passieren wird, dieses Plugin extrahiert alle Abhängigkeits Gläser in rohe Klassen und Gruppen es together.It mit weniger Abhängigkeiten in Projektarbeiten Nur für ein großes Projekt mit vielen Abhängigkeiten führt dies zu einem Konflikt bei der Java-Klassennamenkonfliktprüfung, siehe here.

Bessere Weise, maven-shade-plugin zu verwenden, wenn Sie viele Gläser mit potentiellem Konflikt haben können. Sie können auch Sie relocating Feature in Schatten-Plugin explizit Konflikte zu vermeiden

+0

Danke ... Das Maven-Shade-Plugin funktioniert bei mir. – Roy