webentwicklung-frage-antwort-db.com.de

Maven-Abhängigkeiten ausschließen

Ich habe eine Frage zum Ausschluss von Maven-Abhängigkeiten. Folgendes berücksichtigen

   <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-taglibs</artifactId>
        <version>${spring-security.version}</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-web</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>3.1.0.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>3.1.0.RELEASE</version>
    </dependency>
    <dependency>

Ich versuche einen Übergang von Spring 3.0.6 zu 3.1.0 zu erreichen. Spring Security 3.1.0 hatte eine Abhängigkeit von Spring-Security-Web Version 3.0.6, die wiederum eine Abhängigkeit von Spring-Web 3.0.6 hatte. Ich muss alles auf 3.1.0 bringen. Ich schließe also spring-security-web von Spring security aus, habe eine separate Abhängigkeit für spring-security-web 3.1.0, die wiederum die spring-web 3.0.6-Version ausschließt, und biete eine separate spring-web 3.1.0-Version an. Diese Arbeit würde aber meiner Meinung nach einen wesentlich einfacheren Ansatz geben. Ich habe versucht, einen Ausschluss für Spring Web unter Spring Security zu setzen, aber es hat nicht funktioniert. Bitte helfen Sie.

22
Aravind A

Sie können den Abhängigkeitsverwaltungsmechanismus verwenden.

Wenn Sie Einträge im Abschnitt <dependencyManagement> Ihres pom für spring-security-web und spring-web mit dem gewünschten Versionssatz 3.1.0 erstellen, überschreibt die verwaltete Version des Artefakts die im transitiven Abhängigkeitsbaum angegebenen.

Ich bin nicht sicher, ob das wirklich Code spart, aber es ist eine sauberere Lösung, IMO.

22
Mike Deck

Globale Ausschlüsse sieht so aus, als würden sie bearbeitet , aber bis dahin ...

Aus der Sonatype Maven-Referenz (unten auf der Seite):

Das Abhängigkeitsmanagement in einem POM der obersten Ebene unterscheidet sich von der Definition einer Abhängigkeit von einem weit verbreiteten übergeordneten POM. Für den Anfang werden alle Abhängigkeiten vererbt. Wenn mysql-connector-Java als Abhängigkeit des übergeordneten Projekts der obersten Ebene aufgeführt wäre, würde jedes einzelne Projekt in der Hierarchie auf diese Abhängigkeit verweisen. Anstatt unnötige Abhängigkeiten hinzuzufügen, können Sie mit dependencyManagement die Verwaltung von Abhängigkeitsversionen konsolidieren und zentralisieren, ohne Abhängigkeiten hinzufügen zu müssen, die von allen untergeordneten Versionen geerbt werden. Mit anderen Worten, das dependencyManagement-Element entspricht einer Umgebungsvariablen, mit der Sie eine Abhängigkeit an einer beliebigen Stelle unter einem Projekt deklarieren können, ohne eine Versionsnummer anzugeben.

Als Beispiel:

  <dependencies>
    <dependency>
      <groupId>commons-httpclient</groupId>
      <artifactId>commons-httpclient</artifactId>
      <version>3.1</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>3.0.5.RELEASE</version>
    </dependency>
  </dependencies>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>commons-httpclient</groupId>
        <artifactId>commons-httpclient</artifactId>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
    </dependencies>
  </dependencyManagement>

Es macht den Code insgesamt nicht weniger ausführlich, aber es macht ihn weniger ausführlich, wo es darauf ankommt. Wenn Sie es immer noch weniger ausführlich möchten, können Sie befolgen Sie diese Tipps auch aus der Sonatype-Referenz.

12
Spencer Kormos