今天Maven看到了一個非常奇怪的問題:它試圖構建不在我的項目中但來自依賴關係的類。 mvn compile
崩潰,:Maven如何構建不在我的項目中的類?
...
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] AppConstants.java):[4,12] unmappable character for encoding UTF-8
...
有在我的項目沒有AppConstants.java
,並與grep -r AppConstants .
搜索沒有給出結果。該類存在於另一個工件中,這是我的項目的依賴項。
我設法讓我的項目編譯通過-Dproject.build.sourceEncoding=Cp1252
mvn compile
,但這不是一個解決方案,因爲我的項目應該使用utf-8
編碼。果然,以這種方式編譯時,我看到AppConstants.class
在target/classes/
下,但它從哪裏來?這怎麼可能?
最近在項目中沒有任何變化,但我知道這些依賴項目正在努力將其遷移到Maven。可能會發生什麼?
UPDATE
沒有AppConstants.java
文件在我的項目,而AppConstants
未在項目內的任何地方提到:
$ grep -ri AppConstants . # finds nothing
$ find . | grep -i AppConstants # finds nothing
這AppConstants
存在在我的依賴於另一個項目。我的電腦上沒有其他項目的源代碼。我的隊友都可以重現這個問題,這不是特定於我的電腦。我們的pom最近沒有變化,但我們知道其他球隊的球在最近變化很大。
我的項目中有一個類使用另一個項目中的SomeOther
類。如果我使用-Dproject.build.sourceEncoding=Cp1252
構建,那麼構建工作,並在我的target
文件夾中,我看到SomeOther.class
,AppConstants.class
和另一個項目生成的幾個其他類。如果我從我的項目中刪除使用SomeOther
的類,那麼我可以正常構建,但該項目無法工作,因爲它需要其他類。
@Gus:知道這是在
SomeOther
,你可以做一個公共安全的示例項目,展現出相同的行爲嗎?如果不這樣做,請描述水平線,以及您在哪裏運行mvn compile
......是否有多模塊項目,並且您正在構建子項目?
太難創建公共安全樣本。我的項目是多模塊,當我在頂部運行mvn compile
時,它在子模塊上失敗,所以爲了更快的迭代,我已經在子模塊中運行了。結果是相同的,但更快。但你讓我想:我會檢查我們的版本是否爲其他子模塊中的其他項目生成.class
文件。
共享代碼和完全POM
這是在工作,所以我不能分享完整的代碼及POM,很遺憾。如果您要求特定部分,我可以包含匿名片段。
其他項目的源代碼如何成爲您的項目的一部分,因爲你預測的不同?可能你有某種產生問題的生成代碼? – khmarbaise
你能提供你的pom.xml嗎? – andyf
非常有趣!我們能否看到一些POM(對於您的項目和依賴項)?這可能會連接到您正在使用的某個插件。 –