maven

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>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值