zoukankan      html  css  js  c++  java
  • Maven的pom配置文件

    1.1           Maven的pom配置文件

    1.1.1            pom文件内容和作用

    Pom.xml文件用来设置项目的项目依赖、插件、项目版本等信息,其中必须的是xml的根元素project 元素和三个必需字段:工程组的标识groupId,工程的名称artifactId,版本信息version三个元素。

    举例:

    <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>

    <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->

    <groupId>com.companyname.project-group</groupId>

    <!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->

    <artifactId>project</artifactId>

     <!-- 版本号 -->

    <version>1.0</version>

     </project>

    1.1.2            超级Pom文件的继承关系

    超级pom是项目的默认配置文件,项目中所有子模块的pom文件都会继承超级pom文件,在项目文件夹打开命令控制台,进入包含 pom.xml 文件夹,执行命令mvn help:effective-pom,maven会自动扫描工程,生成超级pom文件。

    超级pom文件的内容

    基础信息设置

    包括pom三要素:<groupId>    <artifactId>  <version>,依赖关系。

    构建信息

    用来配置源代码路径、输出路径、资源路径,依赖插件信息

    更多项目信息

    环境设置

    <project>
      <modelVersion>4.0.0</modelVersion>
    <!--maven2.0必须是这样写,现在是maven2唯一支持的版本-->
      <!-- 基础设置 -->
      <groupId>...</groupId>项目唯一标识
      <artifactId>...</artifactId>项目名称
      <version>...</version>项目版本
      <packaging>...</packaging>打包机制,打包机制,如pom,jar,war,ear,rar,par

     <name>...</name>描述项目的名称

      <url>...</url>开发团队的网址
      <dependencies>...</dependencies>依赖关系
      <parent>...</parent>
      <dependencyManagement>...</dependencyManagement>
      <modules>...</modules>
      <properties>...</properties>

      <!--构建设置 -->
     <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>

       
    </plugins>

      </build>


      <!-- 更多项目信息 -->
      <name>...</name>
      <description>...</description>
      <url>...</url>
      <inceptionYear>...</inceptionYear>
      <licenses>...</licenses>
      <organization>...</organization>
      <developers>...</developers>
      <contributors>...</contributors>

      <!-- 环境设置-->
      <issueManagement>...</issueManagement>
      <ciManagement>...</ciManagement>
      <mailingLists>...</mailingLists> 
      <scm>...</scm>
      <prerequisites>...</prerequisites>
      <repositories>...</repositories>
      <pluginRepositories>...</pluginRepositories>
      <distributionManagement>...</distributionManagement>
      <profiles>...</profiles>
    </project>

    1.1.3            Pom文件中的依赖dependencies

    Dependencies字段用来声明项目依赖的其他项目和组件,有三要素唯一标识其他项目和组件。需要是maven中心包管理的项目或组件,否则需要自己部署,或者通过设置scope为system并指定路径,将依赖项目包含进来。有时候各个项目多层依赖,如A依赖B,B依赖C,如果在A中依赖B,默认A依赖C,如果A不想依赖C,可以用exclusions将C排除.

    <dependencies>

        <dependency>

          <groupId>junit</groupId>

          <artifactId>junit</artifactId>

          <version>4.0</version>

          <type>jar</type>//依赖项目类型

          <scope>test</scope>依赖范围(作用时间和作用域):test、system等

          <optional>true</optional>false,子项目默认集成,true,子项目需要显示引入

        </dependency>

        <dependency>

            <groupId>com.alibaba.china.shared</groupId>

            <artifactId>alibaba.apollo.webx</artifactId>

            <version>2.5.0</version>

            <exclusions>

              <exclusion>从依赖的com.alibaba.china.shared排除下面的子项目

                <artifactId>org.slf4j.slf4j-api</artifactId>

                <groupId>com.alibaba.external</groupId>

              </exclusion>

              ....

            </exclusions>

    ......

    </dependencies>

    dependencyManagement:是用于帮助管理chidren的dependencies的。例如如果parent使用dependencyManagement定义了一个dependencyon junit:junit4.0,那么 它的children就可以只引用 groupId和artifactId,而version就可以通过parent来设置,这样的好处就是可以集中管理依赖的详情。

    Ø  scope:表示依赖项目的一个作用范围。scope的主要取值范围如下(还有一个是在Maven2.0.9以后版本才支持的import,关于import作用域将在后文《Dependency介绍》中做介绍):

    compile:这是它的默认值,这种类型很容易让人产生误解,以为只有在编译的时候才是需要的,其实这种类型表示所有的情况都是有用的,包括编译和运行时。而且这种类型的依赖性是可以传递的。

    provided:这个跟compile很类似,但是它表示你期望这个依赖项目在运行时由JDK或者容器来提供。这种类型表示该依赖只有在测试和编译的情况下才有效,在运行时将由JDK或者容器提供。这种类型的依赖性是不可传递的。

    runtime:这种类型表示该依赖在编译的时候不是必须的,只有在运行的时候才是必须的。

    test:这表示这种依赖只有测试的时候才需要,正常情况下是不需要的。

    system:这种类型跟provided类似,唯一不同的就是这种类型的依赖我们要自己提供jar包,这需要与另一个元素systemPath来结合使用。systemPath将指向我们系统上的jar包的路径,而且必须是给定的绝对路径。

    systemPath:上面已经说过了这个元素是在scope的值为system的时候用于指定依赖的jar包在系统上的位置的,而且是绝对路径。该元素必须在依赖的 jar包的scope为system时才能使用,否则Maven将报错。

    1.1.4            Pom文件中的继承

    父项目和子项目之间可以是继承关系,子项目pom文件中通过parent节点指定继承的父项目的三要素,不在同一路径下时还要用<relativePath>节点去指定相对路径。,子pom.xml会完全继承父pom.xml中所有的元素,而且对于相同的元素,一般子pom.xml中的会覆盖父pom.xml中的元素,但是有几个特殊的元素它们会进行合并而不是覆盖。这些特殊的元素是:dependencies、developers、contributors、plugin列表,包括plugin下面的reports、resources。

    带有相对路径的子项目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/maven-v4_0_0.xsd"> 

      <parent

        <groupId>com.tiantian.mavenTest</groupId> 

        <artifactId>projectA</artifactId> 

    <version>1.0-SNAPSHOT</version>

     <relativePath>../projectA/pom.xml</relativePath>

      </parent

     <modelVersion>4.0.0</modelVersion> 

      <groupId>com.tiantian.mavenTest</groupId> 

      <artifactId>projectB</artifactId> 

      <packaging>jar</packaging> 

      <version>1.0-SNAPSHOT</version> 

    </project> 

    1.1.5            Pom文件的聚合module

    聚合和继承是相关的两个概念,项目A,B,C,A作为父项目,B和C作为A的子模块,继承A的pom文件。而在A的pom文件中在<modules>标识中,添加B和C,在B和C的pom文件中声明parent为A,并将A的pom.xml中的packaging元素的值为pom。当对项目A进行编译时,B,C也会同时被编译。当我们在项目A上使用Maven命令时,实际上这些命令都会在它的子模块项目B,C上使用。这样方便大型项目的统一管理。Module中填的是子项目中pom的位置相对于父项目pom文件的相对路径,就是从父项目pom所在的目录出发,进入子项目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.tiantian.mavenTest</groupId> 

      <artifactId>A</artifactId> 

      <version>1.0-SNAPSHOT</version> 

      <packaging>pom</packaging> 

      <modules> 

           <module>/B</module> //B在A文件夹下面和A的pom一级,在B文件夹下可以找到B的pom

    <module>../C</module> //A和C为同级目录,所以..退出A,然后在进入C,可以找到C的pom文件。

      </modules> 

    </project>

    1.1.6            Pom属性

    在pom.xml文件中我们可以使用${propertyName}的形式引用属性。这个propertyName有以下几种形式:

    (1)env.propertyName:这种形式表示引用的是环境变量,比如我们需要引用当前系统的环境变量PATH的时候,就可以使用${env.PATH}。

    (2)project.propertyName:这种形式表示引用的是当前这个pom.xml中project根元素下面的子元素的值。比如我们需要引用当前project下面的version的时候,就可以使用${project.version}。

    (3)settings.propertyName:这种形式引用的是Maven本地配置文件settings.xml或本地Maven安装目录下的settings.xml文件根元素settings下的元素。比如我们需要引用settings下的本地仓库localRepository元素的值时,我们可以用${settings.localRepository}

    (4)java的系统属性,所有在java中使用java.lang.System.getProperties()能够获取到的属性都可以在pom.xml中引用,比如${java.home}。

    (5)pom.xml中properties元素下面的子元素作为属性。假如在pom.xml中有如下一段代码<properties><hello.world>helloWorld</hello.world></properties>,那么我们就可以使用${hello.world}引用到对应的helloWorld。

    自己编了一个股票监控软件,有如下功能,有兴趣的朋友可以下载;

    (1)   个股监测。监测个股实时变化,可以监测个股大单交易、急速拉升和下降、主力入场和出场、股票最高点和最低点提醒。检测到最高点、最低点、主力进场点、主力退场点、急速拉升点、急速下跌点,给出语音或者声音提醒,不用再时刻看着大盘了,给你更多自由的时间;

    (2)   大盘监测。监测大盘的走势,采用上证、深证、创业三大指数的综合指数作为大盘走势。并实时监测大盘的最高点和最低点、中间的转折点。

    (3)   股票推荐。还能根据历史数据长期或短期走势进行分析,对股市3千多个股票进行分析对比,选出涨势良好的股票,按照增长速度从大到小排序,推荐给你涨势良好的股票;

    下载地址:

    1.0.3版本(修复大盘指数崩溃缺陷)下载地址:

    链接:https://pan.baidu.com/s/1BJcTp-kdniM7VE9K5Kd3vg 提取码:003h

    更新链接:

    https://www.cnblogs.com/bclshuai/p/10621613.html

  • 相关阅读:
    hadoop 之 kafka 安装与 flume -> kafka 整合
    软考倒计时28天:项目一般管理
    HACMP5.4常用命令
    db2还原离线备份文件报错SQL2071N 提示“访问共享库出现错误”解决
    远程桌面不能拷贝文件的问题
    ubuntu设置开机启动命令行模式
    Rainmeter如何打开控制面板的小程序
    /var/adm/wtmp文件太大该怎么办?
    SQL1221N The Application Support Layer heap cannot be allocated. SQLSTATE=57011
    DB21019E An error occurred while accessing the directory "/root".
  • 原文地址:https://www.cnblogs.com/bclshuai/p/10437475.html
Copyright © 2011-2022 走看看