如何在maven项目中只禁止一个可传递依赖项?

mlmc2os5  于 2024-01-06  发布在  Maven
关注(0)|答案(2)|浏览(311)

我目前正在尝试的是:

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-enforcer-plugin</artifactId>
  4. <version>1.4.1</version>
  5. <executions>
  6. <execution>
  7. <id>enforce-banned-dependencies</id>
  8. <goals>
  9. <goal>enforce</goal>
  10. </goals>
  11. <configuration>
  12. <rules>
  13. <banTransitiveDependencies>
  14. <excludes>
  15. <exclude>*:*:*</exclude>
  16. </excludes>
  17. <includes>
  18. <include>commons-lang:commons-lang:2.4</include>
  19. </includes>
  20. </banTransitiveDependencies>
  21. </rules>
  22. </configuration>
  23. </execution>
  24. </executions>
  25. </plugin>

字符串
我上面尝试的目的是:
禁止所有可传递依赖,除了commons-lang:2.4
当我试图

  1. mvn verify


我会得到

  1. [INFO] --- maven-enforcer-plugin:1.4.1:enforce (enforce-banned-dependencies) @ ebtam-core ---
  2. [INFO] ------------------------------------------------------------------------
  3. [INFO] BUILD SUCCESS
  4. [INFO] ------------------------------------------------------------------------


这并不好。因为我知道我的项目中有以下依赖项:

  1. [INFO] +- org.apache.velocity:velocity:jar:1.6.2:compile
  2. [INFO] | +- commons-lang:commons-lang:jar:2.4:compile


我做错了什么?

fjnneemd

fjnneemd1#

我不知道这是在哪里记录的,但问题是在检查banTransitiveDependencies规则时也会考虑当前的构建工件。然后,查看代码,因为这个工件被排除在外,所以它不会检查它的依赖关系。所以当你为排除模式指定*时,主工件匹配它,而其余的包含规则被忽略。所以下面是工作的:

  1. <rules>
  2. <banTransitiveDependencies>
  3. <excludes>
  4. <exclude>commons-lang</exclude>
  5. </excludes>
  6. <includes>
  7. <include>commons-lang:commons-lang:2.4</include>
  8. </includes>
  9. </banTransitiveDependencies>
  10. </rules>

字符串
但它并没有回答你的问题“禁止所有传递依赖,除了commons-lang:2.4”。
问题是,为什么你首先要使用这个规则?它是在MENFORCER-138中引入的,它的目标是强制开发人员不依赖于继承的传递依赖,并强制在POM中声明它们。
如果依赖项commons-lang:commons-lang:2.4在类路径中,则您的目标是使构建失败。因此,您应该使用bannedDependencies规则。默认情况下,它会传递地搜索依赖项。下面将执行您想要的操作,即仅禁止commons-lang:commons-lang:2.4

  1. <rules>
  2. <bannedDependencies>
  3. <excludes>
  4. <exclude>commons-lang:commons-lang:2.4</exclude>
  5. </excludes>
  6. </bannedDependencies>
  7. </rules>

展开查看全部
vyu0f0g1

vyu0f0g12#

Thanx的链接到插件的源代码。
我用规则解决了挑战

  1. <rules>
  2. <bannedDependencies>
  3. <excludes>
  4. <exclude>groupId:artifactId</exclude>
  5. </excludes>
  6. </bannedDependencies>
  7. </rules>

字符串
输出示例:

  1. Rule 0: org.apache.maven.enforcer.rules.dependency.BannedDependencies failed with message:
  2. SOME_GAV:36.0.39-SNAPSHOT
  3. SOME_GAV:30.000.00.41
  4. groupId:artifactId:jar:7.1.11 <--- banned via the exclude/include list


使用的插件版本:3.4.1

展开查看全部

相关问题