Maven-POM元素预览

328 阅读2分钟

元素归类

POM文件中的元素可以归纳为以下几类

  • 基础元素
  • 构建设置元素
  • 项目信息元素
  • 环境设置

基础元素

<project>
  ...
  //父pom信息,在继承中会用到
  <parent>...</parent>
  //以下3个为项目的坐标信息
  <groupId>...</groupId>
  <artifactId>...</artifactId>
  <version>...</version>
  //打包类型,默认为jar
  <packaging>...</packaging>
  //项目依赖管理
  <dependencies>...</dependencies>
  //项目依赖版本管理
  <dependencyManagement>...</dependencyManagement>
  //子模块声明,使用聚合时用到
  <modules>...</modules>
  //属性
  <properties>...</properties>
  ...
</project>

dependency

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <type>jar</type>
      <scope>test</scope>
      <optional>true</optional>
    </dependency>
    ...
  </dependencies>
  ...
</project>
  • type:依赖组件的文件后缀,一般与packaging一致

构建设置

<project>
  ...
  //生命周期default用到的构建配置
  <build>...</build>
  //生命周期site用到的构建配置
  <reporting>...</reporting>
  ...
</project>

基本构建元素

<build>
  //命令行未输入参数时的默认参数,可填插件方法(比如compiler:compile)或者构建阶段(compile)
  <defaultGoal>install</defaultGoal>
  <directory>${basedir}/target</directory>
  <finalName>${artifactId}-${version}</finalName>
  //过滤属性文件
  <filters>
    <filter>filters/filter1.properties</filter>
  </filters>
  ...
</build>

资源文件相关元素

    ...
    <resources>
      <resource>
        //目标文件目录路径
        <targetPath>META-INF/plexus</targetPath>
        //是否过滤,是的话会使用过滤属性文件对文件进行进行插值替换
        <filtering>false</filtering>
        //资源文件目录路径
        <directory>${basedir}/src/main/plexus</directory>
        //包含资源文件
        <includes>
          <include>configuration.xml</include>
        </includes>
        //排除资源文件
        <excludes>
          <exclude>**/*.properties</exclude>
        </excludes>
      </resource>
    </resources>
    <testResources>
      ...
    </testResources>
    ...

插件

  <build>
    ...
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.6</version>
        //是否加载插件拓展,默认false
        <extensions>false</extensions>
        //是否继承父pom中声明的配置,默认true
        <inherited>true</inherited>
        //插件配置
        <configuration>
          <classifier>test</classifier>
        </configuration>
        //插件依赖,常用来指定版本或者排除依赖
        <dependencies>...</dependencies>
        //插件任务
        <executions>...</executions>
      </plugin>
    </plugins>
  </build>

插件管理

类比依赖和依赖版本管理,插件管理包含的元素与插件一样,常用于继承,复用配置。

目录管理

 ...
  <build>
    <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
    <scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
    <outputDirectory>${basedir}/target/classes</outputDirectory>
    <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
    ...
  </build>

拓展

  ...
  <build>
    ...
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-ftp</artifactId>
        <version>1.0-alpha-3</version>
      </extension>
    </extensions>
    ...
  </build>

项目信息

这部分常见于开源项目

<project>
  ...
  //项目名称
  <name>...</name>
  //项目描述
  <description>...</description>
  //项目URL
  <url>...</url>
  //开始年份
  <inceptionYear>...</inceptionYear>
  //项目遵循的协议
  <licenses>...</licenses>
  //项目所属组织
  <organization>...</organization>
  //项目的开发成员
  <developers>...</developers>
  //项目的贡献者
  <contributors>...</contributors>
  ...
</project>

环境设置

<project>
  ...
  //缺陷跟踪系统
  <issueManagement>...</issueManagement>
  //持续集成系统
  <ciManagement>...</ciManagement>
  //项目成员邮件列表,开发者和用户可以通过邮件列表与项目成员联系
  <mailingLists>...</mailingLists>
  //版本管理
  <scm>...</scm>
  //构建正确执行的群体要求
  <prerequisites>...</prerequisites>
  //依赖仓库
  <repositories>...</repositories>
  //插件仓库
  <pluginRepositories>...</pluginRepositories>
  //分发管理
  <distributionManagement>...</distributionManagement>
  //部分配置
  <profiles>...</profiles>
  ...
</project>