2012-01-05 165 views
1

我正在使用maven進行依賴管理的一個相當大的項目。作爲其中的一部分,我們使用Maven配置文件來構建和替換測試/開發/生產環境之間不同的某些屬性文件。Eclipse(STS)/ Maven集成問題

要執行構建,我會執行一個Maven:使用正確的配置文件和mavens反應堆構建,然後按照正確的順序構建項目,並將jar文件存儲在.m2文件夾中,例如域名jar,然後服務jar(jar中包含的領域jar作爲依賴)等等。最終導致戰爭文件與戰爭所需的所有正確的庫一起運行。

當eclipse執行默認構建時,每次保存文件時都會執行默認構建,但jar不是用任何配置文件構建的,只是常規構建。

當我然後將最終的戰爭文件推送到服務器,並且當服務器啓動時(通過eclipse啓動和部署)爆炸時,我得到了lib文件夾中maven打包到war文件中的所有jar,但也日食所建造的所有罐子。

lib/ 
    domain.jar (built by eclipse) 
    domain.SNAPSHOT.1.0.jar (built by maven) 
    etc 

有什麼辦法來防止這種情況的發生?這最終會導致每個屬性文件中有兩個文件,並且只有加載順序決定了使用哪個文件。在不同的環境中使用不同的屬性是一件很麻煩的事情。

+0

您是否已將項目作爲Maven項目導入到Eclipse中? Build on命令行可以正常工作嗎?您正在使用「mvn install」而不是第一個「mvn clean package」... – khmarbaise 2012-01-05 15:30:51

+0

您是否在您的POM中的多個位置定義了finalName屬性? – Perception 2012-01-05 15:31:09

+0

我的完整Maven構建目標是:clean install -PprofileTest。檢查Tomcat爆炸戰爭中的jar文件上的時間修改日期指出domain.jar的構建方式是10.00,domain.SNAPSHOT.1.0.jar的構建方式是10.06(我的完整構建和部署需要我估計6分鐘)。這不是一個maven問題,因爲它是eclipse試圖解決依賴關係並將它自己的jar版本推送到服務器,我想。 – 2012-01-05 15:53:53

回答

1

我發現這個問題有點冒險的解決方案。

在Web項目屬性 - >部署大會我修改的路徑,從

WEB-INF/lib/domain.jar

違規jar文件,例如domain.jar

WEB-INF/autogen/domain.jar

這導致產生的日食jar文件(具有錯誤的屬性文件)被部署到一個文件夾,當tomcat啓動時不會被加載。不是一個完美的解決方案,但它允許eclipse自動構建的所有好東西,比如代碼完成和web項目中的錯誤消息,如果域的界面改變等,同時在部署時也提供正確的配置文件。

將此處留給這種情況下的其他人。

+0

從我看到的情況來看,當m2e不合作時,這是一個相當常見的解決方案。 – deterb 2012-01-08 22:07:33

+0

刪除此答案的接受。即使這並沒有完全解決這個問題。問題是每次maven刷新依賴關係時,它都會將文件更改回WEB_INF/lib/domain.jar。 刷新後(經常需要強制eclipse認識到maven構建已完成),它將導致構建路徑問題,因爲所有引用該jar的文件都將無法使用它。 我在想,我可能會在tomcat startup.bat腳本中寫入幾行命令來刪除tomcat啓動前的文件。 – 2012-01-12 11:21:01

+0

嘗試去另一個方向 - 更改maven放入文件的目錄,然後確保該目錄映射回適當的war目錄。 – deterb 2012-01-12 17:25:17