2015-10-28 49 views
4

我正在寫一個基於的Xtext代碼生成器,可以被稱爲內運行:檢查Java代碼Maven插件

  • 直接(使用main(String[])法)
  • 在Eclipse中(作爲Eclipse代碼發電機插件)
  • 通過「XTEXT - Maven的插件」

現在我必須要解決一些具體的Maven的問題。爲了做到這一點,我需要知道我的代碼是否在Maven內部運行。

我的第一個想法是檢查maven.home系統屬性是這樣的:

if (System.getProperty("maven.home") != null) { 
    // In Maven 
} 

是否有這樣做的更好的辦法?

+0

Maven不_run_代碼,它編譯它。我不確定你想在這裏解決什麼具體問題。你用'exec-maven-plugin'運行一些代碼嗎? – Tunaki

+0

不,我正在maven插件中運行代碼! –

+0

難道你不能修改Maven插件來設置一些自定義系統屬性嗎? – Tunaki

回答

1

除非您編寫了Maven插件,並且您的代碼是該Maven插件的一部分,並且您正在通過將該代碼添加到build/plugins/plugin區域中來配置該代碼,否則很可能只使用Maven編譯。

檢查一個環境變量不會告訴你,如果你是「在maven插件中」,因爲即使maven沒有運行也存在環境變量。要查看你是否在「maven插件中」,你需要問Maven做依賴注入,看看它是否失敗(這是通過叢容器完成的,如果你不知道我在說什麼,那麼你又不是在maven插件中)。

我99%確定你的代碼在要求maven編譯時失敗。這可能是由於您的編譯器配置比您使用的IDE有更嚴格的要求。如果是這樣,最好的答案是修復您的代碼以符合更嚴格的Maven要求;因爲通常需要嚴格的要求來確保代碼在更多場景下正常運行。

我也會檢查你的maven構建配置(pom.xml),看它是否使用與你的IDE相同版本的java。有時候當你配置你的IDE時,你選擇了一個不同的編譯級別(比如java 1.8),而不是你的maven pom.xml使用的(比如Java 1.7)。

+0

我正在編寫一個代碼生成器,我可以直接調用(獨立)或通過第三方maven-plugin(Xtext),我無法輕鬆更改/擴展。 (在問題中加入了這個) –

+0

好的,Xtext與Tycho插件相關。基本上任何觸及Tycho插件的東西都是一個Eclipse環境構建問題,而不是一個真正的Maven問題。基本上Tycho是令Eclipse可以在Maven內部構建的憎惡,但實際上並不允許Maven做什麼_it做得最好,這是管理構建配置。我在XText插件的某個地方下了賭注,它有效地調用了你構建的命令行等效工具;但是,考慮到它需要Tycho,你可能會搜索Eclipse/Tycho bug,而不是Maven。 –