Frage

Ihr Projekt enthält eine JAR-Datei, weil es als transitive Abhängigkeit aufgeführt ist.

Allerdings habe ich nicht nur bestätigt, dass ich brauche es nicht, aber es verursacht Probleme, weil eine Klasse innerhalb des JAR-Dateien Schatten eine Klasse ich in einer anderen JAR-Datei benötigen.

Wie verlasse ich eine einzige JAR-Datei von meiner transitiven Abhängigkeit aus?

War es hilfreich?

Lösung

Sie können eine Abhängigkeit in der folgenden Weise ausschließen:

        <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring</artifactId>
                <version>2.5.6</version>
                <exclusions>
                        <exclusion>
                                <groupId>commons-logging</groupId>
                                <artifactId>commons-logging</artifactId>
                        </exclusion>
                </exclusions>
        </dependency>

Andere Tipps

Der richtige Weg ist, um die Ausschlüsse Mechanismus zu verwenden, aber manchmal können Sie es vorziehen, den folgenden Hack zu verwenden, anstatt eine große Anzahl von Ausnahmen zu vermeiden, das Hinzufügen, wenn viele Artefakte die gleiche transitive Abhängigkeit, die Sie ignorieren möchten. Anstatt einen Ausschluss spezifizieren, definieren Sie eine zusätzliche Abhängigkeit mit einem Rahmen von „vorgesehen“. Dies sagt Maven, dass Sie manuell kümmern werden diesen Artefakt zur Laufzeit der Bereitstellung und so wird es nicht verpackt werden. Zum Beispiel:

    <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring</artifactId>
            <version>2.5.6</version>
    </dependency>
    <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
            <scope>provided</scope>
    </dependency>

Nebeneffekt: Sie müssen angeben, a Version der Artefakt-zu-sein-ignoriert und seine POM wird zur Buildzeit abgerufen werden; dies ist nicht der Fall mit regelmäßigen Ausschlüssen. Dies könnte ein Problem für Sie sein, wenn Sie Ihren privaten Maven Repository hinter einer Firewall ausgeführt werden.

Sie können dies tun, indem sie ausdrücklich die problematische Artefakt auszuschließen. Nehmen Sie die Abhängigkeit, die das Problem und markieren es enthält ausgeschlossen werden:

Aus dem Maven Webseite :

<dependency>
  <groupId>group-a</groupId>
  <artifactId>artifact-a</artifactId>
  <version>1.0</version>
  <exclusions>
    <exclusion>
      <groupId>group-c</groupId>
      <artifactId>excluded-artifact</artifactId>
    </exclusion>
  </exclusions>
</dependency>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top