Maven中能否用通配符排除groupId以com.acme开头的所有依赖?
Maven中能否排除所有groupId以com.acme开头的依赖?
Maven原生的<exclusion>标签不支持通配符,你示例里的<groupId>com.acme*</groupId>写法不会生效——Maven会把它当成字面量匹配,只会排除groupId恰好为com.acme*的依赖,而非所有以com.acme开头的依赖。
下面是几种可行的解决方式:
方案1:用Maven Enforcer插件强制拦截
借助Enforcer插件的banDependencies规则,可以直接禁止所有com.acme开头的依赖引入,构建时一旦检测到就会报错终止。配置示例:<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <id>block-acme-deps</id> <goals> <goal>enforce</goal> </goals> <configuration> <rules> <banDependencies> <excludes> <exclude>com.acme:*</exclude> </excludes> <message>禁止引入com.acme开头的依赖</message> </banDependencies> </rules> </configuration> </execution> </executions> </plugin> </plugins> </build>方案2:手动逐个排除
如果涉及的com.acme系依赖数量不多,可在依赖声明里逐个添加具体的排除规则,精准控制:<dependency> <groupId>com.myproject</groupId> <artifactId>test</artifactId> <version>0.0.1-SNAPSHOT</version> <exclusions> <exclusion> <groupId>com.acme.core</groupId> <artifactId>acme-utils</artifactId> </exclusion> <exclusion> <groupId>com.acme.web</groupId> <artifactId>acme-web-core</artifactId> </exclusion> </exclusions> </dependency>方案3:通过依赖管理统一处理
在<dependencyManagement>中对com.acme开头的依赖统一设置providedscope,这样所有子模块引入这些依赖时,都会被标记为仅编译期可用,不会打包到最终产物中:<dependencyManagement> <dependencies> <dependency> <groupId>com.acme</groupId> <artifactId>*</artifactId> <version>0</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.acme.core</groupId> <artifactId>*</artifactId> <version>0</version> <scope>provided</scope> </dependency> </dependencies> </dependencyManagement>注:这里的
*通配符在依赖管理中的支持度依赖Maven版本,建议测试验证后使用。
内容的提问来源于stack exchange,提问作者Levent Tokmak
相关产品推荐
相关产品推荐

