maven provided_Maven 教程之 pom.xml 详解

点击上方“Java知音”,选择“置顶公众号”

技术文章第一时间送达!

作者:dunwu

https://github.com/dunwu/blog

(点击即可跳转阅读)

1. SpringBoot内容聚合

2. 面试题内容聚合

3. 设计模式内容聚合

4. Mybatis内容聚合

5. 多线程内容聚合

简介

什么是 pom?

POM 是 Project Object Model 的缩写,即项目对象模型。

pom.xml 就是 maven 的配置文件,用以描述项目的各种信息。

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.0modelVersion>

  
  <groupId>...groupId>
  <artifactId>...artifactId>
  <version>...version>
  <packaging>...packaging>
  <dependencies>...dependencies>
  <parent>...parent>
  <dependencyManagement>...dependencyManagement>
  <modules>...modules>
  <properties>...properties>

  
  <build>...build>
  <reporting>...reporting>

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

基本配置

  • project - project 是 pom.xml 中描述符的根。

  • modelVersion - modelVersion 指定 pom.xml 符合哪个版本的描述符。maven 2 和 3 只能为 4.0.0。

一般 jar 包被识别为: 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.0modelVersion>

  <groupId>org.codehaus.mojogroupId>
  <artifactId>my-projectartifactId>
  <version>1.0version>
  <packaging>warpackaging>
project>

maven 坐标

在 maven 中,根据 groupIdartifactIdversion 组合成 groupId:artifactId:version 来唯一识别一个 jar 包。

  • groupId - 团体、组织的标识符。团体标识的约定是,它以创建这个项目的组织名称的逆向域名(reverse domain name)开头。一般对应着 java 的包结构。

  • artifactId - 单独项目的唯一标识符。比如我们的 tomcat、commons 等。不要在 artifactId 中包含点号(.)。

  • version - 一个项目的特定版本。

  • maven 有自己的版本规范,一般是如下定义 major version、minor version、incremental version-qualifier ,比如 1.2.3-beta-01。要说明的是,maven 自己判断版本的算法是 major、minor、incremental 部分用数字比较,qualifier 部分用字符串比较,所以要小心 alpha-2 和 alpha-15 的比较关系,最好用 alpha-02 的格式。

  • maven 在版本管理时候可以使用几个特殊的字符串 SNAPSHOT、LATEST、RELEASE。比如 1.0-SNAPSHOT。各个部分的含义和处理逻辑如下说明:

    • SNAPSHOT - 这个版本一般用于开发过程中,表示不稳定的版本。

    • LATEST - 指某个特定构件的最新发布,这个发布可能是一个发布版,也可能是一个 snapshot 版,具体看哪个时间最后。

    • RELEASE :指最后一个发布版。

  • packaging - 项目的类型,描述了项目打包后的输出,默认是 jar。常见的输出类型为:pom, jar, maven-plugin, ejb, war, ear, rar, par。

依赖配置

dependencies

<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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <dependencies>
    <dependency>
     <groupId>org.apache.mavengroupId>
      <artifactId>maven-embedderartifactId>
      <version>2.0version>
      <type>jartype>
      <scope>testscope>
      <optional>trueoptional>
      <exclusions>
        <exclusion>
          <groupId>org.apache.mavengroupId>
          <artifactId>maven-coreartifactId>
        exclusion>
      exclusions>
    dependency>
    ...
  dependencies>
  ...
project>
  • groupIdartifactIdversion - 和基本配置中的 groupIdartifactIdversion 意义相同。

  • type - 对应 packaging 的类型,如果不使用 type 标签,maven 默认为 jar。

  • scope - 此元素指的是任务的类路径(编译和运行时,测试等)以及如何限制依赖关系的传递性。有 5 种可用的限定范围:

  • compile - 如果没有指定 scope 标签,maven 默认为这个范围。编译依赖关系在所有 classpath 中都可用。此外,这些依赖关系被传播到依赖项目。

  • provided - 与 compile 类似,但是表示您希望 jdk 或容器在运行时提供它。它只适用于编译和测试 classpath,不可传递。

  • runtime - 此范围表示编译不需要依赖关系,而是用于执行。它是在运行时和测试 classpath,但不是编译 classpath。

  • test - 此范围表示正常使用应用程序不需要依赖关系,仅适用于测试编译和执行阶段。它不是传递的。

  • system - 此范围与 provided 类似,除了您必须提供明确包含它的 jar。该 artifact 始终可用,并且不是在仓库中查找。

  • systemPath - 仅当依赖范围是系统时才使用。否则,如果设置此元素,构建将失败。该路径必须是绝对路径,因此建议使用 propertie 来指定特定的路径,如\$ {java.home} / lib。由于假定先前安装了系统范围依赖关系,maven 将不会检查项目的仓库,而是检查库文件是否存在。如果没有,maven 将会失败,并建议您手动下载安装。

  • optional - optional 让其他项目知道,当您使用此项目时,您不需要这种依赖性才能正常工作。

  • exclusions - 包含一个或多个排除元素,每个排除元素都包含一个表示要排除的依赖关系的 groupId 和 artifactId。与可选项不同,可能或可能不会安装和使用,排除主动从依赖关系树中删除自己。

parent

maven 支持继承功能。子 POM 可以使用 parent 指定父 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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0modelVersion>

  <parent>
    <groupId>org.codehaus.mojogroupId>
    <artifactId>my-parentartifactId>
    <version>2.0version>
    <relativePath>../my-parentrelativePath>
  parent>

  <artifactId>my-projectartifactId>
project>
  • relativePath - 注意 relativePath 元素。在搜索本地和远程存储库之前,它不是必需的,但可以用作 maven 的指示符,以首先搜索给定该项目父级的路径。

dependencyManagement

dependencyManagement 是表示依赖 jar 包的声明。即你在项目中的 dependencyManagement 下声明了依赖,maven 不会加载该依赖,dependencyManagement 声明可以被子 POM 继承。

dependencyManagement 的一个使用案例是当有父子项目的时候,父项目中可以利用 dependencyManagement 声明子项目中需要用到的依赖 jar 包,之后,当某个或者某几个子项目需要加载该依赖的时候,就可以在子项目中 dependencies 节点只配置 groupId 和 artifactId 就可以完成依赖的引用。

dependencyManagement 主要是为了统一管理依赖包的版本,确保所有子项目使用的版本一致,类似的还有pluginspluginManagement

modules

子模块列表。

<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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0modelVersion>

  <groupId>org.codehaus.mojogroupId>
  <artifactId>my-parentartifactId>
  <version>2.0version>
  <packaging>pompackaging>

  <modules>
    <module>my-projectmodule>
    <module>another-projectmodule>
    <module>third-project/pom-example.xmlmodule>
  modules>
project>

properties

属性列表。定义的属性可以在 pom.xml 文件中任意处使用。使用方式为 ${propertie} 。

<project>
  ...
  <properties>
    <maven.compiler.source>1.7<maven.compiler.source>
    <maven.compiler.target>1.7<maven.compiler.target>
    <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
  properties>
  ...
project>

构建配置

build

build 可以分为 "project build" 和 "profile build"。

<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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  
  <build>...build>

  <profiles>
    <profile>
      
      <build>...build>
    profile>
  profiles>
project>

基本构建配置:

<build>
  <defaultGoal>installdefaultGoal>
  <directory>${basedir}/targetdirectory>
  <finalName>${artifactId}-${version}finalName>
  <filters>
    <filter>filters/filter1.propertiesfilter>
  filters>
  ...
build>

defaultGoal : 默认执行目标或阶段。如果给出了一个目标,它应该被定义为它在命令行中(如 jar:jar)。如果定义了一个阶段(如安装),也是如此。

directory :构建时的输出路径。默认为:${basedir}/target 。

finalName :这是项目的最终构建名称(不包括文件扩展名,例如:my-project-1.0.jar)

filter :定义 * .properties 文件,其中包含适用于接受其设置的资源的属性列表(如下所述)。换句话说,过滤器文件中定义的“name = value”对在代码中替换\$ {name}字符串。

resources

资源的配置。资源文件通常不是代码,不需要编译,而是在项目需要捆绑使用的内容。

<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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <build>
    ...
    <resources>
      <resource>
        <targetPath>META-INF/plexustargetPath>
        <filtering>falsefiltering>
        <directory>${basedir}/src/main/plexusdirectory>
        <includes>
          <include>configuration.xmlinclude>
        includes>
        <excludes>
          <exclude>**/*.propertiesexclude>
        excludes>
      resource>
    resources>
    <testResources>
      ...
    testResources>
    ...
  build>
project>
  • resources: 资源元素的列表,每个资源元素描述与此项目关联的文件和何处包含文件。

  • targetPath: 指定从构建中放置资源集的目录结构。目标路径默认为基本目录。将要包装在 jar 中的资源的通常指定的目标路径是 META-INF。

  • filtering: 值为 true 或 false。表示是否要为此资源启用过滤。请注意,该过滤器 * .properties 文件不必定义为进行过滤 - 资源还可以使用默认情况下在 POM 中定义的属性(例如\$ {project.version}),并将其传递到命令行中“-D”标志(例如,“-Dname = value”)或由 properties 元素显式定义。过滤文件覆盖上面。

  • directory: 值定义了资源的路径。构建的默认目录是${basedir}/src/main/resources

  • includes: 一组文件匹配模式,指定目录中要包括的文件,使用*作为通配符。

  • excludes: 与 includes 类似,指定目录中要排除的文件,使用*作为通配符。注意:如果 include 和 exclude 发生冲突,maven 会以 exclude 作为有效项。

  • testResourcestestResources 与 resources 功能类似,区别仅在于:testResources 指定的资源仅用于 test 阶段,并且其默认资源目录为:${basedir}/src/test/resources 。

plugins

<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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <build>
    ...
    <plugins>
      <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-jar-pluginartifactId>
        <version>2.6version>
        <extensions>falseextensions>
        <inherited>trueinherited>
        <configuration>
          <classifier>testclassifier>
        configuration>
        <dependencies>...dependencies>
        <executions>...executions>
      plugin>
    plugins>
  build>
project>
  • groupIdartifactIdversion :和基本配置中的 groupIdartifactIdversion 意义相同。

  • extensions :值为 true 或 false。是否加载此插件的扩展名。默认为 false。

  • inherited :值为 true 或 false。这个插件配置是否应该适用于继承自这个插件的 POM。默认值为 true。

  • configuration - 这是针对个人插件的配置,这里不扩散讲解。

  • dependencies :这里的 dependencies 是插件本身所需要的依赖。

  • executions :需要记住的是,插件可能有多个目标。每个目标可能有一个单独的配置,甚至可能将插件的目标完全绑定到不同的阶段。执行配置插件的目标的执行。

  • id: 执行目标的标识。

  • goals: 像所有多元化的 POM 元素一样,它包含单个元素的列表。在这种情况下,这个执行块指定的插件目标列表。

  • phase: 这是执行目标列表的阶段。这是一个非常强大的选项,允许将任何目标绑定到构建生命周期中的任何阶段,从而改变 maven 的默认行为。

  • inherited: 像上面的继承元素一样,设置这个 false 会阻止 maven 将这个执行传递给它的子代。此元素仅对父 POM 有意义。

  • configuration: 与上述相同,但将配置限制在此特定目标列表中,而不是插件下的所有目标。

<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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-antrun-pluginartifactId>
        <version>1.1version>
        <executions>
          <execution>
            <id>echodirid>
            <goals>
              <goal>rungoal>
            goals>
            <phase>verifyphase>
            <inherited>falseinherited>
            <configuration>
              <tasks>
                <echo>Build Dir: ${project.build.directory}echo>
              tasks>
            configuration>
          execution>
        executions>

      plugin>
    plugins>
  build>
project>

pluginManagement

与 dependencyManagement 很相似,在当前 POM 中仅声明插件,而不是实际引入插件。子 POM 中只配置 groupId 和 artifactId 就可以完成插件的引用,且子 POM 有权重写 pluginManagement 定义。

它的目的在于统一所有子 POM 的插件版本。

directories

<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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <build>
    <sourceDirectory>${basedir}/src/main/javasourceDirectory>
    <scriptSourceDirectory>${basedir}/src/main/scriptsscriptSourceDirectory>
    <testSourceDirectory>${basedir}/src/test/javatestSourceDirectory>
    <outputDirectory>${basedir}/target/classesoutputDirectory>
    <testOutputDirectory>${basedir}/target/test-classestestOutputDirectory>
    ...
  build>
project>

目录元素集合存在于 build 元素中,它为整个 POM 设置了各种目录结构。由于它们在配置文件构建中不存在,所以这些不能由配置文件更改。

如果上述目录元素的值设置为绝对路径(扩展属性时),则使用该目录。否则,它是相对于基础构建目录:${basedir}

extensions

扩展是在此构建中使用的 artifacts 的列表。它们将被包含在运行构建的 classpath 中。它们可以启用对构建过程的扩展(例如为 Wagon 传输机制添加一个 ftp 提供程序),并使活动的插件能够对构建生命周期进行更改。简而言之,扩展是在构建期间激活的 artifacts。扩展不需要实际执行任何操作,也不包含 Mojo。因此,扩展对于指定普通插件接口的多个实现中的一个是非常好的。

<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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <build>
    ...
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagongroupId>
        <artifactId>wagon-ftpartifactId>
        <version>1.0-alpha-3version>
      extension>
    extensions>
    ...
  build>
project>

reporting

报告包含特定针对 site 生成阶段的元素。某些 maven 插件可以生成 reporting 元素下配置的报告,例如:生成 javadoc 报告。reporting 与 build 元素配置插件的能力相似。明显的区别在于:在执行块中插件目标的控制不是细粒度的,报表通过配置 reportSet 元素来精细控制。

而微妙的区别在于 reporting 元素下的 configuration 元素可以用作 build 下的 configuration ,尽管相反的情况并非如此( build 下的 configuration 不影响 reporting 元素下的 configuration )。

另一个区别就是 plugin 下的 outputDirectory 元素。在报告的情况下,默认输出目录为 ${basedir}/target/site

<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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <reporting>
    <plugins>
      <plugin>
        ...
        <reportSets>
          <reportSet>
            <id>sunlinkid>
            <reports>
              <report>javadocreport>
            reports>
            <inherited>trueinherited>
            <configuration>
              <links>
                <link>http://java.sun.com/j2se/1.5.0/docs/api/link>
              links>
            configuration>
          reportSet>
        reportSets>
      plugin>
    plugins>
  reporting>
  ...
project>

项目信息

项目信息相关的这部分标签都不是必要的,也就是说完全可以不填写。

它的作用仅限于描述项目的详细信息。

下面的示例是项目信息相关标签的清单:

<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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...

  

  
  <name>maven-notesname>

  
  <description>maven 学习笔记description>

  
  <url>https://github.com/dunwu/maven-notesurl>

  
  <inceptionYear>2017inceptionYear>

  
  <licenses>
    <license>
      <name>Apache License, Version 2.0name>
      <url>https://www.apache.org/licenses/LICENSE-2.0.txturl>
      <distribution>repodistribution>
      <comments>A business-friendly OSS licensecomments>
    license>
  licenses>

  
  <organization>
    <name>...name>
    <url>...url>
  organization>

  
  <developers>
    <developer>
      <id>victorid>
      <name>Zhang Pengname>
      <email>forbreak at 163.comemail>
      <url>https://github.com/dunwuurl>
      <organization>...organization>
      <organizationUrl>...organizationUrl>
      <roles>
        <role>architectrole>
        <role>developerrole>
      roles>
      <timezone>+8timezone>
      <properties>...properties>
    developer>
  developers>

  
   <contributors>
    <contributor>
      
    contributor>
  contributors>

  

  ...
project>

这部分标签都非常简单,基本都能做到顾名思义,且都属于可有可无的标签,所以这里仅简单介绍一下:

  • name - 项目完整名称

  • description - 项目描述

  • url - 一般为项目仓库的 host

  • inceptionYear - 开发年份

  • licenses - 开源协议

  • organization - 项目所属组织信息

  • developers - 项目开发者列表

  • contributors - 项目贡献者列表, 的子标签和 的完全相同。

环境配置

issueManagement

这定义了所使用的缺陷跟踪系统(Bugzilla,TestTrack,ClearQuest 等)。虽然没有什么可以阻止插件使用这些信息的东西,但它主要用于生成项目文档。

<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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <issueManagement>
    <system>Bugzillasystem>
    <url>http://127.0.0.1/bugzilla/url>
  issueManagement>
  ...
project>

ciManagement

CI 构建系统配置,主要是指定通知机制以及被通知的邮箱。

<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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <ciManagement>
    <system>continuumsystem>
    <url>http://127.0.0.1:8080/continuumurl>
    <notifiers>
      <notifier>
        <type>mailtype>
        <sendOnError>truesendOnError>
        <sendOnFailure>truesendOnFailure>
        <sendOnSuccess>falsesendOnSuccess>
        <sendOnWarning>falsesendOnWarning>
        <configuration><address>continuum@127.0.0.1address>configuration>
      notifier>
    notifiers>
  ciManagement>
  ...
project>

mailingLists

邮件列表

<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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <mailingLists>
    <mailingList>
      <name>User Listname>
      <subscribe>user-subscribe@127.0.0.1subscribe>
      <unsubscribe>user-unsubscribe@127.0.0.1unsubscribe>
      <post>user@127.0.0.1post>
      <archive>http://127.0.0.1/user/archive>
      <otherArchives>
        <otherArchive>http://base.google.com/base/1/127.0.0.1otherArchive>
      otherArchives>
    mailingList>
  mailingLists>
  ...
project>

scm

SCM(软件配置管理,也称为源代码/控制管理或简洁的版本控制)。常见的 scm 有 svn 和 git 。

<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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <scm>
    <connection>scm:svn:http://127.0.0.1/svn/my-projectconnection>
    <developerConnection>scm:svn:https://127.0.0.1/svn/my-projectdeveloperConnection>
    <tag>HEADtag>
    <url>http://127.0.0.1/websvn/my-projecturl>
  scm>
  ...
project>

prerequisites

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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <prerequisites>
    <maven>2.0.6maven>
  prerequisites>
  ...
project>

repositories

repositories 是遵循 Maven 存储库目录布局的 artifacts 集合。默认的 Maven 中央存储库位于https://repo.maven.apache.org/maven2/上。

<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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <repositories>
    <repository>
      <releases>
        <enabled>falseenabled>
        <updatePolicy>alwaysupdatePolicy>
        <checksumPolicy>warnchecksumPolicy>
      releases>
      <snapshots>
        <enabled>trueenabled>
        <updatePolicy>neverupdatePolicy>
        <checksumPolicy>failchecksumPolicy>
      snapshots>
      <id>codehausSnapshotsid>
      <name>Codehaus Snapshotsname>
      <url>http://snapshots.maven.codehaus.org/maven2url>
      <layout>defaultlayout>
    repository>
  repositories>
  <pluginRepositories>
    ...
  pluginRepositories>
  ...
project>

pluginRepositories

与 repositories 差不多。

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <distributionManagement>
    ...
    <downloadUrl>http://mojo.codehaus.org/my-projectdownloadUrl>
    <status>deployedstatus>
  distributionManagement>
  ...
project>

distributionManagement

它管理在整个构建过程中生成的 artifact 和支持文件的分布。从最后的元素开始:

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <distributionManagement>
    ...
    <downloadUrl>http://mojo.codehaus.org/my-projectdownloadUrl>
    <status>deployedstatus>
  distributionManagement>
  ...
project>
  • repository - 与 repositories 相似

  • site - 站点信息

  • relocation - 项目迁移位置

profiles

activation 是一个 profile 的关键。配置文件的功能来自于在某些情况下仅修改基本 POM 的功能。这些情况通过 activation 元素指定。

<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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <profiles>
    <profile>
      <id>testid>
      <activation>
        <activeByDefault>falseactiveByDefault>
        <jdk>1.5jdk>
        <os>
          <name>Windows XPname>
          <family>Windowsfamily>
          <arch>x86arch>
          <version>5.1.2600version>
        os>
        <property>
          <name>sparrow-typename>
          <value>Africanvalue>
        property>
        <file>
          <exists>${basedir}/file2.propertiesexists>
          <missing>${basedir}/file1.propertiesmissing>
        file>
      activation>
      ...
    profile>
  profiles>
project>

参考资料

https://maven.apache.org/pom.html

觉得不错?欢迎转发分享给更多人

97b3a1bf06dea6575b27261de08b36df.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python将一个列表里面的某类元素取出来_03|Python列表常见操作

欢迎关注pythoner派微信公众号及头条号Python常见的数据结构我们在上一节中已经讲过再阅读文章前&#xff0c;请打开PythonIDE列表&#xff1a;1.定义一个列表现在我们有3瓶不同类型的啤酒&#xff0c;现在我们将其放入列表之中beer [粉象,白熊,橙色炸弹]2.向列表中追加元素现…

使用SDL打造游戏世界之入门篇 - 2

VC6下SDL的安装和初步使用首先&#xff0c;我们为所有的工程创建一个文件夹tutorial,将下载的开发库SDL-devel-1.2.8-VC6.zip拷贝到tutorial下并解压&#xff0c;并保证如下的文件夹层次&#xff08;图2&#xff09;如下&#xff1a;图2下面我们打开Visual Studio6.0&#xff0…

python虚拟环境管理工具_Python虚拟环境和包管理工具Pipenv的使用详解--看完这一篇就够了...

前言Python虚拟环境是一个虚拟化&#xff0c;从电脑独立开辟出来的环境。在这个虚拟环境中&#xff0c;我们可以pip安装各个项目不同的依赖包&#xff0c;从全局中隔离出来&#xff0c;利于管理。 传统的Python虚拟环境有virtualenv&#xff0c;使用pip freeze → requirements…

centos 6.8安装git_RPM包的卸载与安装,包含依赖包卸载

一、 rpm包的管理介绍&#xff1a;一种用于互联网下载包的打包及安装工具&#xff0c;它包含在某些Linux分发版中&#xff0c;它生成具有RPM扩展名的文件&#xff0c;RPM是RedHat Package Manager&#xff08;RedHat软件包管理工具&#xff09;的缩写&#xff0c;类似windows的…

anaconda matplotlib 输出动画_Python+Matplotlib 制作排序算法的动画

1 、算法的魅力深刻研究排序算法是入门算法较为好的一种方法&#xff0c;现在还记得4年前手动实现常见8种排序算法&#xff0c;通过随机生成一些数据&#xff0c;逐个校验代码实现的排序过程是否与预期的一致&#xff0c;越做越有劲&#xff0c;越有劲越想去研究&#xff0c;公…

如何在centos中找到安装mysql_centos上如何安装mysql

centos可以使用yum安装mysql 但是版本很低&#xff0c;且不灵活。本文将介绍如何使用安装包安装mysql将下载文件放在/opt/mysoft文件夹中解压文件tar -xf MySQL-5.6.22-1.linux_glibc2.5.x86_64.rpm-bundle.tar这里我们要安装mysql的服务端和客服端&#xff0c;所以使用下面两个…

html选择器_css的9个常用选择器

1.类选择器&#xff08;通过类名进行选择&#xff09;<!DOCTYPE html> <html> <head><title></title> </head> <style type"text/css">.p1{color: #00ff00;}.p2{color: #0000ff;} </style> <body><p class…

Resharper4.5:增强你的.net开发

Resharper4.5:增强你的.net开发 介绍 无庸置疑&#xff0c;ReSharper是最智能化的微软Visual Studio插件。它包括一系列丰富的能大大增加C#和Visual Basic.net开发者生产力的特征。使用ReSharper&#xff0c;你可以进行深度代码分析&#xff0c;智能代码协助&#xff0c;实时错…

mybatis collection_MyBatis之关联查询

前言我们进行数据库查询时往往需要的不止一张表的数据&#xff0c;需要将多张表的数据一起查询出来&#xff0c;大家学习过数据库的连接查询&#xff0c;那么在MyBatis中如何将有关系的多张表数据进行关联查询呢。表的结构商品和订单是典型的一对多关系&#xff0c;下面的案例我…

mysql如何优化性能优化_如何优化性能?MySQL实现批量插入以优化性能的实例详解...

这篇文章主要介绍了MySQL实现批量插入以优化性能的教程,文中给出了运行时间来表示性能优化后的对比,需要的朋友可以参考下对于一些数据量较大的系统&#xff0c;数据库面临的问题除了查询效率低下&#xff0c;还有就是数据入库时间长。特别像报表系统&#xff0c;每天花费在数据…

不支持对系统目录进行即席更新_「目录」让你的文档结构一目了然

很多时候&#xff0c;要求文档要有目录&#xff0c;比如书籍/杂志/论文/标书等等。目录可以让文档结构一目了然。如果不了解 Word &#xff08;包括 Microsoft Office 和 WPS Office 下的Word&#xff09;操作&#xff0c;目录的各标题及对应页码可能是手动一个一个码上去。其实…

合成/聚合原则: 桥接模式

假想场景&#xff1a;hp和apple是全球知名的电脑生产厂家&#xff0c;起初他们各自的电脑操作系统分别是linux和macintosh&#xff0c;microsoft是软件行业的龙头。为了吸引更多客户购买电脑&#xff0c;hp和apple请ms为他们开发两款最常用的软件&#xff0c;办公软件和及时通讯…

java查看jdk源码_Java-如何查看JDK源码

一、引言学习Java和使用Java的小伙伴都必须要看的懂Java的开发文档&#xff0c;然而&#xff0c;开发文档只是开发者对Java代码的功能做出简略的说明&#xff0c;它只是告诉你这个类能干嘛&#xff0c;并没告诉你这个类怎么干&#xff0c;所以&#xff0c;阅读Java源码是每个开…

arrays中copyof复制两个数组_数据结构与算法(3)数组

前言数组(Array)是一种线性表数据结构&#xff0c;利用一组连续的内存空间&#xff0c;存储一组具有相同类型的数据。概念介绍首先我们说一下什么是线性表&#xff0c;线性表就是数据排成一条线的数据结构&#xff0c;每个线性表最多只有前和后两个方向&#xff0c;数组、链表、…

java做的一个将中文转换成Unicode码的工具类【转载】做个标记,明天研究下

这两天在使用RBManager&#xff08;一个开源工具&#xff0c;用于多国化字符转化&#xff09;工具的时候觉得很不方便&#xff0c;有的时候只需要知道中文对应的unicode码是多少&#xff0c;不需要这么麻烦的操作&#xff0c;所以就自己写了一个工具&#xff0c;专门用于将中文…

unity game和scene效果不一样_KTV装修设计:如何让消费者体验到不一样的KTV娱乐效果...

现代KTV装修设计要尽显奢华与高贵,但起到吸引消费者的却是浓烈的欢快氛围和愉悦的歌唱体验.KTV想要有一个好的装修效果,需要了解各方面的细节问题.下面怡元小编讲述如何设计能让消费者体验到不一样的KTV娱乐效果?1、氛围设计在KTV装修设计中,氛围设计非常考究,尤其是消费者进入…

feather 设置坐标刻度_Matlab中将坐标轴放在原点位置

转载一篇文章&#xff0c;原文链接&#xff1a;https://blog.csdn.net/xiaobiyin9140/article/details/84519419​blog.csdn.net需求使用matlab画图&#xff1a;设置y轴位置&#xff0c;使y轴在x轴的中间示例画一个sigmoid函数MATLAB代码x-10:0.1:10; ysigmf(x,[1 0]); plot(…

hana数据库导入mysql_【SAP HANA】新建表以及操作数据(3)

账号和数据库都创建好之后&#xff0c;接下来就可以创建表了。来见识一下这个所谓“列式”存储方式的表是长啥样的&#xff01;一、可视化新建表然后输入所需栏位&#xff0c;设置好类型和长度&#xff1a;上图右上角可以看到类型是Column Store&#xff0c;代表列式存储&#…

(转)Asp.net 中 Get和Post 的用法

单form的提交有两种方式&#xff0c;一种是get的方法&#xff0c;一种是post 的方法.看下面代码,理解两种提交的区别: <form id"form1" method"get" runat"server"> <div> 你的名字<asp:TextBox ID"name" ru…

matlab lu分解求线性方程组_计算方法(二)直接三角分解法解线性方程组

封面是WH2里春希在编辑部的上司麻理前辈&#xff0c;有一说一&#xff0c;这条线的第一次H有点恶趣味&#xff0c;不是很喜欢。一&#xff1a;概述矩阵分解我学过的挺多种&#xff0c;比如极分解&#xff0c;谱分解&#xff0c;满秩分解&#xff0c;正交三角分解还有这里的直接…