繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM