2016-11-29 63 views
0

我偶爾會在用Jenkins構建的java項目中出現名稱衝突錯誤。在Jenkins構建的偶爾javac名稱衝突錯誤

我見過一對夫婦的地方,它也遵循以下格式兩個地方:

public class Foo { 
    public enum FooEnum { 
     VALUE1("Val1"), 
     VALUE2("Val2) 

     private FooEnum(String) { /*code*/} 
    } 
} 

和錯誤輸出會說:

[javac] /path/Foo.java:6: error: name clash: FooEnum(String) and FooEnum(String) have the same erasure 
[javac] private FooEnum(String) 
       ^

注意,只有一種名爲FooEnum的方法,所以它不是類型擦除問題或類似的情況。該方法似乎與本身有某種衝突。

我在Eclipse中開發代碼,我的代碼庫跨多個Eclipse項目在同一個工作區中。對於我的Jenkin管道,我爲每個Eclipse項目都有一份工作。

當每個項目完成時,它將存檔整個項目目錄(包括源文件和.class文件)。下游項目然後複製以前版本中的存檔對象,以便他們可以將它們用作依賴關係。

我使用的是從eclipse自動生成的ant build.xml文件。

這些錯誤並不是經常顯示出來的,但是當它們出現時,它們通常會堅持一些構建,然後消失。我無法弄清楚何時出現以及何時不出現的任何模式。

在Eclipse中構建時我從來沒有遇到過任何問題,所以我認爲這個問題必須與我的Jenkins安裝或構建文件有關。

不幸的是,對我的公司實行嚴格的專有信息保護政策,我有點擔心在這裏分享任何實際的代碼或實際的螞蟻文件,但我希望有人會有一個想法,他們可以與我分享。

回答

0

我能夠通過顯式複製每個作業所需的依賴項目並確保我只複製這些項目來解決此問題。

以前,我有時會複製一些有我需要的依賴關係的作業中的所有工件。我認爲在我複製了多個作業中發現依賴關係的情況下發生了一些奇怪的事情。我仍然沒有弄清楚到底發生了什麼,但是這似乎解決了這個問題。