2012-09-20 70 views
2

我剛剛將一個項目從ant轉換爲maven,並且得到一個錯誤,構建一個jar,其行爲與源文件沒有按照正確的順序編譯相同。我有一個枚舉類型,看起來像這樣:maven似乎沒有按順序編譯 - 找不到符號

public enum LmsError implements ILmsError { 
    UC0001() { 
     @Override 
     public String msg() { 
      return this.getClass().getName() + "-" + this + ": constructor failed: "; 
     } 
    }, 

界面看起來是這樣的:

public interface ILmsError { 
    public abstract String msg(); 
} 

...這是使用它的代碼的例子。 'throws'這一行是下面的錯誤信息所抱怨的內容,但是如果我註釋掉這個語句,下一次引用msg()方法時它會得到類似的錯誤。使用枚舉的哪個元素無關緊要。

} catch (Exception e) { 
     throw new RuntimeException(LmsError.UC0001.msg() + "Unable to construct status based on " + codeEnumeration + ":" + e.getMessage(), e); 
} 

MVN清潔編譯

[compiler:compile] 
Compiling 129 source files to C:\bsaastad\workspaces\theportaltree\redirect\redirect-ejb\target\classes 
------------------------------------------------------------- 
COMPILATION ERROR : 
------------------------------------------------------------- 
com/theportaltree/redirect/status/RedirectStatus.java:[156,58] cannot find symbol 
symbol : method msg() 
location: class com.theportaltree.lms.LmsError 
1 error 

如果我重新編譯不乾淨,我得到類似這樣的(有時需要兩個額外的編譯過的所有文件獲得)的東西:

[compiler:compile] 
Compiling 89 source files to C:\bsaastad\workspaces\theportaltree\redirect\redirect-ejb\target\classes 

[resources:testResources] 

乾淨的編譯。

如果我看失敗後的輸出目錄,我看到沒有生成的枚舉類存在,這就解釋了錯誤。只要我獲得了成功的編譯,枚舉類就像預期的那樣。

這是所有在同一個項目,所以我不認爲這是一個依賴性問題。我只是將它從一個ant構建轉換爲maven(maven newbie),幾年來它一直在編譯而沒有問題。這是pom.xml中的插件部分。有什麼遺漏嗎?錯誤版本的東西?我很難過:

<build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.5.1</version> 
     <configuration> 
     <!-- put your configurations here --> 
     <source>1.6</source> 
     <target>1.6</target> 
     </configuration> 
    </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-ejb-plugin</artifactId> 
      <version>2.3</version> 
      <configuration> 
       <ejbVersion>3.1</ejbVersion> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-javadoc-plugin</artifactId> 
      <version>2.8.1</version> 
      <configuration> 
       <!-- javadoc configuration options here --> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

任何幫助/想法將不勝感激。

+1

你可以發佈你所有的構建部分? – scarcer

回答

2

您是否在執行命令行Maven構建的同時運行IDE?

我發現有時如果你的IDE是Maven感知的(例如Eclipse和m2Eclipse插件),你可能會在兩個「競速」Maven引擎之間發生不希望的交互。

如果關閉您的IDE結果可靠清潔的版本,檢查它的配置選項 - 它可能是輪詢更改文件系統,這將反過來揭開序幕(清潔?)構建。

1

嘗試從命令行運行maven(與您現在運行的是相同的mvn clean compile)。

順便說一句接口ILmsError,枚舉LmsError和引發運行時異常並使用消息駐留在同一模塊中的代碼? 也許它只是缺乏'依賴'?