maven 依赖关系不幸的是,管理不是可传递的

x7rlezfr  于 2023-02-21  发布在  Maven
关注(0)|答案(1)|浏览(198)

最近,我不断遇到以下问题:
库项目A有一个可传递的依赖项B。依赖项B有漏洞。我通过添加一个<dependencyManagement>条目到A(或它的多模块父项)来更新B来纠正这一点。然后一切都很好,依赖树和依赖列表都很好,测试是绿色的。
现在,另一个项目P使用A作为依赖项,在项目P中,传递依赖项B又有了坏的(易受攻击的)版本,因为A的<dependencyManagement>被忽略了。
我该怎么办

  • <dependencyManagement>条目也添加到P中,尽管它实际上并不属于那里。
  • 不使用<dependencyManagement>,而只使用依赖项?
efzxgjgh

efzxgjgh1#

以下是另外两个完整选项:

  1. flatten-maven-plugin具有允许克服这样的问题的设置:
    展平直接依赖关系和传递依赖关系。这将检查完整的依赖关系树,并将所有传递依赖关系作为直接依赖关系拉出,并相应地设置它们的版本。如果您要发布使用依赖关系管理来管理依赖关系版本的库,则建议执行此操作
    但是它会产生奇怪的泡泡,比如:
<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>5.3.23</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>
          <artifactId>spring-jcl</artifactId>
          <groupId>org.springframework</groupId>
        </exclusion>
      </exclusions>
      <optional>false</optional>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jcl</artifactId>
      <version>5.3.23</version>
      <scope>compile</scope>
      <optional>false</optional>
    </dependency>

1.看起来所有的东西都已经在maven-resolver项目中实现了,但是没有集成到maven中(请检查MNG-5761MRESOLVER-10MRESOLVER-33)。从这个Angular 看,实现一些琐碎的扩展就足够了,比如:

import org.apache.maven.AbstractMavenLifecycleParticipant;
import org.apache.maven.MavenExecutionException;
import org.apache.maven.execution.MavenSession;
import org.codehaus.plexus.component.annotations.Component;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.util.graph.manager.DefaultDependencyManager;

@Component(role = AbstractMavenLifecycleParticipant.class)
public class TransitiveDependencyManagementLifecycleParticipant extends AbstractMavenLifecycleParticipant {

    @Override
    public void afterSessionStart(MavenSession session) throws MavenExecutionException {
        ((DefaultRepositorySystemSession) session.getRepositorySession())
                .setDependencyManager(new DefaultDependencyManager());
    }

}

相关问题