2017-04-03 3 views
2

Neu ausgesetzt Maven, kann ich den Anwendungsfall des <exclusion>-Tag, verstehen, aber nicht sicher, warum es nicht Fehler verursachen würde kompilieren:Warum Maven-Abhängigkeitsausschluss keinen Kompilierungsfehler verursachen würde?

<dependencies> 
<dependency> 
    <groupId>org.apache.maven</groupId> 
    <artifactId>maven-embedder</artifactId> 
    <version>2.0</version> 
    <exclusions> 
    <exclusion> 
     <groupId>org.apache.maven</groupId> 
     <artifactId>maven-core</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 
... 

ist dies nur möglich, wenn Sie nur haben Sie eine weitere direkte Abhängigkeit von Maven-Core? Andernfalls sollte der Kompilierfehler auftreten. (Unter der Annahme maven-core wird irgendwo in maven-embedder verwendet)

Antwort

1

Es gibt verschiedene Möglichkeiten:

  1. Wie Carl sagte: Überprüfen Sie Ihre dependency:tree wenn die Abhängigkeit nicht von irgendwo anders in gezogen.
  2. Es ist möglich, dass maven-core überhaupt nicht verwendet wird, auch wenn maven-embedder es tatsächlich verwendet: Nehmen wir z. Das maven-embedder hat zwei Klassen A und B. Sie verwenden nur A, aber maven-core wird nur von B verwendet. Dann (wenn A und B einander nicht verwenden), ist Ihr Projekt möglicherweise vollständig unabhängig von maven-core. (Eine Randbemerkung: einige Gläser sollten logischerweise zwei getrennte Gläser sein, aber aus irgendeinem Grund zusammengefügt werden - in unserem Beispiel sollte man darüber nachdenken, A und B in separate Artefakte zu setzen).
  3. Es ist möglich, dass transitive Abhängigkeiten zur Kompilierzeit nicht erforderlich sind, aber zur Laufzeit verwendet werden.
0

Der Fehler wird in der Kompilierung nicht geworfen, es wird in der Laufzeit geworfen, wenn Sie eine Funktion verwenden, hängt von Maven-Core

1

Sie sind mit Ausnahme jenes Artefakt aus, dass spezifische Abhängigkeit, aber es könnte aus einer anderen Abhängigkeit gezogen werden. Die Verwendung von etwas mvn dependency:tree -Dverbose -Dincludes=maven-core sollte Ihnen zeigen, was sonst noch die Abhängigkeit einführt. The Maven Enforcer plugin can also help exclude transitive dependencies.

+0

das ist definitiv möglich, JF Meilers Antwort deckt mehr Möglichkeiten ab. – javarookie

Verwandte Themen