当前位置 博文首页 > 文章内容

    maven的pom配置详解

    作者: 栏目:未分类 时间:2020-11-08 14:22:30

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



     

    setting.xml主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件;而pom.xml主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses,以及其他所有的项目相关因素,是项目级别的配置文件。

    原文:https://www.cnblogs.com/tanghaoran-blog/p/10429329.html

    基础配置

    一个典型的pom.xml文件配置如下:

     

    [html] view plain copy
     
     
    1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">  
    3.   
    4.     <!-- 模型版本。maven2.0必须是这样写,现在是maven2唯一支持的版本 -->  
    5.     <modelVersion>4.0.0</modelVersion>  
    6.   
    7.     <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.winner.trade,maven会将该项目打成的jar包放本地路径:/com/winner/trade -->  
    8.     <groupId>com.winner.trade</groupId>  
    9.   
    10.     <!-- 本项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->  
    11.     <artifactId>trade-core</artifactId>  
    12.   
    13.     <!-- 本项目目前所处的版本号 -->  
    14.     <version>1.0.0-SNAPSHOT</version>  
    15.   
    16.     <!-- 打包的机制,如pom,jar, maven-plugin, ejb, war, ear, rar, par,默认为jar -->  
    17.     <packaging>jar</packaging>  
    18.   
    19.     <!-- 帮助定义构件输出的一些附属构件,附属构件与主构件对应,有时候需要加上classifier才能唯一的确定该构件 不能直接定义项目的classifer,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成的 -->  
    20.     <classifier>...</classifier>  
    21.   
    22.     <!-- 定义本项目的依赖关系 -->  
    23.     <dependencies>  
    24.   
    25.         <!-- 每个dependency都对应这一个jar包 -->  
    26.         <dependency>  
    27.   
    28.             <!--一般情况下,maven是通过groupId、artifactId、version这三个元素值(俗称坐标)来检索该构件, 然后引入你的工程。如果别人想引用你现在开发的这个项目(前提是已开发完毕并发布到了远程仓库),-->   
    29.             <!--就需要在他的pom文件中新建一个dependency节点,将本项目的groupId、artifactId、version写入, maven就会把你上传的jar包下载到他的本地 -->  
    30.             <groupId>com.winner.trade</groupId>  
    31.             <artifactId>trade-test</artifactId>  
    32.             <version>1.0.0-SNAPSHOT</version>  
    33.   
    34.             <!-- maven认为,程序对外部的依赖会随着程序的所处阶段和应用场景而变化,所以maven中的依赖关系有作用域(scope)的限制。 -->  
    35.             <!--scope包含如下的取值:compile(编译范围)、provided(已提供范围)、runtime(运行时范围)、test(测试范围)、system(系统范围) -->  
    36.             <scope>test</scope>  
    37.   
    38.             <!-- 设置指依赖是否可选,默认为false,即子项目默认都继承:为true,则子项目必需显示的引入,与dependencyManagement里定义的依赖类似  -->  
    39.             <optional>false</optional>  
    40.   
    41.             <!-- 屏蔽依赖关系。 比如项目中使用的libA依赖某个库的1.0版,libB依赖某个库的2.0版,现在想统一使用2.0版,就应该屏蔽掉对1.0版的依赖 -->  
    42.             <exclusions>  
    43.                 <exclusion>  
    44.                     <groupId>org.slf4j</groupId>  
    45.                     <artifactId>slf4j-api</artifactId>  
    46.                 </exclusion>  
    47.             </exclusions>  
    48.   
    49.         </dependency>  
    50.   
    51.     </dependencies>  
    52.   
    53.     <!-- 为pom定义一些常量,在pom中的其它地方可以直接引用 使用方式 如下 :${file.encoding} -->  
    54.     <properties>  
    55.         <file.encoding>UTF-8</file.encoding>  
    56.         <java.source.version>1.5</java.source.version>  
    57.         <java.target.version>1.5</java.target.version>  
    58.     </properties>  
    59.   
    60.     ...  
    61. </project>  

     

    一般来说,上面的几个配置项对任何项目都是必不可少的,定义了项目的基本属性。

    这里有必要对一个不太常用的属性classifier做一下解释,因为有时候引用某个jar包,classifier不写的话会报错。

    classifier元素用来帮助定义构件输出的一些附属构件。附属构件与主构件对应,比如主构件是 kimi-app-2.0.0.jar,该项目可能还会通过使用一些插件生成 如kimi-app-2.0.0-javadoc.jar (Java文档)、 kimi-app-2.0.0-sources.jar(Java源代码) 这样两个附属构件。这时候,javadoc、sources就是这两个附属构件的classifier,这样附属构件也就拥有了自己唯一的坐标。

    classifier的用途在于:

    1. maven download  javadoc / sources jar包的时候,需要借助classifier指明要下载那个附属构件

    2. 引入依赖的时候,有时候仅凭groupId、artifactId、version无法唯一的确定某个构件,需要借助classifier来进一步明确目标。比如JSON-lib,有时候会同一个版本会提供多个jar包,在JDK1.5环境下是一套,在JDK1.3环境下是一套:

     

    引用它的时候就要注明JDK版本,否则maven不知道你到底需要哪一套jar包:

     

    [html] view plain copy
     
     
    1. <dependency>  
    2.            <groupId>net.sf.json-lib</groupId>  
    3.            <artifactId>json-lib</artifactId>  
    4.             <version>2.4</version>  
    5.            <classifier>jdk15