zoukankan      html  css  js  c++  java
  • Maven POM

    POM代表项目对象模型。它是 Maven 中工作的基本单位,这是一个 XML 文件。它始终保存在该项目基本目录中的 pom.xml 文件。
    POM 包含的项目是使用 Maven 来构建的,它用来包含各种配置信息。
    POM 也包含了目标和插件。在执行任务或目标时,Maven 会使用当前目录中的 POM。它读取POM得到所需要的配置信息,然后执行目标。部分的配置可以在 POM 使用如下:

    • project dependencies
    • plugins
    • goals
    • build profiles
    • project version
    • developers
    • mailing list

    创建一个POM之前,应该要先决定项目组(groupId),它的名字(artifactId)和版本,因为这些属性在项目仓库是唯一标识的。

    POM的例子

    <project xmlns="http://maven.apache.org/POM/4.0.0"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
       http://maven.apache.org/xsd/maven-4.0.0.xsd">
       <modelVersion>4.0.0</modelVersion>
       <groupId>com.yiibai.project-group</groupId>
       <artifactId>project</artifactId>
       <version>1.0</version>
    <project>
    
    XML

    要注意的是,每个项目只有一个POM文件。

    • 所有的 POM 文件要项目元素必须有三个必填字段: groupIdartifactIdversion
    • 在库中的项目符号是:groupId:artifactId:version
    • pom.xml 的根元素是 project,它有三个主要的子节点。
    节点描述
    groupId 这是项目组的编号,这在组织或项目中通常是独一无二的。 例如,一家银行集团com.company.bank拥有所有银行相关项目。
    artifactId 这是项目的ID。这通常是项目的名称。 例如,consumer-banking。 除了groupId之外,artifactId还定义了artifact在存储库中的位置。
    version 这是项目的版本。与groupId一起使用,artifact在存储库中用于将版本彼此分离。 例如:com.company.bank:consumer-banking:1.0com.company.bank:consumer-banking:1.1

    超级POM

    所有的POM继承自父类(尽管明确界定)。这个基础的 POM 被称为超级 POM,并包含继承默认值。 Maven使用有效的POM(超级POM加项目配置的配置)执行有关目标。它可以帮助开发人员指定最低配置的详细信息写在pom.xml 中。虽然配置可以很容易被覆盖。 一个简单的方法来看看超级POM的默认配置,通过运行下面的命令:mvn help:effective-pom 创建一个 pom.xml 。 在下面的例子中,已经创建了一个 pom.xmlC:MVN 项目文件夹中。 现在,打开命令控制台,进入包含 pom.xml 文件夹并执行以下 mvn 命令。

    C:MVNproject> mvn help:effective-pom
    
    Shell

    Maven将开始处理,并显示有效的 effective-pom 。

    [INFO] Scanning for projects...
    [INFO] Searching repository for plugin with prefix: 'help'.
    [INFO] ------------------------------------------------------------------------
    [INFO] Building Unnamed - com.companyname.project-group:project-name:jar:1.0
    [INFO]    task-segment: [help:effective-pom] (aggregator-style)
    [INFO] ------------------------------------------------------------------------
    [INFO] [help:effective-pom {execution: default-cli}]
    [INFO]
    
    .....
    
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESSFUL
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: < 1 second
    [INFO] Finished at: Thu Jul 05 11:41:51 IST 2012
    [INFO] Final Memory: 6M/15M
    [INFO] ------------------------------------------------------------------------
    
    Shell

    在控制台显示结果:有效POM,继承,插值,应用配置文件。

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- ================================================================= -->
    <!--                                                                   -->
    <!-- Generated by Maven Help Plugin on 2012-07-05T11:41:51             -->
    <!-- See: http://maven.apache.org/plugins/maven-help-plugin/           -->
    <!--                                                                   -->
    <!-- ================================================================= -->
    <!-- ================================================================= -->
    <!--                                                                   -->
    <!-- Effective POM for project                                         -->
    <!-- 'com.companyname.project-group:project-name:jar:1.0'              -->
    <!--                                                                   -->
    <!-- ================================================================= -->
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/
    2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 h
    ttp://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.companyname.project-group</groupId>
      <artifactId>project</artifactId>
      <version>1.0</version>
      <build>
        <sourceDirectory>C:MVNprojectsrcmainjava</sourceDirectory>
        <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
        <testSourceDirectory>C:MVNprojectsrc	estjava</testSourceDirectory>
        <outputDirectory>C:MVNproject	argetclasses</outputDirectory>
        <testOutputDirectory>C:MVNproject	arget	est-classes</testOutputDirectory>
        <resources>
          <resource>
            <mergeId>resource-0</mergeId>
            <directory>C:MVNprojectsrcmain
    esources</directory>
          </resource>
        </resources>
        <testResources>
          <testResource>
            <mergeId>resource-1</mergeId>
            <directory>C:MVNprojectsrc	est
    esources</directory>
          </testResource>
        </testResources>
        <directory>C:MVNproject	arget</directory>
        <finalName>project-1.0</finalName>
        <pluginManagement>
          <plugins>
            <plugin>
              <artifactId>maven-antrun-plugin</artifactId>
              <version>1.3</version>
            </plugin>
            <plugin>
              <artifactId>maven-assembly-plugin</artifactId>
              <version>2.2-beta-2</version>
            </plugin>
            <plugin>
              <artifactId>maven-clean-plugin</artifactId>
              <version>2.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>2.0.2</version>         </plugin>
            <plugin>
              <artifactId>maven-dependency-plugin</artifactId>
              <version>2.0</version>
            </plugin>
            <plugin>
              <artifactId>maven-deploy-plugin</artifactId>
              <version>2.4</version>
            </plugin>
            <plugin>
              <artifactId>maven-ear-plugin</artifactId>
              <version>2.3.1</version>
            </plugin>
            <plugin>
              <artifactId>maven-ejb-plugin</artifactId>
              <version>2.1</version>
            </plugin>
            <plugin>
              <artifactId>maven-install-plugin</artifactId>
              <version>2.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-jar-plugin</artifactId>
              <version>2.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-javadoc-plugin</artifactId>
              <version>2.5</version>
            </plugin>
            <plugin>
              <artifactId>maven-plugin-plugin</artifactId>
              <version>2.4.3</version>
            </plugin>
            <plugin>
              <artifactId>maven-rar-plugin</artifactId>
              <version>2.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-release-plugin</artifactId>
              <version>2.0-beta-8</version>
            </plugin>
            <plugin>
              <artifactId>maven-resources-plugin</artifactId>
              <version>2.3</version>
            </plugin>
            <plugin>
              <artifactId>maven-site-plugin</artifactId>
              <version>2.0-beta-7</version>
            </plugin>
            <plugin>
              <artifactId>maven-source-plugin</artifactId>
              <version>2.0.4</version>
            </plugin>
            <plugin>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>2.4.3</version>
            </plugin>
            <plugin>
              <artifactId>maven-war-plugin</artifactId>
              <version>2.1-alpha-2</version>
            </plugin>
          </plugins>
        </pluginManagement>
        <plugins>
    
          <plugin>
            <artifactId>maven-help-plugin</artifactId>
            <version>2.1.1</version>
          </plugin>
        </plugins>
      </build>
      <repositories>
        <repository>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>Maven Repository Switchboard</name>
          <url>http://repo1.maven.org/maven2</url>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <releases>
            <updatePolicy>never</updatePolicy>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>Maven Plugin Repository</name>
          <url>http://repo1.maven.org/maven2</url>
        </pluginRepository>
      </pluginRepositories>
      <reporting>
        <outputDirectory>C:MVNproject	arget/site</outputDirectory>
      </reporting>
    </project>
    
    Shell

    在上面的pom.xml 中,可以看到默认的项目源文件夹结构,输出目录,插件,资料库,报表目录,Maven将使用它们来执行预期的目标。

    Maven pom.xml 无须手动写入。

    Maven提供了大量的原型插件以创建项目,包括项目结构 和 pom.xml

    如上述详细信息中提到 Maven插件和Maven创建项目部分。

  • 相关阅读:
    LeetCode做题笔记(4)——error: variable-sized object may not be initialized|
    LeetCode做题笔记(3)——if嵌套if时不加花括号{}导致的bug
    LeetCode做题笔记(2)——使用动态内存分配定义一个二维数组
    数组的初始化
    LeetCode做题笔记(1)——二维数组及qsort的compar函数写法详解
    FreeRTOS 在Tricore上的三种任务切换方式
    FreeRTOS 就绪任务列表与延时任务列表(阻塞态到就绪态的转移原理)
    FreeRTOS vTaskDelay(相对延时)和vTaskDelayUntil(绝对延时)的区别及使用方法
    FreeRTOS 互斥信号量(Mutex)与二值信号量(Binary)的区别
    微信小程序函数间传递url的参数丢失问题
  • 原文地址:https://www.cnblogs.com/borter/p/9605416.html
Copyright © 2011-2022 走看看