maven

来源:互联网 发布:淘宝网天猫汽车用品 编辑:程序博客网 时间:2024/05/20 20:44

Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

maven常用的构建命令

mvn -v 查看maven版本
mvn compile 编译源代码
mvn test 单元测试
mvn package 用来打包
mvn clean 清理
mvn install 把包安装到本地仓库,可以让其他项目进行依赖
mvn deploy 部署
mvn default 构建项目
mvn site 项目相关的站点,在线文档
mvn archetype:generate 使用模版生成项目

maven中pom.xml解析

<parent>    <groupId>com.tortuousroad</groupId>    <artifactId>groupon</artifactId>    <version>1.0</version>    <relativePath /></parent>
  • parent,父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。 坐标包括group ID,artifact ID和 version。
    • groupId,被继承的父项目的全球唯一标识符。
    • artifactId,被继承的父项目的构件标识符。
    • version,被继承的父项目的版本。
    • relativePath,父项目的pom.xml文件的相对路径。相对路径允许你选择一个不同的路径。默认值是../pom.xml。Maven首先在构建当前项目的地方寻找父项目的pom,其次在文件系统的这个位置(relativePath位置),然后在本地仓库,最后在远程仓库寻找父项目的pom。

<modelVersion>4.0.0</modelVersion><groupId>com.tortuousroad</groupId><artifactId>groupon</artifactId><version>1.0</version><packaging>pom</packaging><name>${project.artifactId}</name>
  • modelVersion,声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,这是为了当Maven引入了新的特性或者其他模型变更的时候,确保稳定性。
  • groupId,artifactId和version这三个元素定义了一个项目基本的坐标,在Maven的世界,任何的jar、pom或者war都是以基于这些基本的坐标进行区分的。
  • groupId,项目的全球唯一标识符,通常使用全限定的包名区分该项目和其他项目。并且构建时生成的路径也是由此生成, 如com.mycompany.app生成的相对路径为:/com/mycompany/app。
  • artifactId,构件的标识符,它和group ID一起唯一标识一个构件。换句话说,你不能有两个不同的项目拥有同样的artifact ID和groupID;在某个特定的group ID下,artifact ID也必须是唯一的。构件是项目产生的或使用的一个东西,Maven为项目产生的构件包括:JARs,源码,二进制发布和WARs等。
  • version,项目当前版本,格式为:主版本.次版本.增量版本-限定版本号。snapshot快照版本、alpha 内测版本、beta 公测版本、Release 稳定、GA 正式发布。
  • packaging,项目产生的构件类型,例如jar、war、ear、pom。插件可以创建他们自己的构件类型。
  • name,项目的名称, Maven产生的文档用。
  • url,项目主页的URL, Maven产生的文档用 。
  • description,项目的详细描述, Maven 产生的文档用。 当这个元素能够用HTML格式描述时(例如,CDATA中的文本会被解析器忽略,就可以包含HTML标签), 不鼓励使用纯文本描述。
  • modules,模块(有时称作子项目) 被构建成项目的一部分。列出的每个模块元素是指向该模块的目录的相对路径。

    <issueManagement>        <system>GitHub</system>        <url></url>    </issueManagement>
  • issueManagement,项目的问题管理系统(Bugzilla, Jira, Scarab,或任何你喜欢的问题管理系统)的名称和URL。
    • system,问题管理系统(例如jira)的名字。
    • url,该项目使用的问题管理系统的URL。

<developers>    <developer>        <id> Meteor747 </id>        <name> liujiaxing </name>        <email> jiaxing747@163.com </email>        <url />        <roles>            <role> Architect </role>        </roles>        <organization> demo </organization>        <organizationUrl> https://github.com/Meteor747</organizationUrl>        <properties>            <dept> No </dept>        </properties>        <timezone> +8 </timezone>    </developer></developers>
  • developers,项目开发者列表。
    • developer,某个项目开发者的信息。
      • id,SCM里项目开发者的唯一标识符。
      • name,项目开发者的全名。
      • email,项目开发者的email。
      • url,项目开发者的主页的URL。
      • roles,项目开发者在项目中扮演的角色,角色元素描述了各种角色。
      • organization,项目开发者所属组织。
      • organizationUrl,项目开发者所属组织的URL。
      • properties,项目开发者属性,如即时消息如何处理等。
      • timezone,项目开发者所在时区, -11到12范围内的整数。

<licenses>    <license>        <name>Apache 2</name>        <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>        <distribution>repo</distribution>        <comments>A business-friendly OSS license</comments>    </license></licenses>
  • licenses,该元素描述了项目所有License列表。 应该只列出该项目的 license列表,不要列出依赖项目的 license列表。如果列出多个license,用户可以选择它们中的一个而不是接受所有license。
    • license,描述了项目的license,用于生成项目的web站点的license页面,其他一些报表和validation也会用到该元素。
      • name,license用于法律上的名称。
      • url,官方的license正文页面的URL。
      • distribution,项目分发的主要方式:repo,可以从Maven库下载;manual, 用户必须手动下载和安装依赖。
      • comments,关于license的补充信息。

<organization>    <name></name>    <url></url></organization>
  • organization,描述项目所属组织的各种属性。Maven产生的文档用。
    • name,组织的全名。
    • url,组织主页的URL。

 <build>        <sourceDirectory />        <scriptSourceDirectory />        <testSourceDirectory />        <outputDirectory />        <testOutputDirectory />        <extensions>            <extension>                <groupId />                <artifactId />                <version />            </extension>        </extensions>        <defaultGoal />        <pluginManagement>            <plugins>                <plugin>                    <groupId />                    <artifactId />                    <version />                    <extensions />                    <executions>                        <execution>                            <id />                            <phase />                            <goals />                            <inherited />                            <configuration />                        </execution>                    </executions>                    <dependencies>                        <dependency>                        </dependency>                    </dependencies>                    <inherited />                    <configuration />                </plugin>            </plugins>        </pluginManagement>        <plugins>            <plugin>                <groupId /><artifactId /><version /><extensions />                <executions>                    <execution>                        <id /><phase /><goals /><inherited /><configuration />                    </execution>                </executions>                <dependencies>                    <dependency>                    </dependency>                </dependencies>                <goals /><inherited /><configuration />            </plugin>        </plugins>    </build>
  • build,构建项目需要的信息。
    • sourceDirectory,该元素设置了项目源码目录,当构建项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。
    • scriptSourceDirectory,该元素设置了项目脚本源码目录,该目录和源码目录不同:绝大多数情况下,该目录下的内容 会被拷贝到输出目录(因为脚本是被解释的,而不是被编译的)。
    • testSourceDirectory,该元素设置了项目单元测试使用的源码目录,当测试项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。
    • outputDirectory,被编译过的应用程序class文件存放的目录
    • testOutputDirectory,被编译过的测试class文件存放的目录。
    • extensions,使用来自该项目的一系列构建扩展。
      • extension,描述使用到的构建扩展。
        • groupId,构建扩展的groupId。
        • artifactId
        • version
    • defaultGoal,当项目没有规定目标(Maven2 叫做阶段)时的默认值。
    • resources,这个元素描述了项目相关的所有资源路径列表,例如和项目相关的属性文件,这些资源被包含在最终的打包文件里。
      • resource,这个元素描述了项目相关或测试相关的所有资源路径。
        • targetPath,描述了资源的目标路径。该路径相对target/classes目录(例如${project.build.outputDirectory})。举个例子,如果你想资源在特定的包里(org.apache.maven.messages),你就必须该元素设置为org/apache/maven/messages。然而,如果你只是想把资源放到源码目录结构里,就不需要该配置。
        • filtering,是否使用参数值代替参数名。参数值取自properties元素或者文件里配置的属性,文件在filters元素里列出。
        • directory,描述存放资源的目录,该路径相对POM路径。
        • includes,包含的模式列表,例如*/.xml。
        • excludes,排除的模式列表,例如*/.xml。
    • pluginManagement,子项目可以引用的默认插件信息。该插件配置项直到被引用时才会被解析或绑定到生命周期。给定插件的任何本地配置都会覆盖这里的配置。
      • plugins,使用的插件列表 。
        • plugin,plugin元素包含描述插件所需要的信息。
          • groupId,插件在仓库里的group ID。
          • artifactId,插件在仓库里的artifact ID。
          • version,被使用的插件的版本(或版本范围)。
          • extensions,是否从该插件下载Maven扩展(例如打包和类型处理器),由于性能原因,只有在真需要下载时,该元素才被设置成enabled。
          • executions,在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置。
            • execution,execution元素包含了插件执行需要的信息。
              • id,执行目标的标识符,用于标识构建过程中的目标,或者匹配继承过程中需要合并的执行目标。
              • phase,绑定了目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段。
              • goals,配置的执行目标。
              • inherited,配置是否被传播到子POM。
              • configuration,作为DOM对象的配置。
          • dependencies,项目引入插件所需要的额外依赖。
            • dependency
          • inherited,任何配置是否被传播到子项目。
          • configuration,作为DOM对象的配置。
    • plugins,使用的插件列表。
      • plugin,同上。

<dependencies>    <dependency>        <groupId> org.apache.maven </groupId>        <artifactId> maven-artifact </artifactId>        <version> 3.8.1 </version>        <type> jar </type>        <classifier></classifier>        <scope> test </scope>        <systemPath></systemPath>        <exclusions>            <exclusion>                <artifactId> spring-core </artifactId>                <groupId> org.springframework </groupId>            </exclusion>        </exclusions>        <optional> true </optional>    </dependency></dependencies>
  • dependencies,该元素描述了项目相关的所有依赖。 这些依赖组成了项目构建过程中的一个个环节。它们自动从项目定义的仓库中下载。要获取更多信息,请看项目依赖机制。
    • dependency,
      • groupId,依赖的group ID。
      • artifactId,依赖的artifact ID。
      • version,依赖的版本号。
      • type,依赖类型,默认类型是jar。它通常表示依赖的文件的扩展名,但也有例外。一个类型可以被映射成另外一个扩展名或分类器。类型经常和使用的打包方式对应,尽管这也有例外。一些类型的例子:jar,war,ejb-client和test-jar。如果设置extensions为 true,就可以在plugin里定义新的类型。所以前面的类型的例子不完整。
      • classifier,依赖的分类器。分类器可以区分属于同一个POM,但不同构建方式的构件。分类器名被附加到文件名的版本号后面。例如,如果你想要构建两个单独的构件成JAR,一个使用Java 1.4编译器,另一个使用Java 6编译器,你就可以使用分类器来生成两个单独的JAR构件。
      • scope,依赖范围。在项目发布过程中,帮助决定哪些构件被包括进来。compile :默认范围,用于编译,编译测试运行都有效;provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath,在编译和测试时有效,如在构建web项目时,可以依赖servlet API,但在最后运行时,不需要,因为web容器包含了servlet API,再加入进去就会冲突;runtime: 在执行时需要使用,在测试和运行时有效。如,JDBC驱动实现。项目主代码编译只需要jdk提供的jdbc的API,只有在执行测试和运行项目时,才需要JDBC具体的驱动;test: 用于test任务时使用,只在测试的依赖范围内有用,如Junit;system: 需要外在提供相应的元素。通过systemPath来取得,与本机系统相关联,可移植性差;systemPath: 仅用于范围为system。提供相应的路径;optional: 当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用;
      • systemPath,仅供system范围使用。注意,不鼓励使用这个元素,并且在新的版本中该元素可能被覆盖掉。该元素为依赖规定了文件系统上的路径。需要绝对路径而不是相对路径。推荐使用属性匹配绝对路径,例如${java.home}。
      • exclusions,当计算传递依赖时, 从依赖构件列表里,列出被排除的依赖构件集。即告诉maven你只依赖指定的项目,不依赖项目的依赖。此元素主要用于解决版本冲突问题。
        • exclusion
          • artifactId
          • groupId
      • optional,可选依赖,如果你在项目B中把C依赖声明为可选,你就需要在依赖于B的项目(例如项目A)中显式的引用对C的依赖。可选依赖阻断依赖的传递性。

<dependencyManagement>    <dependencies>        <dependency>            <groupId>com.tortuousroad</groupId>            <artifactId>groupon-service</artifactId>            <version>1.0</version>        </dependency>        <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-aop</artifactId>        <version>${spring_version}</version>        </dependency>    </dependencies></dependencyManagement>
  • dependencyManagement,继承自该项目的所有子项目的默认依赖信息。这部分的依赖信息不会被立即解析,而是当子项目声明一个依赖(必须描述group ID和artifact ID信息),如果group ID和artifact ID以外的一些信息没有描述,则通过group ID和artifact ID匹配到这里的依赖,并使用这里的依赖信息。
    • dependencies
      • dependency

<properties>    <servlet_version>3.1.0</servlet_version>    <javassist_version>3.20.0-GA</javassist_version></properties>

properties,以值替代名称,Properties可以在整个POM中使用,也可以作为触发条件(见settings.xml配置文件里activation元素的说明)。格式是<name>value</name>

原创粉丝点击