当前位置: 首页 > 知识库问答 >
问题:

maven依赖插件不显示测试范围的依赖项

司徒俊雄
2023-03-14

我试图从命令行显示我正在使用maven dependency插件版本3.1.2开发的项目的完整依赖关系树,但是mvn dependency:tree目标(以及maven dependency插件中的任何其他目标)没有显示test依赖关系。插件的文档(https://maven.apache.org/plugins/maven-dependency-plugin/tree-mojo.html)声明默认情况下包含所有作用域,因此不需要使用-Dscope=test(但添加此参数时,输出不会更改)。

我用一个干净的. m2存储库运行了这个,没有使用settings.xml文件(以确保所有工件都直接来自repo.maven.apache.org)。

我在linux环境(CentOS 7)上使用maven 3.6.2,并使用Oracle Java 1.8.0144

这是我的POM:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.sw-eval</groupId>
  <artifactId>cayenne-eval</artifactId>
  <version>1.0.0-SNAPSHOT</version>

  <dependencies>
    <dependency>
      <groupId>org.apache.cayenne</groupId>
      <artifactId>cayenne-server</artifactId>
      <version>4.2.M2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.cayenne</groupId>
      <artifactId>cayenne-di</artifactId>
      <version>4.2.M2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.cayenne</groupId>
      <artifactId>cayenne-dbsync</artifactId>
      <version>4.2.M2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.cayenne</groupId>
      <artifactId>cayenne-client</artifactId>
      <version>4.2.M2</version>
    </dependency>
  </dependencies>

</project>

下面是我从运行命令mvn dependency:tree中得到的输出:

[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< com.sw-eval:cayenne-eval >----------------------
[INFO] Building cayenne-eval 1.0.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ cayenne-eval ---
[INFO] com.sw-eval:cayenne-eval:jar:1.0.0-SNAPSHOT
[INFO] +- org.apache.cayenne:cayenne-server:jar:4.2.M2:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.7.25:compile
[INFO] +- org.apache.cayenne:cayenne-di:jar:4.2.M2:compile
[INFO] +- org.apache.cayenne:cayenne-dbsync:jar:4.2.M2:compile
[INFO] |  +- org.apache.cayenne:cayenne-project:jar:4.2.M2:compile
[INFO] |  \- net.java.dev.inflector:inflector:jar:0.7.0:compile
[INFO] \- org.apache.cayenne:cayenne-client:jar:4.2.M2:compile
[INFO]    +- com.caucho:hessian:jar:4.0.63:compile
[INFO]    \- org.apache.cayenne:cayenne-rop-server:jar:4.2.M2:compile
[INFO]       +- org.apache.cayenne:cayenne-web:jar:4.2.M2:compile
[INFO]       \- org.slf4j:slf4j-simple:jar:1.7.25:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.951 s
[INFO] Finished at: 2020-11-25T08:53:17-07:00
[INFO] ------------------------------------------------------------------------

但是,当提到cayenne serverpom时,有许多标记为test的依赖项没有显示在输出中(具体来说,以下是cayenne server的直接依赖项,请参见https://search.maven.org/artifact/org.apache.cayenne/cayenne-server/4.2.M2/jar):

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.cayenne.build-tools</groupId>
            <artifactId>cayenne-test-utilities</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-mock</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.mockrunner</groupId>
            <artifactId>mockrunner-jdbc</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <!-- this one have old Xerces dependency that clashes with JDK's one -->
                    <groupId>nekohtml</groupId>
                    <artifactId>nekohtml</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>xmlunit</groupId>
            <artifactId>xmlunit</artifactId>
            <scope>test</scope>
        </dependency>

那么,我是否缺少一些需要启用的功能来显示这些测试范围的依赖项,和/或这是cayenne server依赖项特有的奇怪工件?

提前谢谢!


共有1个答案

夹谷成龙
2023-03-14

范围测试的依赖项不可传递。

依赖项的测试依赖项不是依赖项树的一部分。他们被马文忽视了。

 类似资料:
  • 我想知道为什么我的简单spring boot项目不再有效。它基本上直接来自spring示例,其中一个控制器说hello world。我使用的是spring boot starter jetty和spring boot v1.1.10(也尝试了1.2.0)。我有一些使用嵌入式solr的单元测试,所以solr核心被标记为<代码> 我认为测试范围的依赖关系不应该干扰编译范围的依赖关系,并且“仅适用于测试

  • 41.1 测试范围内的依赖 如果使用了spring-boot-starter-test“启动器”(scope为test),将得到以下库: JUnit —— Java程序单元测试事实上的标准 Spring Test & Spring Boot Test —— 工具类以及支持Spring Boot程序的集成测试 AssertJ —— 一个优美的断言库 http://hamcrest.org/JavaH

  • PS:请不要建议我在这里使用assembly或其他fat-jar插件,因为我有意复制依赖项jar用于Docker映像构建优化:一层用于依赖项,另一层用于jar,在任何依赖项改变之前,依赖项层总是被缓存:

  • 最近,我发现了以下问题: 当我为我的项目设置依赖项管理时,我有一个child-pom,它使用具有依赖项的插件,我想要与在我的依赖项管理中声明的依赖项同步。 在根pom中,我在依赖项管理中声明: 在子pom中,我有一个插件需要gwt-user: 但是,如果我移除gwt-maven-plugin中使用的依赖版本,编译就会失败。 是不是还有别的办法可以实现呢? PS:在maven和maven插件中有一个

  • 问题:Maven在我的测试中找不到一些依赖项 在我的pom中是这样导入的。xml: 我已经试过了: mvn测试编译 使Intellij缓存无效 重启Intellij 清除. m2并重建项目

  • 目前我的项目使用Spring启动测试如下: 但是,尽管有测试范围,它还是引入了sping-core(这是此版本中易受攻击的tpl)作为编译范围传递依赖项,并且它出现在我编译的二进制文件中。 我知道我可以通过使用测试范围显式拉动Spring核心来解决这个问题: 然而,这不应该是必要的。为什么只有在将依赖项拉入编译范围的测试中才有依赖项?