可以在構建步驟中自動觸發Maven插件的執行,例如,在編譯該項目之前,在Maven構建週期中專門設置了「生成源代碼」階段。因此,開發人員不必記住手動生成它,使您更接近理想的單擊完整構建。
優點是,您可以從VCS中排除生成的類,因爲它們可以根據需要重新生成。 VCS中生成的代碼的問題在於,WSDL文件中的更改會觸發生成的代碼中的更改(顯然)。但是,當您首先處理合同時,只有WSDL文件中的更改纔是相關的。從VCS中排除生成的代碼將隱藏VCS提交日誌中的冗餘更改。您的VCS存儲庫較小,提交日誌更清晰。
編輯旨在評論: 恕我直言有對場景兩種截然不同的觀點:
1)服務接口的客戶端類的兼容性。
我不確定,如果客戶端類能夠與WS通信,如果它們是從較舊的wsdl生成的。我認爲它可能工作,如果更改僅限於其他方法,並不觸及現有的定義。儘管如此,如果客戶端代碼總是在構建版本上重新生成,這是一個非問題,因爲客戶端代碼自動與wsdl同步。
2)實現與客戶端類的兼容性。
如果生成的客戶端類由於修改的wsdl而發生更改,則可能會破壞使用客戶端類的代碼。但是,如果只有方法添加到wsdl並且現有方法保持原樣,那麼重新生成的客戶端類應該與現有代碼向後兼容。在你的例子中:如果你的代碼只使用A(),並且「新」客戶類現在向A()提供B()另外,你的代碼仍然可以工作。
總之;不包括從VCS生成的客戶端代碼,而是根據需要生成它作爲構建過程的一部分,在我看來,如果WSDL演進向後兼容,應該不會破壞現有的功能代碼。如果WSDL更改不向後兼容,則編譯時會發生錯誤。但這些都是不可避免的 - 使用來自VCS的過時客戶端類可能會實際上隱藏這些錯誤,直到您嘗試執行該應用程序。
因此,讓我們說一個wsdl定義了一個我想使用的方法A()。我生成客戶端類,開發代碼,然後將所有內容簽入VCS。與此同時,wsdl發生了變化,並且添加了一個新的方法B()。然後我將不得不生成一個新的客戶端類並檢查它們,否則代碼將不起作用,即使我只使用A()? – Janek