mvn如何在另一个项目的测试目录中找到定义的类

时间:2018-01-02 07:02:33

标签: maven compilation

简而言之,有两个项目:tddl-matrix和tddl-rule。 tddl-maxtrix中的测试报告未找到tddl-rule的测试包中定义的类。

详情: 两个项目中都有许多测试,tddl-matmrix中的测试依赖于tddl-rule中定义的某些类(例如,TestUtils)。

例如: tddl-rule中的测试是:

package com.taobao.tddl.rule;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class TestUtils {

    public static final int GreaterThan        = Comparative.GreaterThan;
    public static final int GreaterThanOrEqual = Comparative.GreaterThanOrEqual;
    public static final int Equivalent         = Comparative.Equivalent;
    public static final int NotEquivalent      = Comparative.NotEquivalent;
    public static final int LessThan           = Comparative.LessThan;
}

然后在tddl-matrix中的另一个测试是:

import static com.taobao.tddl.rule.TestUtils.Equivalent;
import static com.taobao.tddl.rule.TestUtils.GreaterThan;

import com.taobao.tddl.rule.TestUtils;
public class BigDecimalPartDiscontinousRangeEnumeratorUnitTest{
...
}

tddl-matrix中的测试取决于类TestUtils,它位于tddl-rule的test目录中。

当我运行mvn install -DskipTests时,在一台计算机上可以正常,但在另一台计算机上运行正常(错误表示无法找到TestUtils。)。所以我很困惑:

  1. 为什么一台机器上的编译正常。我去了本地存储库:c:\..\.m2\replository\com\..\tddl-rule\,我找不到任何类命名TestUtils。该类仅存在于tddl-rule的项目目标目录中。
  2. tddl-matrix的pom类似于:

    <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>com.taobao.tddl</groupId>
            <artifactId>tddl</artifactId>
            <version>5.1.7-SNAPSHOT</version>
            <relativePath>../pom.xml</relativePath>
        </parent>
        <groupId>com.taobao.tddl</groupId>
        <artifactId>tddl-matrix</artifactId>
        <packaging>jar</packaging>
        <name>${project.artifactId} module for tddl ${project.version}</name>
        <dependencies>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>tddl-optimizer</artifactId>
                <version>${project.version}</version>
            </dependency>
            .....
            <!-- Test libs -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </project>
    

    mvn dependency:tree是:

    [INFO] com.taobao.tddl:tddl-matrix:jar:5.1.7-SNAPSHOT
    [INFO] +- com.taobao.tddl:tddl-common:jar:5.1.7-SNAPSHOT:compile
    [INFO] |  ...
    [INFO] +- com.taobao.tddl:tddl-optimizer:jar:5.1.7-SNAPSHOT:compile
    [INFO] |  +- com.taobao.tddl:tddl-rule:jar:5.1.7-SNAPSHOT:compile
    [INFO] |  |  +- org.springframework:spring-core:jar:2.5.6.SEC03:compile
    [INFO] |  |  |  \- commons-logging:commons-logging:jar:1.1.1:compile
    [INFO] |  |  +- org.springframework:spring-context:jar:2.5.6.SEC03:compile
    [INFO] |  |  |  +- aopalliance:aopalliance:jar:1.0:compile
    [INFO] |  |  |  \- org.springframework:spring-beans:jar:2.5.6.SEC03:compile
    [INFO] |  |  \- org.codehaus.groovy:groovy-all:jar:2.1.9:compile
    [INFO] |  +- com.taobao.tddl:tddl-parser:jar:5.1.7-SNAPSHOT:compile
    [INFO] |  \- cglib:cglib-nodep:jar:3.1:compile
    [INFO] \- junit:junit:jar:4.11:test
    [INFO]    \- org.hamcrest:hamcrest-core:jar:1.3:test
    

1 个答案:

答案 0 :(得分:0)

AFAIK你不能使用其他Maven项目的测试类。恕我直言,即使你可以,你也不应该这样做。如果需要实用程序类来测试不同的工件,请编写test-utilities.jar并在所有测试用例中将其用作test依赖项。