[英]Difference between src/main/java and src/test/java in a Maven project
[英]Maven layout: How to be sure that src/main does not depend on src/test?
这必须非常基础,但是我对Maven还是很陌生,但是我没有找到此信息。
我有一个典型的Mavenized Java项目(我使用Eclipse),带有一个主要工件( src/main/java
mylib.jar
> mylib.jar
)和src/test/java
的其他类(不仅是单元测试,还包括杂项代码,样本等,我不想包含在主jar中)。
我的问题是:如何确定项目的类工件中没有循环依赖项? 具体来说,如何确定无意中的某个main
类取决于某个test\\
? 我担心释放损坏的mylib.arj
的可能性。 Eclipse了解项目之间的依赖关系,但是这里我们只有一个项目。 有一些标准的方法吗?
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
Maven在构建最终的jar时会自动排除测试中使用的源代码。 但是,请记住,如果您的测试具有任何主要未使用的依赖项,请使用<scope> test </ scope>进行指示。
例如,如果JUnit是在测试中使用,你不希望包括JUnit的主,对于依赖关系应该是这样的pom.xml文件:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${dependency.junit.version}</version>
<scope>test</scope>
</dependency>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.