使用Maven原型高效创建Eclipse模块
Maven Archetype是一個項目模板工具包,可為開發人員提供生成內置或自定義腳手架工件的參數化版本的方法。 最近,我將其應用于我們的Xiliary P2存儲庫,以實現Eclipse模塊存根創建的自動化。
由于效果很好,所以我認為值得在這篇文章中分享我的經驗。
Maven原型
Maven Archetype使程序員可以根據項目或組織規定的慣例和最佳實踐快速并一致地設置腳手架。 它帶有一組預定義的模板,以簡化常用結構的生成。
有關Maven提供的默認原型的列表,請參閱“原型簡介”部分中的“ 提供的原型” 。
例如,可以基于原型maven-archetype-webapp生成Web應用程序項目存根:
mvn archetype:generate \ -DgroupId=com.codeaffine \ -DartifactId=com.codeaffine.webapp \ -Dversion=1.0-SNAPSHOT \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DarchetypeArtifactId=maven-archetype-webapp \ -DarchetypeVersion=1.0 \ -DinteractiveMode=false參數groupId,artifactId和version用于創建包含適當配置的項目對象模型定義( pom.xml )的項目根文件夾。 而archetypeXXX參數指定要使用的模板。 基于Web應用程序原型,Maven提供了一個pom,可將構建生命周期 packaging屬性設置為war并生成以下目錄和文件結構:
com.codeaffine.webapp |-- pom.xml `-- src`-- main|-- resources`-- webapp|-- WEB-INF| `-- web.xml`-- index.jsp如果您碰巧使用Eclipse的Maven集成,則可以為Maven項目選擇“ 新建項目”向導 ,以生成派生自特定原型的Eclipse項目:
圖像顯示的選擇創建的結構與上面的命令行示例相同。 此外,它提供Eclipse項目特定的文件和設置,并將生成的項目自動導入IDE的工作區中。
自定義原型創建
盡管預定義的模板可以快速入門,但顯然不足以采用項目或組織特定的約定。 例如,Eclipse IDE允許在生成的支架結構內的文件中配置所有類型的設置。 因此,將這樣的預設包括在定制原型中將是有幫助的。
幸運的是,Maven原型可以方便地創建自定義模板定義,如在線文檔《創建原型指南》中所述。 但是,我發現從頭開始建立原型比使用Dirk Reinemann所描述的create-from-project選項更為有效。
之所以能夠做到這一點,是因為我已經有了一些可以用作原型的Eclipse插件,片段和功能。
我在GitHub上找到了tycho-eclipse-plugin-archetype定義,該定義提供了一個模板,用于一步生成帶有測試片段和存儲庫站點的eclipse模塊,這似乎為eclipse插件開發提供了一個很好的快速入門 。
從專案建立
要從給定的項目中創建Maven原型,請將其復制到工作目錄中,并刪除所有不應包含在原型包中的文件。 現在,此項目軀干提供了構成支架的所有文件和目錄結構。
確保軀干的根文件夾還包含一個簡單的 pom.xml如創建原型指南中的第一步所述。 之后,導航到pom所在的文件夾并執行以下命令:
mvn archetype:create-from-project這將生成存儲在子文件夾target/generated-sources/archetype的原型開發結構。 它包含一個新原型的pom,該原型源自放置在項目軀干根文件夾中的pom。 此外,還有一個子路徑src/main/resources/archetype-resources ,其中包含腳手架結構和資源的副本。
src/main/resources/META-INF/maven/archetype-metadata.xml是ArchetypeDescriptor ,它列出了將包含在新創建的模板中的所有文件并對它們進行分類,因此可以通過生成機制對其進行正確處理。
現在可以打包原型,并首先嘗試看看它是否按預期工作。 為此,導航到原型的pom所在的文件夾并運行:
mvn install這樣可以使原型在本地存儲庫中可用。 第一次使用它就像上面的Web應用程序示例中一樣容易,并且看起來應該類似于以下代碼片段:
mvn archetype:generate \ -DarchetypeArtifactId=foo.artefactId \ -DarchetypeGroupId=foo.groupId \ -DarchetypeVersion=foo.version如果做得正確,Maven現在應該已經創建了一個項目存根,該存根與項目軀干中的對象基本相同。
調整項
不幸的是,還有更多的工作要做。 Eclipse插件,片段和功能部件提供了自己的元描述符,其中包含標識符,版本號,名稱等。 當然,我們希望模板處理器合理地填充這些值。
Maven原型使用可以在ArchetypeDescriptor中聲明的屬性來處理此問題(請參見上文)。
<requiredProperties><requiredProperty key="identifier"></requiredProperty></requiredProperties>現在,您可以使用以下語法在原型的任意資源中引用此屬性:
[...] Bundle-SymbolicName: ${identifier} [...]可以通過將屬性設置為命令行的系統參數來完成屬性的初始化,例如:
mvn archetype:generate \ -DarchetypeArtifactId=foo.artefactId \ -DarchetypeGroupId=foo.groupId \ -DarchetypeVersion=foo.version \ -Didentifier=foo.identifier \插件和片段的另一個問題是例如.project定義文件引用的空或不存在的源文件夾。 Maven在模板處理期間會忽略空目錄。 但是以下代碼段顯示了如何配置描述符以創建此類文件夾:
<fileSets><fileSet filtered="true" encoding="UTF-8"><directory>src</directory><includes><include>**/*.java</include></includes></fileSet> [...]有關描述符配置的更多詳細信息,請參考在線文檔 。
組裝件
有了這些知識,我就可以為與Xiliary開發預設匹配的插件,測試片段和功能定義存根創建Maven原型工件。 這意味著每個存根都具有開箱即用的代碼格式,執行環境,編譯錯誤/警告首選項等特定設置。
出于靈活性的考慮,我決定使用三個單獨的人工制品,而不是一個,并使用一個小腳本將它們連接在一起。 這是因為大多數時候我需要一步創建所有三個存根。 盡管這使Eclipse New Project向導無法使用,但這并不是什么大問題,因為唯一的好處就是自動存根的工作區導入。
剩下的唯一手動任務是在存儲庫的構建定義的父pom中注冊新模塊,以及在P2相關的catagory.xml添加新功能條目。
結論
這篇文章簡要介紹了Maven Archetype,并展示了如何將其用于自動化Eclipse模塊創建。 使用上述自定義原型后,現在大約需要一分鐘的時間將帶有插件和測試片段的新功能定義添加到工作區并生成定義。
與之前的手動創建,配置,復制和粘貼連載內容相比,在一分鐘內完成開發和構建還不錯……因此,您想自己看看原型源,定義位于com.codeaffine.xiliary.archetype GitHub上Xiliary儲存庫的com.codeaffine.xiliary.archetype項目。
翻譯自: https://www.javacodegeeks.com/2014/11/efficient-creation-of-eclipse-modules-with-maven-archetype.html
總結
以上是生活随笔為你收集整理的使用Maven原型高效创建Eclipse模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用反应流API将Akka流与rxJav
- 下一篇: 微信电脑端的聊天记录怎么删除如何清空电脑