Maven依赖:analyze认为我的JDBC JAR是“未使用的”

时间:2012-11-28 11:15:19

标签: maven jdbc dependency-management

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

我使用<scope>runtime</scope>在我的POM中声明了这个依赖项。当我运行mvn dependency:analyze时,它会将此工件报告为“未使用”。我想它无法通过简单的静态分析来确定我是否需要它,很好,但是对于任何runtime范围的工件来说肯定会是真的,对吧?我怎样才能说服Maven真的需要这个神器呢?

1 个答案:

答案 0 :(得分:3)

dependency:tree将列出您的pom文件引用的所有工件(如果这是您要查找的工件)。否则你可能会运气不好。 Maven公开声明他们的依赖分析器在字节码级别工作,并且会错误地将依赖关系报告为在某些情况下未使用。

可能使用或不使用运行时范围的依赖关系,使用字节码分析是不可能的(实际上,我无法用大多数分析来判断)。 Maven必须决定假设它们被使用或假设它们未被使用,而后者则认为用户可以解决这个问题。

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

==评论更新==

你是对的,这是新的。 issue已在2012年11月25日发布的2.6版本中得到修复。它还没有出现在许多公共镜像存储库中。你可以找到它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>