Maven 依赖项 :analyze thinks my JDBC JARs are "unused"

dudu 阅读:34 2025-04-02 23:11:03 评论:0

我正在使用 MySQL 连接器 JAR 建立 JDBC 连接。我的理解是我在类路径中只有这个 JAR,当我指定 mysql: 时它会被动态加载。在连接字符串中。

我在 POM 中使用 <scope>runtime</scope> 声明了这种依赖关系.当我运行 mvn dependency:analyze ,它将此 Artifact 报告为“未使用”。我想它无法通过简单的静态分析确定我是否需要它,好吧,但可以肯定的是,几乎所有 runtime 都是如此。 -范围的神器,对吧?我如何才能让 Maven 相信这个 Artifact 确实需要存在?

请您参考如下方法:

dependency:tree 将列出您的 pom 文件引用的所有 Artifact ,如果您正在寻找的话。否则你很可能不走运。 Maven 公开声明他们的依赖分析器在字节码级别工作,并且会在某些情况下错误地将依赖报告为未使用。

可能会或可能不会使用运行时范围的依赖项,无法通过字节码分析来判断(事实上,无法通过我能想到的大多数分析来判断)。 Maven 必须决定是假设它们已被使用还是假设它们未被使用,他们选择了后者,认为用户可以弄清楚。

没有选项告诉 Maven 将运行时范围的依赖项视为已使用,但您可以手动将特定 Artifact 添加到配置中的 usedDependencies 数组。 Maven 将简单地假设使用了这些依赖项。您也可以编写自己的依赖性分析器或寻找可以处理这种情况的第 3 方依赖性分析器。

==评论更新==

你是对的,它很新。 issue已在 2012 年 11 月 25 日发布的 2.6 版中得到修复。它还没有出现在许多公共(public)镜像存储库中。你可以找到它here .

由于它太新了,所以没有它的用​​法示例,但是 Maven 遵循一些约定。我希望它被声明为:

<build> 
    <plugins> 
     <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-dependency-plugin</artifactId> 
        <version>2.6</version> 
        <configuration> 
          <usedDependencies> 
            <usedDependency>org.foo.bar:baz-tron</usedDependency> 
            <usedDependency>org.foo:whatsit</usedDependency> 
          </usedDependencies> 
        </configuration> 
      </plugin> 
    </plugins> 
  </build> 


标签:Maven
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号