Maven打包類型
- Maven
- java
1.概述
打包類型是任何Maven項目的重要方面。它指定了項目產生的工件的類型。通常,構建會生成jar , war , pom或其他可執行文件。
Maven提供了許多默認包裝類型,並且還提供了定義自定義包裝類型的靈活性。
在本教程中,我們將深入探討Maven的包裝類型。首先,我們來看一下Maven中的構建生命週期。然後,我們將討論每種包裝類型,它們代表什麼以及它們對項目生命週期的影響。最後,我們將看到如何定義自定義包裝類型。
2.默認包裝類型
Maven提供了許多默認包裝類型,包括jar , war , ear , pom , rar , ejb和maven-plugin 。每種包裝類型都遵循由階段組成的構建生命週期。通常,每個階段都是一系列目標,並執行特定任務。
在特定階段,不同的包裝類型可能有不同的目標。例如,在jar包裝類型的包裝階段,將執行maven-jar-plugin的jar目標。相反,對於war項目, maven-war-plugin的戰爭目標是在同一階段執行的。
2.1。 jar
Java歸檔文件(或jar )是最受歡迎的打包類型之一。具有這種打包類型的項目會生成一個擴展名為.jar它可能包括純Java類,接口,資源和元數據文件。
jar一些默認的目標到構建階段綁定:
- 資源:
resources - 編譯器:
compile - 資源:
testResources - 編譯器:
testCompile - surefire:
test - 罐子:
jar - 安裝:
install - 部署:
deploy
毫不拖延地,讓我們定義一個jar項目的包裝類型:
<packaging>jar</packaging>
如果未指定任何內容,則Maven假定包裝類型為jar.
2.2。 war
簡而言之,Web應用程序歸檔文件(或war文件)包含與Web應用程序相關的所有文件。它可能包括Java Servlet,JSP,HTML頁面,部署描述符和相關資源。總體而言, war jar相同的目標綁定,但有一個例外- war的打包階段具有不同的目標,即war 。
毫無疑問, jar和war是Java社區中最流行的包裝類型。兩者之間的詳細區別可能是一個有趣的閱讀。
讓我們定義Web應用程序的打包類型:
<packaging>war</packaging>
其他包裝類型ejb , par和rar也具有相似的生命週期,但是每種包裝都有不同的包裝目標。
ejb: ejb or par: par or rar: rar
2.3。 ear
企業應用程序歸檔文件(即ear )是包含J2EE應用程序的壓縮文件。它由一個或多個模塊組成,這些模塊可以是Web模塊(打包為war文件)或EJB模塊(打包為jar文件),也可以是這兩個模塊。
ear jars和wars的超集,需要應用程序服務器來運行該應用程序,而war只需要一個Web容器或webserver即可對其進行部署。對於Java開發人員而言,將Web服務器與應用程序服務器區分開的方面以及那些流行的服務器在Java中是什麼是重要的概念。
ear的默認目標綁定:
- 耳朵:
generate-application-xml - 資源:
resources - 耳朵:
ear - 安裝:
install - 部署:
deploy
這是我們如何定義此類項目的包裝類型的方法:
<packaging>ear</packaging>
2.4。 pom
在所有包裝類型中, pom是最簡單的一種。它有助於創建聚合器和父項目。
聚合器或多模塊項目將組裝來自不同來源的子模塊。這些子模塊是常規的Maven項目,並遵循其自己的構建生命週期。 modules元素下具有子模塊的所有引用。
父項目允許您定義POM之間的繼承關係。父POM共享某些配置,插件和依賴項以及它們的版本。來自父級的大多數元素均由其子級繼承-例外包括artifactId , name和prerequisites 。
因為沒有要處理的資源,也沒有要編譯或測試的代碼。因此,pom項目的工件會自行生成,而不是生成任何可執行文件。
讓我們定義一個多模塊項目的打包類型:
<packaging>pom</packaging>
這樣的項目具有最簡單的生命週期,該生命週期僅包括兩個步驟: install和deploy 。
2.5。 maven-plugin
Maven提供了各種有用的插件。但是,可能會出現默認插件不夠用的情況。在這種情況下,該工具可根據項目需求靈活地創建Maven插件。
要創建插件,請設置項目的打包類型:
<packaging>maven-plugin</packaging>
maven-plugin的生命週期類似於jar的生命週期,但有兩個例外:
- 插件:
descriptor綁定到generate-resources階段 - 插件:
addPluginArtifactMetadata已添加到打包階段
對於此類項目,需要maven-plugin-api依賴項。
2.6。 ejb
企業Java Bean(或ejb )有助於創建可擴展的分佈式服務器端應用程序。 EJB通常提供應用程序的業務邏輯。典型的EJB體系結構由三個組件組成:企業Java Bean(EJB),EJB容器和應用程序服務器。
現在,讓我們定義EJB項目的打包類型:
<packaging>ejb</packaging>
ejb包裝類型也具有與jar包裝類似的生命週期,但包裝目標不同。此類項目的打包目標是ejb: ejb 。
ejb打包類型的項目maven-ejb-plugin來執行生命週期目標。 Maven提供對EJB 2和3的支持。如果未指定版本,則使用默認版本2。
2.7。 rar
資源適配器(或rar )是一個存檔文件,用作將資源適配器部署到應用程序服務器的有效格式。基本上,它是將Java應用程序連接到企業信息系統(EIS)的系統級驅動程序。
這是資源適配器的包裝類型的聲明:
<packaging>rar</packaging>
每個資源適配器檔案均由兩部分組成:一個包含源代碼jar文件和一個用作部署描述符ra.xml
同樣,生命週期階段是相同的一個jar或war的包裝有一個例外:在**package**階段執行rar ,它由一個目標**maven-rar-plugin**打包存檔**。**
3.其他包裝類型
到目前為止,我們已經研究了Maven默認提供的各種包裝類型。現在,讓我們想像一下,我們希望我們的項目產生一個擴展名為.zip在這種情況下,默認包裝類型無濟於事。
Maven還通過插件提供了更多包裝類型。借助這些插件,我們可以定義自定義包裝類型及其構建生命週期。其中一些類型是:
-
msi -
rpm -
tar -
tar.bz2 -
tar.gz -
tbz -
zip
要定義自定義類型,我們必須定義其packaging type和生命週期中的phases .為此,請在src/main/resources/META-INF/plexus目錄components.xml
<component>
<role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
<role-hint>zip</role-hint>
<implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
<configuration>
<phases>
<process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
<package>com.baeldung.maven.plugins:maven-zip-plugin:zip</package>
<install>org.apache.maven.plugins:maven-install-plugin:install</install>
<deploy>org.apache.maven.plugins:maven-deploy-plugin:deploy</deploy>
</phases>
</configuration>
</component>
到目前為止,Maven對我們的新包裝類型及其生命週期一無所知。為了使其可見,讓我們在項目pom extensions設置為true :
<plugins>
<plugin>
<groupId>com.baeldung.maven.plugins</groupId>
<artifactId>maven-zip-plugin</artifactId>
<extensions>true</extensions>
</plugin>
</plugins>
現在,該項目將可用於掃描,並且系統還將搜索plugins和compnenets.xml文件。
除了所有這些類型之外,Maven還通過外部項目和插件提供了許多其他包裝類型。例如, nar (本機存檔), swf和swc是產生Adobe Flash和Flex內容的項目的打包類型。對於此類項目,我們需要一個定義自定義包裝的插件和一個包含該插件的存儲庫。
4。結論
在本文中,我們研究了Maven中可用的各種包裝類型。另外,我們熟悉了這些類型代表什麼以及它們在生命週期中的不同之處。最後,我們還學習瞭如何定義自定義包裝類型和自定義默認構建生命週期。