![](/img/trans.png)
[英]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.