2015-04-20 11 views
6

Pracuję z projektem Maven i mam dwa projekty: ProjectA i ProjectB. Moja ProjectA jest biblioteką Maven którego pom wygląda następująco:Jak wykluczyć starsze wersje zależności użytkownika i użyć nowej wersji?

<?xml version="1.0" encoding="UTF-8"?> 
<project 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" 
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

    <modelVersion>4.0.0</modelVersion> 

    <parent> 
     <groupId>com.texture.partial</groupId> 
     <artifactId>PartialPlatform</artifactId> 
     <version>2.1.5-RELEASE</version> 
    </parent> 

    <groupId>com.texture.transform.golden</groupId> 
    <artifactId>SampleClient</artifactId> 
    <version>1.0.4</version> 

    <dependencies> 
     <dependency> 
      <groupId>com.google.code.gson</groupId> 
      <artifactId>gson</artifactId> 
      <version>2.2.4</version> 
     </dependency> 
     <dependency> 
      <groupId>com.texture.partial.core</groupId> 
      <artifactId>PartialKernel</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.texture.webres</groupId> 
      <artifactId>WebResPartial</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>jsp-api</artifactId> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.texture.kernel</groupId> 
      <artifactId>TextureServer</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.texture.kernel</groupId> 
      <artifactId>Kernel</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.texture.v3jars.Houston</groupId> 
      <artifactId>KernelDAL</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.texture.kernel</groupId> 
      <artifactId>uKernel</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.texture.kernel</groupId> 
      <artifactId>uKernelCore</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-beans</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-test</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-asm</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-expression</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aop</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>aopalliance</groupId> 
      <artifactId>aopalliance</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.servicemix.bundles</groupId> 
      <artifactId>org.apache.servicemix.bundles.cglib</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.texture.partial.core</groupId> 
      <artifactId>ConfigWeb</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.texture.partial.core</groupId> 
      <artifactId>PartialWeb</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.googlecode.jmockit</groupId> 
      <artifactId>jmockit</artifactId> 
      <version>1.7</version> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <configuration> 
        <argLine>-javaagent:"${settings.localRepository}"/com/googlecode/jmockit/jmockit/1.7/jmockit-1.7.jar</argLine> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>cobertura-maven-plugin</artifactId> 
       <configuration> 
        <instrumentation> 
         <excludes> 
          <exclude>**/test/**/*.class</exclude> 
         </excludes> 
        </instrumentation> 
        <formats> 
         <format>xml</format> 
         <format>html</format> 
        </formats> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Moim powyżej pom, PartialKernel przynosi starszą wersję różnymi zależnościami Spring Framework jak spring-core, spring-web. Przynosi wersję 3.2.8.RELEASE i chcę użyć najnowszej wersji tych dwóch wiosennych ram, które są 4.1.6.RELEASE. Jaki jest dobry sposób na wykluczenie starszych wersji spring-core i spring-web pochodzących z PartialKernel i korzystanie z najnowszej wersji?

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>4.1.6.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>4.1.6.RELEASE</version> 
    </dependency> 

Potrzebuję użyć najnowszej wersji, ponieważ niektóre klasy są dostępne tylko w najnowszej wersji.

+0

Jeśli podasz nowszą wersję tego samego artefaktu którymś z pom.xml udział w projekcie, powinien automatycznie z nich korzystać. W razie wątpliwości wygrywa Twój pom.xml z najwyższego poziomu. – Thilo

+0

Czy jesteś pewien, że te dwie wersje sprężynujące są rzeczywiście kompatybilne? – Thilo

Odpowiedz

7

Mogą wystąpić niekompatybilne różnice między wersją biblioteki zależnej od zależności i tą, której chcesz użyć. Jeśli z przyjemnością podejmiesz to ryzyko, możesz zignorować zależność przechodnią za pomocą programu maven exclusions.

można wykluczyć, na przykład, spring-core przed wniesionych przez PartialKernel dodając:

<dependency> 
    <groupId>com.texture.partial.core</groupId> 
    <artifactId>PartialKernel</artifactId> 
    <exclusions> 
     <exclusion> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

pamiętać, że trzeba to zrobić dla każdego uzależnienia, które przynosi w zależności sprężynowych.

Teraz określić wersję spring-core chcesz użyć w sekcji najwyższego poziomu pom dependency management:

<dependencyManagement> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>4.1.6.RELEASE</version> 
    </dependency> 
</dependencyManagement> 
+0

należy wykonać wykluczenia, aby usunąć błędy niezgodności zależności. – krock

Powiązane problemy