创建项目

  运行如下命令会创建一个简单的Maven项目。

mvn archetype:create -DgroupId=com.netease.learn  -DartifactId=simple -DpackageName=com.netease.learn  

  • -DgroupId:指定了项目的groupId;
  • -DartifactId:指定了项目的artifactId
  • -DpackageName=org.sonatype.mavenbook会在项目创建包。

  在运行这个插件时,前缀是archetype,目标是generate。

构建项目

  如果想要构建打包这个应用,在包含pom.xml的目录下运行mvn install。

  运行 mvn install会将项目打包,并发送到本地仓库。

运行

Java –cp simple-2.1.jar com.netease.learm.App 

  当Maven运行的时候,它是根据项目的pom.xml里设置的组合来运行的,一个最上级的POM定义了Maven的安装目录,在这个目录中全局的默认值被定义了,(可能)还有一些用户定义的设置。想要看这个“有效的 (effective)”POM,或者说Maven真正运行根据的POM,在simple项目的基础目录下运行 mvn help:effective-pom命令。

Maven插件和目标

  我们已经用两种类型的命令行参数运行了Maven:①:单个的插件目标,Archetype插件的Generate目标②:一个生命周期阶段 –package。

  一个maven插件是一个或者过个目标的集合。一个目标是一个明确的任务,它可以作为单独的运行目标,或者作为一个大的构建的一部分和其它目标一起运行。一个目标是Maven中的一个工作单元。目标通过配置属性进行配置,以用来定制行为。目标定义了一些参数,这些参数可以定义一些默认值。

Maven的生命周期

  Mavne的生命周期是有一些生命周期阶段构成。一个阶段是在被Maven称为“构建生命周期”中的一个步骤。生命周期是包含在一个项目构建中的一系列有序的阶段。Maven支持许多不同的生命周期,最常用的生命周期是默认的Maven生命周期,这个生命周期中一开始的一个阶段是验证项目的基本完整性,最后一个阶段是把项目发布成产品。

  插件目标可以附着在生命周期的阶段上。随着maven沿着生命周期阶段移动,它会执行附着在特定阶段上的目标。每个阶段可能绑定零个或者多个目标。在Maven执行一个阶段的时候,它首先会有序的执行前面的所有阶段,到命令指定的那个阶段位置。

  • resources:resources 。Resources插件的resources目标绑定到了resources 阶段。这个目标复制src/main/resources下的所有资源和其它任何配置的资源目录,到输出目录。
  • compiler:compile。Compiler插件的compile目标绑定到了compile 阶段。这个目标编译src/main/java下的所有源代码和其他任何配置的资源目录,到输出目录。
  • resources:testResources。Resources插件的testResources目标绑定到了test-resources 阶段。这个目标复制src/test/resources下的所有资源和其它任何的配置的测试资源目录,到测试输出目录。
  • compiler:testCompile。Compiler插件的testCompile目标绑定到了test-compile 阶段。这个目标编译src/test/java下的测试用例和其它任何的配置的测试资源目录,到测试输出目录。
  • surefire:test。Surefire插件的test目标绑定到了test 阶段。这个目标运行所有的测试并且创建那些捕捉详细测试结果的输出文件。默认情况下,如果有测试失败,这个目标会终止。
  • jar:jar。Jar插件的jar目标绑定到了package 阶段。这个目标把输出目录打包成JAR文件。

  运行package阶段能很好的跟踪一个特定的构建中包含的所有目标,它也允许每个项目使用Maven来遵循一组定义明确的标准。而这个生命周期能让开发人员从一个Maven项目跳到另外一个Maven项目,而不用知道太多每个项目构建的细节。如果你能够构建一个Maven项目,那么你就能构建所有的Maven项目。

Maven坐标

  POM为项目命名,提供了项目的一组唯一标识符(坐标),并且通过依赖 (dependencies) ,父 (parents) 和先决条件(prerequisite) 来定义和其它项目的关系。POM也可以自定义插件行为,提供项目相关的社区和开发人员的信息。Maven坐标定义了一组标识,它们可以用来唯一标识一个项目,一个依赖,或者MavenPOM里的一个插件。

  Maven install命令会把项目的构建安装到本地仓库。

Maven依赖管理

  一个复杂的项目将会包含很多依赖,也有可能包含依赖于其它构件的依赖。Maven支持传递性依赖,对于传递性依赖,只需要加上直接依赖的类库,Maven会隐式的把这些库间接依赖的库也加入到项目中。Maven也会处理这些依赖中的冲突,同时能自定义默认行为,或者排除一些特定的传递依赖性。Maven在下载依赖的文件同时会下载POM文件,这是传递性依赖的基础。Maven也提供了不同的依赖范围。同时当为项目构建JAR文件的时候,它的依赖不会被捆绑在生成的构建中。当用Maven来创建WAR或者EAR,你可以配置Maven让它在生成的构件中捆绑依赖,你也可以配置Maven,使用provided范围,让它排除WAR文件中特定的依赖。provided范围告诉Maven一个依赖在编译的时候需要,但是它不应该被捆绑在构建的输出中。

其他知识

  • 查看项目依赖:mvn dependency:resolve
  • 查看整个项目依赖树:mvn dependency:tree
  • 执行测试单元:mvn  test
  • 忽略测试失败:mvn test –Dmaven.test.failure.ignore=true
  • 跳过单元测试:mvn install –Dmaven.test.skip=true

  Maven Assembly插件是一个可以用来创建应用程序特有分发包的插件,分发包包含了项目的二进制文件和所有依赖。此时需要在pom中添加一下内容:

<build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration></plugin></plugins>
</build>

View Code

  添加好配置后,可以运行 mvn install assembly:assembly 来构建这个装配。

构建多模板项目

  一个多模板项目通过一个父POM引用一个或者多个子模板来定义。父项目不创建一个JAR或者WAR,它仅仅是一个引用其他Maven项目的POM,所以其打包类型是pom。在父模板的pom.xml中列出了项目的子模板,这些模块在modules元素中定义。每个module元素对应一个子模板。Maven知道去这些子目录寻找pom.xml文件,并且在构建的时候,它会将这些子模板包含到要构建的项目中。在项目中需要使用parent元素标记一个Maven坐标来引用父模板pom。子模板会继承父模板的groupId和version。父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.netease.demo</groupId><artifactId>demo</artifactId><packaging>pom</packaging><version>1.0.0-RELEASE</version><modules><module>sub-demo1</module><module>...</module></modules></properties><dependencyManagement><dependencies><!-- trade工程的各个子工程 --><dependency><groupId>com.netease.demo</groupId><artifactId>sub-demo</artifactId><version>1.0.0-RELEASE</version></dependency><</dependencies></dependencyManagement>...
</project>

View Code

  子模板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"><parent><artifactId>trade</artifactId><groupId>com.netease.nsip</groupId><version>1.0.3-RELEASE</version></parent><modelVersion>4.0.0</modelVersion><artifactId>trade-core</artifactId><version>1.0.3-RELEASE</version><packaging>jar</packaging><dependencies>...</dependencies>
</project>

View Code

  当Maven执行一个带有子模板的项目的时候,Maven首先载入父POM,然后定位所有的子模块POM。Maven然后将所有这些项目的POM放入到一个称为Maven反应堆的东西中,由他负责分析模块之间的依赖关系。这个反应堆处理组件的排序,以确保相互独立的模块能以适当的顺序被编译和安装。

转载于:https://www.cnblogs.com/wxgblogs/p/6662107.html

Maven学习-构建项目相关推荐

  1. maven 手动构建项目

    maven 手动构建项目 在空目录下面: D:\test>mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archet ...

  2. jenkin+maven+git构建项目

    前提条件: Jenkins安装好maven插件,git插件 在manage jenkins-> global tool configuration中 配置jdk 配置Git 配置maven 新建 ...

  3. Maven学习:项目构建生命周期

    图1 maven对项目构建的生命周期划分为三个阶段 可以比喻成婴儿时期,成年人时期,和老年时期. 成年人时期(default)做的事情最多,任务也基本上都处于这个阶段. 图2 Clean要干的事情如图 ...

  4. 完美解决idea继承maven后,构建项目慢的问题

    1.修改远程仓库的位置(maven默认仓库是国外,所以我们下载jar包很慢) 找到我们安装的maven路径下的conf文件夹下的settings.xml文件 将文件复制到 C:\Users\Admin ...

  5. Maven generate/构建项目太慢解决方法

    在新建maven项目时添加archetypeCatalog参数,并将值设置为internal.

  6. Maven构建项目 — 知识点梳理

    文章目录 项目构建的痛点 有痛点就会有需求,apache根据这些痛点开发了Maven项目管理工具.Maven有以下核心特性 Maven安装和配置 修改Maven本地仓库 idea集成maven Mav ...

  7. Maven学习-目录结构

    1. 什么是Maven 2. 如何用Maven来构建项目 3. Maven项目的目录结构 Maven约定了一套规则来创建和构建项目.得益于Maven的一些约定,我们只要学习相对很少的命令就可以创建和管 ...

  8. Maven学习笔记,动力节点maven教程随堂笔记(史上最全)

    Maven笔记 这篇笔记的学习视频来自b站动力节点 https://www.bilibili.com/video/BV1dp4y1Q7Hf 笔记中的源码下载地址 动力节点maven资料 第一部分 1. ...

  9. maven工程导入项目打开404_Maven依赖配置和依赖范围

    教程前面用坐标一一对应地描述了构件,并且保存在仓库中了.那用坐标描述好后,把它们放在仓库中的作用是什么呢?当其他项目需要在这些构件的基础上做开发的时候,用户就没必要自己再重新实现一遍了.直接指定坐标, ...

最新文章

  1. MVP模式的相关知识
  2. 如何用技术恢复模糊的图像?在线教学…
  3. python 定义一个负数_其实Python不难学(4):Python如何处理文本数据
  4. XKC's basketball team(2019徐州站网络赛E线段树)
  5. 软件项目组织管理(七)项目成本管理
  6. git 查看分支编码_12个常用的Git命令,赶紧记一波!
  7. Javaweb MVC设计模式、Modle发展史、项目分层和三层架构
  8. 2008年秋季学期文兴小学四年级班主任工作计划
  9. 2 FI配置-企业结构-定义-创建公司代码(Company Code)
  10. unbuntu cmake安装mysql_Ubuntu下源码安装MySQL-5.5.25a
  11. 测试自己幸运数字的软件,心理测试:选一个你的幸运数字,测一下你最近会有什么好事发生?...
  12. 本地计算机上的MSSQLSERVER服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的,例如“性能日志和警报“服务。...
  13. SQL/PLUS创建JAVA SOURCE的问题,符号提示输入内容
  14. 【Flutter】Dart的方法中的可选参数、方法作为参数传递
  15. 兰州烧饼 NYOJ--779
  16. Flash入门:动画制作基础知识
  17. ARP协议ICMP协议
  18. 中证500指数的跟踪基金最近1年收益排名
  19. 《女生宿舍第二部》(1-46上) 转贴
  20. html中的div是什么意思?

热门文章

  1. 富士施乐打印机-查看端口号
  2. ExtJS4 API文档阅读(四)——Data
  3. 六类网线和超六类网线有什么区别呢 怎么区分
  4. Mysql 从库跳过
  5. can-utils源码解析cansend
  6. Code First 迁移
  7. SQL Server 取日期时间部分
  8. 1.3.3 改善后的异常处理
  9. 转:Ubuntu下ibus-sunpinyin的安装及翻页快捷键设置!
  10. wcf系列5天速成——第二天 binding的使用(2)(转载)