2017-08-31 4 views
1

Ich habe ein utils-Projekt, das Abhängigkeiten wieClassNotFoundException in depdendent Projekt

<dependency> 
     <groupId>org.bouncycastle</groupId> 
     <artifactId>bcmail-jdk15on</artifactId> 
     <version>1.56</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-codec</groupId> 
     <artifactId>commons-codec</artifactId> 
     <version>1.9</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-collections4</artifactId> 
     <version>4.0</version> 
    </dependency> 

Und dann mein anderes Projekt ist abhängig von utils hat:

<dependency> 
     <groupId>com.mycomp.proj</groupId> 
     <artifactId>utils</artifactId> 
     <version>${utils.version}</version> 
    </dependency> 

Dies funktioniert ohne Probleme. Dann habe ich dieses Paket utils:

<dependency> 
     <groupId>net.sf.jopt-simple</groupId> 
     <artifactId>jopt-simple</artifactId> 
     <version>4.9</version> 
    </dependency> 

I mvn clean install utils zuerst, dann mein Hauptprojekt und beide ohne Fehler zu bauen. Aber aus irgendeinem Grund, wenn ich versuche, das Hauptprojekt zu laufen, wenn sie die Klasse erreicht, die Jopt-einfach verwendet, stürzt mit

ClassNotFoundException: joptsimple.OptionException 

Jede Idee, warum ich mein Hauptprojekt gut ohne Jopt-einfach in der laufen kann utils Paket, aber sobald ich es als eine Abhängigkeit hinzufügen, scheitert es? Ich habe das utils-Paket in meinem m2-Repo auch manuell gelöscht und es neu aufgebaut, um zu sehen, ob das behoben wurde, aber es nicht.

+2

Wenn Sie ohne die Abhängigkeit bauen konnten, bedeutet dies wahrscheinlich, dass die Klasse bereits im Klassenpfad vorhanden war. Die Einführung der Bibliothek könnte mehrere Implementierungen der gleichen Klasse oder deren Überschreibung verursachen. Könnten Sie den relevanten 'mvn-Abhängigkeit: Baum' Ihres Projekts, in dem Sie utils verwenden, teilen? – nullpointer

+0

Die unten hinzugefügte Abhängigkeit hebt die obige Abhängigkeit auf. Wenn Sie Eclipse verwenden, können Sie das Effektive Pom überprüfen. oder überprüfen Sie in der Abhängigkeitsprüfung, welche davon tatsächlich enthalten ist. Stellen Sie sicher, dass sich das JAR nicht bereits in einem Build-Pfad Ihres Projekts befindet. –

Antwort

-1

Sie können versuchen, folgenden- Sie eine Abhängigkeit mit System Umfang erklären kann, die Maven sagt, dass eine bestimmte JAR angenommen wird, in dem Classpath sein

So Maven wird diese Abhängigkeit nicht berühren und Sie können die setzen jar in Ihrem Klassenpfad manuell.

<dependency> 
    <groupId>net.sf.jopt-simple</groupId> 
    <artifactId>jopt-simple</artifactId> 
    <version>4.9</version> 
    <scope>system</scope> 
</dependency> 

Eine weitere Option - Wenn Sie diese jar-Datei selbst verwalten möchten, können Sie in Classpath oder lokalen Repo manuell hinzufügen und dann versuchen, Maven im Offline-Modus ausgeführt wird.

mvn -o install 
+0

* Laufender Maven im Offline-Modus * Wie würde das helfen? – nullpointer

+0

Wenn der Benutzer das JAR manuell im lokalen Repo/Classpath hinzugefügt hat, wird es nicht von Remote Repo heruntergeladen. So wird die externe Abhängigkeit weg sein. Wenn Sie jedoch eine externe Abhängigkeit herunterladen möchten, können Sie nicht im Offline-Modus arbeiten. – nagendra547

+0

* Benutzer hat das Glas manuell in lokalen Repo/Klassenpfad hinzugefügt * scheint mir nicht der Fall zu sein. – nullpointer

Verwandte Themen