Maven多module项目中千万不要引入其他模块的单元测

这两天一直在整理一些旧的代码,将原来的混乱东西升级到maven管理。这其中也免不了将大项目拆分成若干个module来管理。然而为了在测试的时候图省事,在各个模块都引用的基础module中src/test/java中建立了一个BaseTest,

package com.linuxidc.;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext*.xml")
public abstract class BaseTest {

@Test
 public abstract void doTest();
 
}

然后我希望其它module中的所有单元测试类都继承自BaseTest,规范化代码。然而,在执行测试时出现了NoClassDefFoundError: com/linuxidc/www/linux/util/BaseTest。引入公共单元的src/main/java代码都能正常加载。

经过参考一些Maven的资料得知,其工作机制实际上是包的依赖管理。在规定的标准目录下,能够在模块之间引用的代码只能存在于main目录下。而单元测试(test目录下的代码)模型是建立在“独立”的思想之上的,目的就是不受其他环境的干扰从而纯粹地验证自身模块的可用性和正确性。因此单元测试代码之间是不能被其他模块引用的。

将其他模块的单元测试代码解除src/test/java级引用后,项目成功build。

《Maven实战》(许晓斌著)完整高清版PDF 下载见  

Maven 3.1.0 发布,项目构建工具

Linux 安装 Maven

Maven3.0 配置和简单使用

Ubuntu下搭建sun-jdk和Maven2

Maven使用入门

Maven 的详细介绍请点这里
Maven 的下载地址请点这里

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5662715f58929fe5d6429b607641caab.html