【问题标题】:Mockito Maven Dependency - Nested POM packagingMockito Maven 依赖 - 嵌套 POM 打包
【发布时间】:2018-03-22 10:08:52
【问题描述】:

我有一个项目依赖于 POM 打包项目

<dependency>
   <groupId>my.external</groupId>
   <artifactId>all-ext-libs</artifactId>
   <type>POM</type>
   <version>2.0-SNAPSHOT</version>
</dependency>

上述依赖有如下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>

    <parent>
        <groupId>my.external</groupId>
        <artifactId>mvn-root</artifactId>
        <version>1.2</version>
    </parent>

    <groupId>my.external</groupId>
    <artifactId>all-ext-libs</artifactId>
    <version>2.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <version>1.10.19</version>
            <scope>test</scope>
        </dependency>       
    </dependencies>
    <build>
        <finalName>${project.artifactId}-${project.version}-r${build.number}</finalName>

        <directory>${project.basedir}/target</directory>

        <sourceDirectory>src/main/java</sourceDirectory>
        <testSourceDirectory>src/test/java</testSourceDirectory>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
        <testResources>
            <testResource>
                <directory>src/test/resources</directory>
            </testResource>
        </testResources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <executions>
                    <execution>
                        <id>default-testCompile</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>testCompile</goal>
                        </goals>
                        <configuration>
                            <skip>${skipTestCompile}</skip>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <verbose>false</verbose>
                    <useIncrementalCompilation>false</useIncrementalCompilation>
                    <executable>${env.JAVA_HOME}/bin/javac</executable>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skipTests>${skipTestCompile}</skipTests>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <configuration>
                  <file>${project.build.finalName}</file>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <configuration>
                  <tagNameFormat>v@{project.version}</tagNameFormat>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

当我在my.external 项目上执行mvn clean install -U 时,它只下载JUnit 依赖项,而不下载mockito。我已经确认我的.m2 repo 中不存在 mockito。

依赖树什么时候弹出,但是当我从 .m2 缓存中删除它并执行 mvn clean install -U 时,它没有被下载:

[INFO] |  |     \- org.ow2.asm:asm-tree:jar:5.0.2:provided
[INFO] |  |        \- org.ow2.asm:asm:jar:5.0.2:provided
[INFO] |  +- org.apache.maven.reporting:maven-reporting-impl:jar:2.1:provided
[INFO] |  +- org.apache.maven.reporting:maven-reporting-api:jar:3.0:provided
[INFO] |  +- org.apache.maven:maven-plugin-descriptor:jar:2.2.1:provided
[INFO] |  +- org.apache.maven:maven-artifact:jar:2.2.1:compile
[INFO] |  +- org.apache.maven.doxia:doxia-core:jar:1.4:provided
[INFO] |  |  +- org.apache.maven.doxia:doxia-logging-api:jar:1.4:provided
[INFO] |  |  \- org.codehaus.plexus:plexus-component-annotations:jar:1.5.5:compile
[INFO] |  +- org.apache.maven.doxia:doxia-sink-api:jar:1.4:provided
[INFO] |  +- org.apache.maven.doxia:doxia-decoration-model:jar:1.4:provided
[INFO] |  +- org.apache.maven.doxia:doxia-site-renderer:jar:1.4:provided
[INFO] |  |  +- org.apache.maven.doxia:doxia-module-xhtml:jar:1.4:provided
[INFO] |  |  +- org.apache.maven.doxia:doxia-module-fml:jar:1.4:provided
[INFO] |  |  +- org.codehaus.plexus:plexus-i18n:jar:1.0-beta-7:provided
[INFO] |  |  +- org.codehaus.plexus:plexus-velocity:jar:1.1.7:provided
[INFO] |  |  \- org.apache.velocity:velocity-tools:jar:2.0:provided
[INFO] |  |     +- sslext:sslext:jar:1.2-0:provided
[INFO] |  |     \- org.apache.struts:struts-tiles:jar:1.3.8:provided
[INFO] |  +- org.apache.maven.shared:maven-doxia-tools:jar:1.2.1:provided
[INFO] |  |  \- org.apache.maven:maven-artifact-manager:jar:2.0.6:compile
[INFO] |  |     +- org.apache.maven:maven-repository-metadata:jar:2.0.6:compile
[INFO] |  |     \- org.apache.maven.wagon:wagon-provider-api:jar:1.0-beta-2:compile
[INFO] |  +- org.codehaus.plexus:plexus-container-default:jar:1.0-alpha-9:compile
[INFO] |  |  \- classworlds:classworlds:jar:1.1-alpha-2:compile
[INFO] |  \- org.sonatype.plexus:plexus-build-api:jar:0.0.7:provided
[INFO] +- junit:junit:jar:3.8.1:test
[INFO] +- org.mockito:mockito-all:jar:1.10.19:test

我用maven有一段时间了,如果我的理解是正确的,它只是一个下载和管理依赖的工具。但是如果我要求它下载一些东西,它会下载/管理它,以便我的目标应用程序可以看到依赖项。

那么为什么添加到my.external项目中时拒绝下载呢?因为 JUnit 下载良好并且具有相同的包装 (POM)。

【问题讨论】:

  • 请分享您的 pom 类型的 my.external 项目的完整 pom 文件...

标签: maven package pom.xml


【解决方案1】:

您的 all-ext-libs 具有 junit 和 mockito-all 作为 test 依赖项。这些不是传递的,因此当你通过 pom 传递它们时会被忽略。我希望在您构建原始项目时忽略它们。

我的猜测是 junit 是通过其他途径进入的,而不是通过 all-ext-libs

要走的路:

  • 创建一个包含所有测试依赖项的 pom
  • 在这个 pom 中将它们全部标记为 compile
  • 引用 pom 时添加 &lt;scope&gt;test&lt;/scope&gt;

【讨论】:

  • 不确定是不是这样。因为我尝试通过删除 JUnit 并执行 mvn clean install -U 不下载 Junit。
  • 你能发布dependency:tree? 或者至少是它的相关部分吗?
  • 你确定这是依赖关系树中唯一提到junit的地方吗?
  • 是的,我很确定。我尝试将范围保持为“空白”,即没有范围。
  • 我仍然认为传递测试依赖关系应该被忽略。我们可能需要整个 pom、dependency:tree 和 dependency:list 才能真正理解问题。
猜你喜欢
  • 1970-01-01
  • 2022-12-06
  • 2018-06-14
  • 1970-01-01
  • 2011-08-30
  • 2011-04-12
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多