Maven 依赖项 :analyze thinks my JDBC JARs are "unused"
我正在使用 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>
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。