• pom.xml详解


    POM(Project Object Model)是Maven工程的工作基础,以pom.xml的形式存在项目中。在我们的工程中有几个元素是必须的:

    • project root
    • modelVersion - 应被设置为4.0.0
    • groupId - 项目组id
    • artifactId - 项目id
    • version - 项目版本

    假设你有一个项目com.mycompany.app:my-app:1.0项目结构如下:

    <project>
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.mycompany.app</groupId>
      <artifactId>my-module</artifactId>
      <version>1.0</version>
    </project>
    

    如果我们想要my-module继承上级工程的pom配置,则可将pom.xml改为如下:

    <project>
      <parent>
        <groupId>com.mycompany.app</groupId>
        <artifactId>my-app</artifactId>
        <version>1.0</version>
      </parent>
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.mycompany.app</groupId>
      <artifactId>my-module</artifactId>
      <version>1.0</version>
    </project>
    

    此外,如果我们希望工程的groupId跟version保持与父工程一致,则可去掉 groupId和version:

    
    <project>
      <parent>
        <groupId>com.mycompany.app</groupId>
        <artifactId>my-app</artifactId>
        <version>1.0</version>
      </parent>
      <modelVersion>4.0.0</modelVersion>
      <artifactId>my-module</artifactId>
    </project>
    

    下面就以一个比较完整pom.xml文件为例说明一下:

    <project>
      <parent>
        <!--被继承的父项目的全球唯一标识符-->
        <groupId>com.mycompany.app</groupId>
        <!--被继承的父项目的构件标识符-->
        <artifactId>my-app</artifactId>
        <!--项目当前版本,格式为:主版本.次版本.增量版本-限定版本号-->
        <version>1.0</version>
      </parent>
      <!--声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,这是为了当Maven引入了新的特性或者其他模型变更的时候,确保稳定性。--> 
      <modelVersion>4.0.0</modelVersion>
      <!--项目的全球唯一标识符,通常使用全限定的包名区分该项目和其他项目。并且构建时生成的路径也是由此生成, 如com.mycompany.app生成的相对路径为:/com/mycompany/app--> 
      <groupId>com.mycompany.app</groupId>
      <!--构件的标识符,它和group ID一起唯一标识一个构件。换句话说,你不能有两个不同的项目拥有同样的artifact ID和groupID;在某个特定的group ID下,artifact ID也必须是唯一的。构件是项目产生的或使用的一个东西,Maven为项目产生的构件包括:JARs,源码,二进制发布和WARs等。-->  
      <artifactId>my-module</artifactId>   
      <!--项目当前版本,格式为:主版本.次版本.增量版本-限定版本号-->
      <version>1.0</version>
      <!--项目产生的构件类型,例如jar、war、ear、pom。插件可以创建他们自己的构件类型,所以前面列的不是全部构件类型-->  
      <packaging>jar</packaging>
      <!--项目当前版本,格式为:主版本.次版本.增量版本-限定版本号-->  
      <!--(1表示大版本号,0表示小版本号)SNAPSHOT:快照,表示该版本正在开发中/release:稳定版本/beta:公测版/alpha:内部测试版/GA:正式发布版-->
      <version>1.0-SNAPSHOT</version>  
      <!--项目的名称, Maven产生的文档用-->  
      <name>项目名称</name>  
      <!--项目主页的URL, Maven产生的文档用-->  
      <url>项目主页URL</url>  
      <!--项目的详细描述,Maven产生的文档用。当这个元素能够用HTML格式描述时(例如,CDATA中的文本会被解析器忽略,就可以包含HTML标签), 不鼓励使用纯文本描述。如果你需要修改产生的web站点的索引页面,你应该修改你自己的索引页文件,而不是调整这里的文档。-->  
      <description>Maven工程的描述信息</description>   
      <!--开发人员的列表信息-->
      <developers>
        <developer>
          <name>开发者1</name>
          <!--等其他填写的信息-->
        </developer>
        <developer>
          <name>开发者2</name>
          <!--等其他填写的信息-->
        </developer>
      </developers>
      <!--许可证信息-->
      <licenses></licenses>
      <!--组织信息-->
      <organization></organization>
      <!--依赖项信息,依赖到的jar包-->
      <dependencies>
        <!--第一个依赖jar-->
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>${junit.version}</version>
          <type></type>
          <!--依赖的范围,表示本依赖应用于项目中的哪些阶段如下:
                compile:默认值。表示该依赖在编译、测试、运行阶段都有效
                provided:在编译和测试时有效,在运行时不会被加入
                runtime:在测试和运行时有效
                test:在测试范围内有效
                system:在编译和测试时有效,与provided类似,不过要与本地系统相关联,可移植性差
                import:在dependenceManagement中使用,表示导入别的项目的依赖到本项目中-->
          <scope>test</scope>
          <!--设置依赖是否可选,取值为true或false,默认是false,如果是false,则子项目必然继承父项目的依赖(不可选),若为true,则子项目可以自己选择是否需要父项目的依赖,若需要就手动引入,若不需要就不引入-->
          <optional>true</optional>
          <!--排除依赖列表,如果a依赖b,b依赖c,那么默认的a依赖c,但是我a就是不想依赖c,则可以在这里排除掉c-->
          <exclusions>
            <exclusion></exclusion>
          </exclusions>
        </dependency>
        <!--第二个依赖jar-->
        <dependency>
          <!--....-->      
        </dependency>
      </dependencies>
      <!--一般为了统一管理多个项目,让他们的依赖都具有相同的版本,在所有子模块中的依赖标签都不指定明确的版本号,maven会自动向其父级查找,直到找到一个父模块拥有dependencyManagement标签,指定了所有依赖的版本号。这就保证所有模块的依赖版本都来自于同一个父模块的dependencyManagement指定。-->
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId></groupId>
            <artifactId></artifactId>
            <version></version>
            </dependency>
        </dependencies>
      </dependencyManagement>
      <!--插件对构建项目的支持-->
      <build>
        <!--插件-->
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>3.6</version>
            <!--表示该插件在什么时候执行-->
            <executions>
              <execution>
              <!--表示在打包阶段之后执行本插件-->
              <phase>package</phase>
              <!--执行方式,一般是与java的启动参数类似,例如:run等-->
              <goals>
                <goal>jar-no-fork</goal>
              </goals>
              </execution>
            </executions>
           </plugin>
        </plugins>
      </build>
      <!--多模块共同管理,一起编译-->
      <modules>
        <module>A</module>
        <module>B</module>
        <module>C</module>
      </modules>
      <!--属性,可以指定变量,如下所示-->
        <properties>
            <!--变量名称自己定义,获取变量值使用:${变量名称} -->
            <junit.version>4.10</junit.version>
        </properties>
    </project>
    
    狭路相逢勇者胜!
  • 相关阅读:
    The constructors Integer(int), Double(double), Long(long) and so on are deprecated
    mysql Binlog二进制日志三种模式的日志格式介绍及区别
    MySQL错误“Specified key was too long; max key length is 1000 bytes”的解决办法
    mysql 的 bin 和 .log 日志文件会非常占用磁盘空间和 IO,修改 mysql 配置文件可以关闭这两种日志的记录。
    mysql关闭binlog日志
    MySQL实现排名并查询指定用户排名功能,并列排名功能
    ROSE框架中SQL批量操作使用
    tomcat 9.0 Tomcat NOTE: Picked up JDK_JAVA_OPTIONS: addopens=java.base/java.lang=ALLUNNAMED
    浅析Spring自定义注解+aop实现对实体类的字段进行校验
    浅析redis setIfAbsent的用法及在分布式锁上的应用及同步锁的缺陷
  • 原文地址:https://www.cnblogs.com/amcoder/p/13924147.html
Copyright © 2020-2023  润新知