3

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

我在我的 POM 中使用<scope>runtime</scope>. 当我运行时mvn dependency:analyze,它将此工件报告为“未使用”。我想它无法通过简单的静态分析来确定我是否需要它,很好,但对于任何范围内的runtime工件肯定都是如此,对吧?我怎样才能让 Maven 相信这个工件真的需要在那里?

4

1 回答 1

4

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>
于 2012-11-28T13:08:01.767 回答