maven的标准pom.xml详解

maven是构建和管理理项目的利器,pom.xml 是其核心。一个标准的pom.xml该怎么写?其中的标签又有什么意义?话不多说,请看代码:

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

    <!--指定了当前pom模型的版本,必须这样写,不可更改-->
    <modelVersion>4.0.0</modelVersion>

    <!--坐标信息,并未固定要求,但约定俗成,模块概念和idea有些类似,一个项目分为多个模块-->
    <groupId>包名</groupId>
    <artifactId>实际项目名+模块名</artifactId>

    <!--1表示大版本号,0表示小版本号,
    SNAPSHOT:快照,表示该版本正在开发中
    release:稳定版本
    beta:公测版,玩过游戏的都懂
    alpha:内部测试版
    GA:正式发布版-->
    <version>1.0-SNAPSHOT</version>

    <!--maven项目的打包方式,默认为jar,可供选择的有war、zip、pom-->
    <packaging></packaging>

    <!--项目描述名-->
    <name></name>

    <!--项目地址-->
    <url></url>

    <!--项目描述-->
    <description></description>

    <!--开发人员的列表信息-->
    <developers>
        <developer></developer>
    </developers>

    <!--许可证信息-->
    <licenses></licenses>

    <!--组织信息-->
    <organization></organization>

    <!--依赖项信息,依赖到的jar包-->
    <dependencies>
        <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>
    </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>2.4</version>

                <!--表示该插件在什么时候执行-->
                <executions>
                    <execution>

                        <!--表示在打包阶段之后执行本插件-->
                        <phase>package</phase>

                        <!--执行方式,一般是与java的启动参数类似,例如:run等-->
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <!--用来指定继承的父模块-->
    <parent></parent>

    <!--多模块共同管理,一起编译-->
    <modules>
        <module>A</module>
        <module>B</module>
        <module>C</module>
    </modules>

    <!--属性,可以指定变量,在其他地方用${junit.version}来代替4.10,如下所示-->
    <properties>
        <junit.version>4.10</junit.version>
    </properties>

</project>

scope为import的讲解:

https://blog.csdn.net/ruanhao1203/article/details/79214867

http://www.cnblogs.com/huahua035/p/7680607.html

原文地址:https://www.cnblogs.com/xiaoao/p/10114620.html