2014-03-19 68 views
0

注意:我已經提交了官方JIRA對於這個http://jira.codehaus.org/browse/MNG-5603,因爲我非常確定它是一個在maven中的bug。這個線程的答案我將在兩個地方評估和更新,因爲我非常肯定其他人會在複雜的代碼庫上執行排除過濾器時遇到此問題。maven surefire排除:它是越野車嗎?

我的完整pom文件僅供參考:https://gist.github.com/jayunit100/9644221(這是im源代碼中使用的hadoop版本)。

香港專業教育學院發現,在萬無一失的一些非常奇怪的行爲:

<groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
     <systemPropertyVariables> 
     <startKdc>${startKdc}</startKdc> 
     <kdc.resource.dir>${kdc.resource.dir}</kdc.resource.dir> 
     </systemPropertyVariables> 
     <properties> 
     <property> 
      <name>listener</name> 
      <value>org.apache.hadoop.test.TimedOutTestsListener</value> 
     </property> 
     </properties> 
     <excludes> 
     <exclude>asbdfoin</exclude> 
    </excludes> 
    </configuration> 

導致異常這樣的:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.16:test 
(default-test) on project hadoop-common: Execution default-test of goal 
org.apache.maven.plugins:maven-surefire-plugin:2.16:test failed: 
java.lang.NoClassDefFoundError: EmptyRequestProto; nested exception is 
java.lang.NoClassDefFoundError: EmptyRequestProto -> [Help 1] 
的 「排除」 標籤下

mvn test 

用下面的排除過濾器

換言之:排除過濾器可能會導致NoClassDefFoundError消息,當排除過濾器根本不匹配任何東西。

我的問題:maven surefire排除過濾器如何導致ClassNotFound錯誤顯示?如果有的話,我會期望它減少加載類的嘗試次數,而不是增加它們。

僅供參考,在此點顏色:類本身是一個內部類:

public static final class EmptyRequestProto extends com.google.protobuf.GeneratedMessage 

我見過https://jira.codehaus.org/browse/SUREFIRE-988,可能與其相關的,但是我的事實,我的「排除」過濾器犯規匹配任何代碼庫中的類,它可能是不同的。

+0

請顯示您的完整pom文件。 – khmarbaise

回答

0

這是我的surefire配置。我已經包含了一個絕對不匹配任何東西的排除。它爲我工作。我無法重現您的例外情況。也許你在你的pom中錯誤地配置了它。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.16</version> 
    <configuration> 
     <excludes> 
      <exclude>abcdefghijk</exclude> 
     </excludes> 
      <forkMode>once</forkMode> 
    </configuration> 
</plugin> 
+0

有趣的是,我在這裏粘貼了我的pom https://gist.github.com/jayunit100/9644221 – jayunit100

+0

另外,你的項目是否有靜態的內部類?該錯誤是由靜態內部類觸發的,因爲classnotfound異常。我想知道在運行時掃描所有類並以某種方式解析後會發生什麼情況,然後當他們在一定的魔法下進行檢查時,會嘗試加載類,由於FQ類名稱丟失而失敗。或類似的規定。看到與此相關的jira。但感謝您在簡單的系統上進行測試,這有助於確認我的懷疑。 – jayunit100

+0

我很確定我有內部靜態類。但爲了確定我必須明天檢查。 – wumpz