I am working with Maven project and I have two projects, ProjectA
and ProjectB
. My ProjectA
is a maven library whose pom looks like this:
我正在使用Maven项目,我有两个项目,ProjectA和ProjectB。我的ProjectA是一个maven库,其pom如下所示:
<?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>
In my above pom, PartialKernel
is bringing older version of various Spring Framework dependencies like spring-core
, spring-web
. It is bringing 3.2.8.RELEASE
version and I want to use latest version of those two spring framework, which is 4.1.6.RELEASE
. What is the right way to exclude older versions of spring-core
and spring-web
coming from PartialKernel
and use latest version?
在上面的pom中,PartialKernel带来了各种Spring Framework依赖项的旧版本,如spring-core,spring-web。它带来了3.2.8.RELEASE版本,我想使用这两个spring框架的最新版本,即4.1.6.RELEASE。排除来自PartialKernel并使用最新版本的旧版spring-core和spring-web的正确方法是什么?
<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>
I need to use latest version since some classes are there in latest version only.
我需要使用最新版本,因为有些类只有最新版本。
1 个解决方案
#1
9
There may be incompatible differences between the version of a library that a dependency requires and the one you want to use. If you are happy to take this risk, you can use maven exclusions
to ignore transitive dependencies.
在依赖项所需的库版本与您要使用的库之间可能存在不兼容的差异。如果您愿意冒这个风险,可以使用maven排除来忽略传递依赖。
You can exclude, for example, spring-core
from being brought in by PartialKernel
by adding:
例如,你可以通过添加以下内容来排除Spring-core被PartialKernel引入:
<dependency>
<groupId>com.texture.partial.core</groupId>
<artifactId>PartialKernel</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
</dependency>
Note that you will have to do this for every dependency that brings in spring dependencies.
请注意,您必须为引入spring依赖项的每个依赖项执行此操作。
Now define the version of spring-core
you want to use in the top level pom dependency management section:
现在定义要在*pom依赖关系管理部分中使用的spring-core的版本:
<dependencyManagement>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
</dependencyManagement>
#1
9
There may be incompatible differences between the version of a library that a dependency requires and the one you want to use. If you are happy to take this risk, you can use maven exclusions
to ignore transitive dependencies.
在依赖项所需的库版本与您要使用的库之间可能存在不兼容的差异。如果您愿意冒这个风险,可以使用maven排除来忽略传递依赖。
You can exclude, for example, spring-core
from being brought in by PartialKernel
by adding:
例如,你可以通过添加以下内容来排除Spring-core被PartialKernel引入:
<dependency>
<groupId>com.texture.partial.core</groupId>
<artifactId>PartialKernel</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
</dependency>
Note that you will have to do this for every dependency that brings in spring dependencies.
请注意,您必须为引入spring依赖项的每个依赖项执行此操作。
Now define the version of spring-core
you want to use in the top level pom dependency management section:
现在定义要在*pom依赖关系管理部分中使用的spring-core的版本:
<dependencyManagement>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
</dependencyManagement>