这一定是非常基本的,但我对Maven来说还是比较新的,我没有找到这个信息。
我有一个典型的mavenized Java项目(我使用Eclipse),主要工件(src/main/java
- > mylib.jar
)和src/test/java
中的其他类(不仅仅是单元测试) ,还有我想要包含在主jar中的杂乱代码,样本等。
我的问题是:我如何确定项目的类 - 工件中没有循环依赖项?具体来说,如何确定某些类main
无意中取决于某些test\
?我担心发布损坏的mylib.arj
的可能性。 Eclipse知道项目之间的依赖关系,但在这里我们只有一个项目。有一些标准的方法吗?
答案 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>