Maven项目中POM文件的详解

pom头文件的解释

<?xml version="1.0" encoding="UTF-8"?>
<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.juvenxu.mvnbook.account</groupId>
  <artifactId>account-email</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>account-email</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
  • 代码的第一行是XML头,指明了xml文档的版本和编码方式。

  • project是所有pom.xml的根元素

  • modelVersion:指明了当前POM模型的版本,对于Maven2及Maven3来说,它只能是4.0.0

  • groupId:定义当前Maven项目隶属的实际项目,定义项目属于那个组,通常与域名反向一一对应

  • artifactId:该元素定义实际项目中的一个maven模块,当前项目在组中的唯一一个Id

  • version:该元素定义Maven项目当前所处的版本

  • packaging:该元素定义Maven项目的打包方式

  • name:该元素声明了一个对于用户更为友好的项目名称。

  • scope:该元素指定依赖的范围,默认是compile,表示该依赖对主代码和测试代码都有效。

  • maven默认的中央仓库地址:http://repo1.maven.org/maven2/ ,可以点击直接访问。

  • 常见的还有 (http://download.java.net/maven/2/)

    扫描二维码关注公众号,回复: 4755062 查看本文章
  • JBoss Maven库(http://repository.jboss.com/maven2/)

配置POM使用远程仓库

<project>
    ...
    <repositories>
        <repository>
            <id>jboss</id>
            <name>JBoss Repository</name>
            <url>http://repository.jboss.com/maven2</url>
            <release>   
                <enabled>true</enabled>
            </relsease>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <layout>default</layout>
        </repository>
    </repositories>
    ...
</project>
  • repository:声明一个或多个远程仓库
  • 任何一个仓库的id是唯一的,maven自带的中央仓库的id是central
  • url指向了仓库的地址,该地址基于http协议
  • release:用来控制发布版构建的下载,snapshots:用来控制快照版构建的下载
  • layout的值是default,表示仓库布局为maven2或maven3的默认布局,而不是maven1的布局
  • updatePolicy用来检查仓库配置更新的频率;checksumPolicy用来配置maven检查检验和文件的策略
  • 远程仓库:https://mvnrepository.com/

远程仓库的认证

  • 在setting.xml中配置仓库认证信息
<settings>
    <servers>
        <server>
            <id>my-proj</id>
            <username>repo-user</username>
            <password>repo-pwd</password>
        </server>
    </servers>
</settings>

生命周期

maven的声明周期包括:项目的清理,初始化,编译,测试,打包,集成测试,验证,部署,和站点生成。

  • clean生命周期,清理项目
  • default生命周期,构建项目
  • site生命周期,建立项目站点

插件

  • Maven的具体任务是又插件完成的,插件是以独立的构建形式存在的
  • 每个插件有很多功能,每个功能就是一个插件目标
  • 详细的插件列表地址:http://maven.apache.org/plugins/index.html
    • 格式为: (插件前缀:插件目标)
  • 自定义绑定插件:
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.1.1</version>
            <!-- 插件的执行配置 -->
            <executions>
                <id>attach-sources</id>
                <phase>verify</phase>
                <goals>
                    <goal>jar-no-fork</goal>
                </goals>
            <executions>
        </plugin>
    </plugins>
</build>
  • 在build下的plugins中声明插件的使用
  • executions下的executoin元素用来配置执行一些任务
  • phase配置生命周期
  • goals指定要执行的插件目标

依赖范围

  • 依赖范围就是控制依赖与三种classPath的关系
    • compile:编译范围依赖,该依赖为默认的依赖
    • test:测试依赖范围
    • provided:已提供依赖范围,对于编译和测试有效
    • runtime:运行时依赖范围,对于测试和运行有效
    • system:系统依赖范围,对于编译和测试有效

构建

  • Maven的三大特性:属性,Profile和资源过滤

属性

  • Maven属性默认只有在POM中才会解析

内置属性:

  • 两个常用的属性: b a s e d i r {basedir}表示项目根目录, {version}表示项目版本

POM属性:

  • 用户可以使用该属性引用POM文件中对应元素的值
  • 常用的pom属性的值:
    • ${project.artifactId}:项目的artifactId
    • ${project.groupId}:项目的groupId
    • ${project.build.finalName}:项目打包输出文件的名称
    • ${project.build.directory}:项目构建输出目录,默认为target

自定义属性:

  • 用户可以在pom文件的元素下自定义maven属性

setting属性:

  • 用户可以使用setting.开头的属性应用setting.xml文件中xml元素的值

Java系统属性:

  • 所有的java系统属性都可以使用Maven属性引用

环境属性:

  • 所有的环境变量都可以用env.开头的Maven属性引用

资源过滤

  • Maven属性只有在POM文件中才会被解析,要让Maven解析资源目录中的Maven属性,即开启资源过滤
  • Maven默认的主资源目录(src/main/resources)和测试资源目录(src/test/resources)的定义在超级POM中
  • 一般资源文件与web资源文件处理不同。前者通过maven-resources-plugin处理,后者通过maven-war-plugin处理。
  • 配置主资源目录
<resources>
    <resource>
        <dircetory>${project.basedir}/src/main/resources</directory>
        <filtering>true</filtering>   <!--开启资源过滤-->
    <resource>
<resources>
  • 配置测试资源目录
<testResources>
    <testResource>
        <dircetory>${project.basedir}/src/test/resources</directory>
        <filtering>true</filtering>
    <testResource>
<testResources>
  • 配置多个资源目录
<resources>
    <resource>
        <dircetory> src/main/resources</directory>
        <filtering>true</filtering>
    <resource>
     <resource>
        <dircetory> src/main/sql</directory>
        <filtering>false</filtering>
    <resource>
<resources>   

Maven Profile

  • 激活profile的方式
  1. 命令行激活:$ mvn clean install - P dev-x,dev-y 激活dev-x和dev-y两个profile
  2. settings文件显式激活:
<settings>
    <activeProfiles>
        <!--表示dev-x文件一直处于激活状态-->
        <activeProfile>dev-x</activeProfile>
    </activeProfiles>
</settings>
  1. 系统属性激活
  2. 操作系统环境激活
  3. 文件存在与否激活
  4. 默认激活:用户在定义profile的时候指定其默认激活,如果有任何一个profile通过其他任意一种方式激活了,所有的默认激活方式均会失效。
    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault></activeByDefault>
            </activation>
        </profile>
    </profiles>
  • profile的种类:
    • pom.xml:pom.xml中声明的profile只对当前项目有效。
    • 用户settings.xml:用户目录下.m2/settings.xml中的profile对本机上该用户所有的Maven项目有效
    • 全局settings.xml:安装目录下.conf/settings.xml中的profile对本机上该用户所有的Maven项目有效

猜你喜欢

转载自blog.csdn.net/qq_41357573/article/details/83784220