拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 Maven打包类型

Maven打包类型

白鹭 - 2021-11-24 411 0 0

1.概述

打包类型是任何Maven项目的重要方面。它指定了项目产生的工件的类型。通常,构建会生成jarwarpom或其他可执行文件。

Maven提供了许多默认包装类型,并且还提供了定义自定义包装类型的灵活性。

在本教程中,我们将深入探讨Maven的包装类型。首先,我们来看一下Maven中的构建生命周期。然后,我们将讨论每种包装类型,它们代表什么以及它们对项目生命周期的影响。最后,我们将看到如何定义自定义包装类型。

2.默认包装类型

Maven提供了许多默认包装类型,包括jarwarearpomrarejbmaven-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

毫无疑问, jarwar是Java社区中最流行的包装类型。两者之间的详细区别可能是一个有趣的阅读。

让我们定义Web应用程序的打包类型:

<packaging>war</packaging>

其他包装类型ejbparrar也具有相似的生命周期,但是每种包装都有不同的包装目标。

ejb: ejb or par: par or rar: rar

2.3。 ear

企业应用程序归档文件(即ear )是包含J2EE应用程序的压缩文件。它由一个或多个模块组成,这些模块可以是Web模块(打包为war文件)或EJB模块(打包为jar文件),也可以是这两个模块。

ear jarswars的超集,需要应用程序服务器来运行该应用程序,而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共享某些配置,插件和依赖项以及它们的版本。来自父级的大多数元素均由其子级继承-例外包括artifactIdnameprerequisites

因为没有要处理的资源,也没有要编译或测试的代码。因此,pom项目的工件会自行生成,而不是生成任何可执行文件。

让我们定义一个多模块项目的打包类型:

<packaging>pom</packaging>

这样的项目具有最简单的生命周期,该生命周期仅包括两个步骤: installdeploy

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

同样,生命周期阶段是相同的一个jarwar的包装有一个例外:**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>

现在,该项目将可用于扫描,并且系统还将搜索pluginscompnenets.xml文件。

除了所有这些类型之外,Maven还通过外部项目和插件提供了许多其他包装类型。例如, nar (本机存档), swfswc是产生Adobe Flash和Flex内容的项目的打包类型。对于此类项目,我们需要一个定义自定义包装的插件和一个包含该插件的存储库。

4。结论

在本文中,我们研究了Maven中可用的各种包装类型。另外,我们熟悉了这些类型代表什么以及它们在生命周期中的不同之处。最后,我们还学习了如何定义自定义包装类型和自定义默认构建生命周期。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *