2014-05-11 24 views
1

这一定很初级,但对于Maven来说我相当新,而且我没有找到这个信息。Maven布局:如何确定src/main不依赖于src/test?

我有典型的Maven化Java项目(我使用Eclipse),有主神器(src/main/java - >mylib.jar)和src/test/java(不仅是单元测试中的其他类,也计算其它代码,样品等,我不想包含在主jar中)。

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

回答

1

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

举例来说,假设我不小心将下面的代码添加到我的HelloWorld程序:

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

哪里HelloWorld_UT仅仅是一个标准的JUnit测试。

即使日食将在我的项目没有报告编译错误,当我尝试做一个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 
+0

这很好。有什么方法可以让Eclipse意识到这一点吗? – leonbloy

+0

我能想到的唯一方法是修改项目的构建路径,从构建路径中删除src/test/java并查找红色的X。 Eclipse对maven的支持(即使使用m2e插件)也不是那么棒。 – azurefrog

0

Maven将自动排除在测试中使用的源代码时,它建立最后的罐子。但是,如果你的测试有任何未在main中使用的依赖关系,请记得用< scope> test </scope>来表示。

例如,如果JUnit是在测试中使用,你想在主JUnit中,对于依赖pom.xml文件应该是这样的:

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