java Maven中未使用/未声明的依赖项是什么?怎么办?

ovfsdjhp  于 2023-10-14  发布在  Java
关注(0)|答案(4)|浏览(146)

Maven dependency:analyze抱怨我的项目中的依赖关系。它如何确定哪些是未使用的,哪些是未声明的?我该怎么办?
范例:

$ mvn dependency:analyze 
...
[WARNING] Used undeclared dependencies found:
[WARNING]    org.slf4j:slf4j-api:jar:1.5.0:provided
[WARNING]    commons-logging:commons-logging:jar:1.1.1:compile
[WARNING]    commons-dbutils:commons-dbutils:jar:1.1-osgi:provided
[WARNING]    org.codehaus.jackson:jackson-core-asl:jar:1.6.1:compile

...
[WARNING] Unused declared dependencies found:
[WARNING]    commons-cli:commons-cli:jar:1.0:compile
[WARNING]    org.mortbay.jetty:servlet-api:jar:2.5-20081211:test
[WARNING]    org.apache.httpcomponents:httpclient:jar:4.0-alpha4:compile
[WARNING]    commons-collections:commons-collections:jar:3.2:provided
[WARNING]    javax.mail:mail:jar:1.4:provided

注意:这些依赖中的很多都在我的运行时容器中使用,我将它们声明为提供的,以避免在不同版本的类路径上两次使用相同的库。

vaj7vani

vaj7vani1#

我不知道Maven是如何决定的。不要求解决本报告所报告的所有项目,但可酌情使用此信息。

  • Used undeclared dependencies* 是那些必需的,但尚未在项目中显式声明为依赖的依赖。然而,由于项目中其他依赖项的传递依赖性,它们是可用的。显式地声明这些依赖关系是一个好主意。这还允许您控制这些依赖项的版本(可能与运行时提供的版本相匹配)。

至于 * 未使用的声明依赖项 *,删除它们是一个好主意。为什么要在项目中添加不必要的依赖项?但是,传递性可能会带来这些,也许,与您的运行时版本冲突。在这种情况下,您需要指定它们-本质上是为了控制version
顺便说一句,mvn dependency:tree给出了项目的依赖关系树,这使您能够更好地了解每个依赖关系如何适应您的项目。

628mspwn

628mspwn2#

答案是:
“它如何确定哪些是未使用的,哪些是未申报的?“.
Maven使用Object WebASM框架来分析原始字节码。它遍历所有的类,然后构建这些类引用的所有类的列表。就是这样
至于怎么做,我不建议删除“未使用的,声明的依赖项”,除非你绝对确定它们实际上没有使用。

jv4diomz

jv4diomz3#

已使用 un 声明的依赖项

简单地说,它们是传递依赖,* 你正在使用它们 *,但 * 没有在POM文件中显式声明它们。
在下面的图中,是橙子色的。

提示:
最好在POM文件中声明它们,使其与第一级依赖项松散耦合,这样,如果将来他们计划更改其实现,不再使用这种传递依赖项,您的应用程序将是安全的!

Unused declared dependencies

简单地说,它们是依赖项,* 您在POM文件中声明它们 *,而不在应用程序代码中使用它们 *。
在下面的图表中,红色的。

提示:
最好从POM文件中删除它们,因为它们没有被使用,并保存应用程序工件的最终大小,以避免任何开发人员错误地使用错误的类!

wgx48brx

wgx48brx4#

这可以通过在pom.xml中添加ignoredUnusedDeclaredDependencies轻松解决

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <configuration>
                <ignoredUnusedDeclaredDependencies>
                    <ignoredUnusedDeclaredDependency>org.slf4j:slf4j-api</ignoredUnusedDeclaredDependency>
                </ignoredUnusedDeclaredDependencies>
            </configuration>
        </execution>
    </executions>
 </plugin>

相关问题