关于maven pom文件的packaging属性
前几天在调试源码运行程序的时候,因为将项目中pom
文件的packaging
属性用错导致源码包无法引入使用而报Bean
注入错误,在此进行总结整理记录。
packaging
是maven
的pom.xml
中的一个标签,用于指定maven
项目的输出格式,也就是打包类型,使用方式为:
<packaging>pom</packaging>
将鼠标放在packaging
标签上,按着ctrl
键并点击,可以进入到maven
的xsd
文件中,里面有对packaing
标签的描述说明。
<xs:element name="packaging" minOccurs="0" type="xs:string" default="jar">
<xs:annotation>
<xs:documentation source="version">4.0.0</xs:documentation>
<xs:documentation source="description">
The type of artifact this project produces, for example <code>jar</code>
<code>war</code>
<code>ear</code>
<code>pom</code>.
Plugins can create their own packaging, and
therefore their own packaging types,
so this list does not contain all possible types.
</xs:documentation>
</xs:annotation>
</xs:element>
可以看到packaging标签一共有这么几种打包类型:
jar
:标准打包格式,支持多个Java
文件打包成一个文件war
:web
项目的标准打包格式,用于Java Web
项目打包,支持多个web
资源文件打包成一个文件ear
:Enterprise
应用程序的标准打包格式,支持多个web
模块和EJB
模块打包成一个文件。pom
:project object model
,无法生成实际的文件,我的理解是类似一种项目结构格式,也是maven
中的一种打包类型。
default="jar"
表示如果在不指定的情况下,默认是jar的打包方式。
一般在项目中用的比较多的是pom
、war
、jar
这三种类型,这里重点说明下pom
和jar
类型的区别和各自的作用。
pom
我查了一些资料,对于pom
类型的maven
项目的描述都差不多,pom
项目只是为了聚合工程或者传递依赖用,可以理解成是多个model
合并。是单纯一个用来继承的文件,相当于接口类。
jar
很明显这个类型就会把项目打包为一个jar
包,内部调用或者是服务就要使用这种打包方式。
所以当要使用一些不属于当前项目的通用功能类时,可以引入这些jar
包进行使用。两个没有关联和传递关系的项目用pom
是无法进行引入的。
明确packaging
属性的一些内容和概念是为了只有源码调试和框架搭建时更好的发现问题调试问题。虽然概念简单但是不清楚其中的含义就很容易犯一些令人摸不扎头脑的错误。细节决定成败。