如何在Maven中指定带jre11后缀的mssql-jdbc版本范围?
Maven中mssql-jdbc指定JRE版本范围的解决方案
你之前尝试的[12.6.1,12.99].jre11写法不符合Maven版本范围的语法规范,Maven要求版本范围的边界必须是完整的版本号,以下是几种可行的实现方式:
1. 正确的版本范围写法
将jre11后缀包含在范围的两端,明确指定要匹配的JRE版本:
<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>[12.6.1.jre11,13.0.0.jre11)</version> </dependency>
该范围会匹配12.6.1.jre11及以上、13.x.x.jre11以下的所有版本,既满足你对主版本的范围要求,又确保只会选到JRE11兼容的包。
2. 用Maven属性统一管理版本
如果需要在多个依赖中复用版本规则,可以通过properties定义统一属性:
<properties> <mssql-jdbc.version>[12.6.1.jre11,13.0.0.jre11)</mssql-jdbc.version> </properties> <dependencies> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>${mssql-jdbc.version}</version> </dependency> </dependencies>
3. 用Enforcer插件强制校验(可选)
如果要从构建层面避免误引入非JRE11版本的依赖,可以添加Maven Enforcer插件做强制校验:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <id>enforce-mssql-jre-version</id> <goals> <goal>enforce</goal> </goals> <configuration> <rules> <banDependencies> <excludes> <exclude>com.microsoft.sqlserver:mssql-jdbc:*:*jre[8,10],[12,)</exclude> </excludes> <message>仅允许引入JRE11版本的mssql-jdbc依赖!</message> </banDependencies> </rules> </configuration> </execution> </executions> </plugin> </plugins> </build>
这个配置会在构建时拦截所有非JRE11版本的mssql-jdbc包,进一步降低版本错误的风险。
内容的提问来源于stack exchange,提问作者Mikhail T.
相关产品推荐
相关产品推荐

