Maven布局:如何确保src / main不依赖于src / test?

时间:2014-05-11 03:52:14

标签: java eclipse maven dependency-management

这一定是非常基本的,但我对Maven来说还是比较新的,我没有找到这个信息。

我有一个典型的mavenized Java项目(我使用Eclipse),主要工件(src/main/java - > mylib.jar)和src/test/java中的其他类(不仅仅是单元测试) ,还有我想要包含在主jar中的杂乱代码,样本等。

我的问题是:我如何确定项目的类 - 工件中没有循环依赖项?具体来说,如何确定某些类main无意中取决于某些test\?我担心发布损坏的mylib.arj的可能性。 Eclipse知道项目之间的依赖关系,但在这里我们只有一个项目。有一些标准的方法吗?

2 个答案:

答案 0 :(得分:1)

Maven实际上并没有让你这么做。当maven尝试执行编译目标时,src/test目录结构中的所有内容都不在类路径上。

例如,让我说我不小心将以下代码添加到我的HelloWorld程序中:

public void badDependency() {
    new HelloWorld_UT();
}

HelloWorld_UT只是标准的junit测试。

即使eclipse在我的项目中没有报告编译错误,当我尝试进行maven编译时,我也会收到此错误:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.297s
[INFO] Finished at: Sat May 10 23:08:29 CDT 2014
[INFO] Final Memory: 7M/17M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project scratch: Compilation failure
[ERROR] /C:/eclipse/workspace/Scratch/src/main/java/org/drc/HelloWorld.java:[11,21] C:\eclipse\workspace\Scratch\src\main\java\org\drc\HelloWorld.java:11: cannot find symbol
[ERROR] symbol  : class HelloWorld_UT
[ERROR] location: class org.drc.HelloWorld

答案 1 :(得分:0)

Maven会在构建最终jar时自动排除测试中使用的源代码。但请记住用<范围>试验< / scope>,如果您的测试具有主要未使用的依赖项。

例如,如果在测试中使用了jUnit,并且想要在main中包含jUnit,那么依赖项的pom.xml文件将如下所示:

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${dependency.junit.version}</version>
        <scope>test</scope>
    </dependency>