首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用test-jar依赖项运行maven编译阶段

如何使用test-jar依赖项运行maven编译阶段
EN

Stack Overflow用户
提问于 2012-08-24 07:07:47
回答 3查看 7.2K关注 0票数 8

我正在处理的项目是由多个模块组成的,这些模块都是用maven构建的。一些模块中的测试代码依赖于来自其他模块的测试代码。这些依赖项声明如下。

在依赖模块中:

代码语言:javascript
运行
复制
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.2</version>
    <executions>
        <execution>
            <goals>
                <goal>test-jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

在与前一个模块有依赖关系的模块中:

代码语言:javascript
运行
复制
<dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>themodulename</artifactId>
    <version>${project.version}</version>
    <type>test-jar</type>
    <scope>test</scope>
</dependency>

使用此配置,可以成功地执行maven安装阶段。但是,试图运行编译或测试阶段失败了,因为无法解决测试jar文件依赖问题。

从测试jar目标来看,它似乎被配置为在包阶段默认情况下运行,我认为这是问题的原因。

然后,通过将第一个配置修改为:

代码语言:javascript
运行
复制
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.2</version>
    <executions>
        <execution>
            <phase>compile</phase>
            <goals>
                <goal>test-jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

查看调试日志,我可以看到目标现在在编译阶段执行,但也包括以下内容:

代码语言:javascript
运行
复制
[WARNING] JAR will be empty - no content was marked for inclusion!

我尝试将包含配置为**/*,并确认默认的testClassesDirectory设置为正确的,但仍然收到相同的警告。

我可以看到,测试类文件夹在运行编译阶段后不存在,这似乎很正常,但是即使在运行测试阶段之后就存在它,并且它包含文件,我仍然会得到"JAR将是空的“警告。

有没有人知道如何修复这个配置,以便我能够成功地运行编译或测试阶段?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-24 08:02:02

我坚信测试只应该是一个模块的一部分。您不应该依赖于其他模块中的测试。如果更新测试以不同的行为,那么很难预测会发生什么。

如果您需要共享通用测试数据或公共测试类,那么最好使用该共享测试源创建一个单独的模块。然后使用范围测试让所有测试都依赖于共享的tests。

代码语言:javascript
运行
复制
+-- MyProject
+-- common-test-util
|   +-- src
|   |    +-- main
|   |        +-- java
|   +-- pom.xml
+-- moduleA
|   +-- src
|   |    +-- main
|   |    |   +-- java
|   |    +-- test
|   |        +-- java
|   +-- pom.xml
+-- moduleB
|   +-- src
|   |    +-- main
|   |    |   +-- java
|   |    +-- test
|   |        +-- java
|   +-- pom.xml
+-- pom.xml

确保您只依赖于common-test-util<scope>test</scope>,然后您将能够调用

代码语言:javascript
运行
复制
mvn test

在顶层,所有的测试都会运行。

票数 2
EN

Stack Overflow用户

发布于 2013-09-04 02:56:10

我认为这些插件配置适合你。

只是在资源准备和编译中覆盖跳转到false。

代码语言:javascript
运行
复制
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <executions>
      <execution>
        <id>default-testResources</id>
        <configuration>
          <skip>false</skip>
        </configuration>
        <phase>process-test-resources</phase>
        <goals>
          <goal>testResources</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <executions>
      <execution>
        <id>default-testCompile</id>
        <configuration>
          <skip>false</skip>
        </configuration>
        <phase>test-compile</phase>
        <goals>
          <goal>testCompile</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <executions>
      <execution>
        <configuration>
          <skip>false</skip>
        </configuration>
        <goals>
          <goal>test-jar</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
票数 6
EN

Stack Overflow用户

发布于 2012-08-24 09:48:01

您的问题归结于多模块构建中的依赖解决方案。它与测试代码无关。

我确实有这个装置。一个公共模块包含运行时代码和共享测试代码(测试双/模拟等)。测试代码由其他模块中的测试使用。对我们来说效果很好。

"mvn编译“只编译运行时代码。

在父级(反应堆构建)上运行"mvn测试编译“、"mvn测试”或"mvn包“,一切都工作得很完美。反应堆能把一切都解决掉。

如果您在模块级别上运行一个构建,那么该模块的所有约束都必须在回购中。这意味着您必须预先为每个依赖模块运行"mvn安装“。此规则同样适用于常规依赖项和测试依赖项。

如果你希望它会遵循父链接到父模块和其他模块,我一定会让你失望的。父链接仅用于继承pom中的公共设置,而不是用于解决依赖关系。

就我个人而言,我几乎总是从父母那里建造一个完整的反应堆。如果我以前在父级运行了mvn安装,并且知道其他模块没有改变,我只会单独构建一个模块。

希望这能有所帮助。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12104668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档