我正在使用 MySQL 连接器 JAR 来建立 JDBC 连接。我的理解是我只是在类路径中有这个 JAR,当我mysql:
在连接字符串中指定时它会被动态加载。
我在我的 POM 中使用<scope>runtime</scope>
. 当我运行时mvn dependency:analyze
,它将此工件报告为“未使用”。我想它无法通过简单的静态分析来确定我是否需要它,很好,但对于任何范围内的runtime
工件肯定都是如此,对吧?我怎样才能让 Maven 相信这个工件真的需要在那里?
我正在使用 MySQL 连接器 JAR 来建立 JDBC 连接。我的理解是我只是在类路径中有这个 JAR,当我mysql:
在连接字符串中指定时它会被动态加载。
我在我的 POM 中使用<scope>runtime</scope>
. 当我运行时mvn dependency:analyze
,它将此工件报告为“未使用”。我想它无法通过简单的静态分析来确定我是否需要它,很好,但对于任何范围内的runtime
工件肯定都是如此,对吧?我怎样才能让 Maven 相信这个工件真的需要在那里?
dependency:tree
如果这是您要查找的内容,将列出您的 pom 文件引用的所有工件。否则你很可能不走运。Maven 公开声明他们的依赖分析器在字节码级别工作,并且在某些情况下会错误地将依赖项报告为未使用。
运行时范围的依赖可能会或可能不会被使用,这是无法用字节码分析来判断的(事实上,用我能想到的大多数分析来判断是不可能的)。Maven 必须决定要么假设它们被使用,要么假设它们未被使用,并且他们选择了后者,认为用户可以弄清楚。
没有选项可以告诉 Maven 将运行时范围的依赖项视为已使用,但您可以手动将特定工件添加到usedDependencies
配置中的数组。Maven 将简单地假设使用了这些依赖项。您还可以编写自己的依赖分析器或找到可以处理这种情况的第 3 方依赖分析器。
==更新评论==
你是对的,它很新。该问题已在 2012 年 11 月 25 日发布的 2.6 版中得到修复。它尚未出现在许多公共镜像存储库中。你可以在这里找到它。
由于它是如此新,因此没有使用示例,但是 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>