`

maven使用记要

阅读更多

maven生命周期

maven的生命周期包含超过20多个阶段,以下是最主要的阶段,按顺序排列:

  • Validate: validates that all project information is available and is correct

  • Compile: compiles the source code

  • Test: runs unit tests within a suitable framework

  • Package: packages the compiled code in its distribution format

  • Integration-test: processes the package in the integration-test environment

  • Verify: runs checks to verify that the package is valid

  • Install: installs the package in the local repository

  • Deploy: installs the final package in a remote repository

记住,运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。 Maven的插件机制是完全依赖Maven的生命周期的。

maven依赖

maven的依赖关系有6个范围:

  1. compile(编译范围):  compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath中可用,同时它们也会被打包。

  2. provided(已提供范围) :   provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用。例如,如果你开发了一个web应用,你可能在编译classpath中需要可用的Servlet API来编译一个servlet,但是你不会想要在打包好的WAR中包含这个Servlet API;这个Servlet API JAR由你的应用服务器或者servlet容器提供。已提供范围的依赖在编译classpath(不是运行时)可用。它们不是传递性的,也不会被打包。

  3. runtime(运行时范围):  runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现。

  4. test(测试范围): test范围依赖在一般的 编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。

  5. system(系统范围): system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个systemPath元素。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的Maven仓库中引用依赖)。

  6. import (导入范围) : 通过在pom文件中的<dependencyManagement/>元素进行配置

 

 

 

每个工程都有一个打包类型,可以是jar, war, ear 或 pom。打包类型决定了工程最终产物的类型。 其中pom类型用于构件多模块工程。

 

依赖,可在父节点的pom文件中指定,然后能够被子节点需要的时候继承.如对于依赖包的版本号的指定,如在父节点中有指定,在子节点中可不指定,子节点将使用父节点的设定值,这样可避免版本号冲突问题.

 

dependencies 和 dependencyManagement 的区别在于
前者,即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项。
后者,如果在子项目中不写该依赖项,那么子项目中是不会从父项目继承该依赖项的;只有在子项目中写了该依赖项,才会从父项目中继承该项,并且version 和 scope 都读取自 父pom。

 

工程之间有两种关系:依赖和聚合。

 

1.1 工程依赖关系
依赖关系的管理是maven最为人称道的地方。一个工程可以依赖多个其他工程, 通过工程的唯一标识(groupId+artifactId+version)可以明确指明依赖的库及版本,而且能够处理 依赖关系的传递。 maven可以指定依赖的作用范围(scope),包括以下几种:

 scope编译期测试期运行期说明*compileVVV默认scopetest V 只在测试期依赖,如junit包providedVV 运行期由容器提供,如servlet-api包runtime VV编译期间不需要直接引用systemVV 编译和测试时由本机环境提供 


1.2 工程聚合关系
前面提到pom类型用于于构件多模块工程,这体现了project之间的一种聚合关系: 将一系列小的模块聚合成整个产品。


通过聚合后的工程可以同时管理每个相关模块的构建、清理、文档等工作。 聚合关系通过在子工程中指定一个pom类型的project作为父project来定义。

 

 

 

Maven变

 

Maven内置变量说明:

  • ${basedir} 项目根目录

  • ${version} 相当于${project.version}

  • ${project.build.directory} 构建目录,缺省为target

  • ${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes

  • ${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version}

  • ${project.packaging} 打包类型,缺省为jar

  • ${project.xxx} 当前pom文件的任意节点的内容

 

 

 

 

Maven提供了一些隐式的变量可以用来访问环境变量,POM信息,和Maven Settings等:

  • env : env变量,暴露了你操作系统或者shell的环境变量。便 如在Maven POM中一个对${env.PATH}的引用将会被${PATH}环境变量替换,在Windows中为%PATH%.

  • projetc : project变量暴露了POM。可以使用点标记(.)的路径来引用POM元素的值。

  • settings : settings变量暴露了Maven settings信息。可以使用点标记(.)的路径来引用settings.xml文件中元素的值。例如${settings.offline}会引用~/.m2/settings.xml文件中offline元素的值。

 

Profile

 

在开发项目时,设想有以下场景:你的Maven项目存放在一个远程代码库中(比如github),该项目需要访问数据库,你有两台电脑,一台是Linux,一台是Mac OS X,你希望在两台电脑上都能做项目开发。但是,安装Linux的电脑上安装的是MySQL数据库,而Mac OS X的电脑安装的是PostgreSQL数据库。此时你需要找到一种简单的方法在两种数据库连接中进行切换,你会怎么做?
此外,你的项目需要部署。为了调试,在开发时我们在Java编译结果中加入了调试信息(Java默认)。而在部署时你希望Java编译结果中不出现调试信息。此时你又会怎么做?
 
答案是Profile。Maven的Profile用于在不同的环境下应用不同的配置。一套配置即称为一个Profile。这里的“环境”可以是操作系统版本,JDK版本或某些文件是否存在这样的物理环境,也可以是你自己定义的一套逻辑环境。比如上面的A中所说的Linux和Mac OS X便是一种物理环境,而B中讲的开发环境和部署环境则为逻辑环境。Maven提供了Activation机制来激活某个Profile,它既允许自动激活(即在某些条件满足时自动使某个Profile生效),也可以手动激活。
 
一个Profile几乎可以包含所有能够出现在pom.xml中的配置项,比如<artifactId>,<outputDirectory>等。相当于在Profile中定义的配置信息会覆盖原有pom.xml中的相应配置项

 

 

 

Eclipse中增强对maven的支持

安装上m2e-wtp: http://www.eclipse.org/m2e-wtp/

分享到:
评论

相关推荐

    NB_Team仅供内部使用

    而“工具”可能指代开发过程中使用的各种辅助软件,如版本控制系统(如Git)、构建工具(如Maven或Gradle)、IDE(如Eclipse或IntelliJ IDEA)等,或者是团队内部自定义的工具或脚本。 压缩包内的“会议纪要.txt”...

    思晗科技

    这包括集成开发环境(IDE)如Visual Studio或Eclipse,版本控制系统如Git,自动化构建工具如Maven,以及测试框架如JUnit等。这些工具极大地提升了开发效率,减少了错误,确保了代码质量。"思晗科技"可能使用了一系列...

    spire.doc free version

    3. **商务办公**:企业员工可以进行合同起草、报告编写、会议纪要记录等工作。 4. **在线分享**:通过转换功能,将Word文档转化为PDF或其他格式,方便在互联网上分享和阅读。 **文件“Bin”**:这个压缩包中的"Bin...

    OA.rar_Hu_OA 办公 系统_oa java_oa 办公_办公自动化

    开发过程中可能使用Maven或Gradle进行项目管理,Eclipse或IntelliJ IDEA作为开发工具。服务器端可能采用Tomcat或Jetty,数据库可能选择MySQL、Oracle或PostgreSQL。系统部署通常会考虑负载均衡和集群配置,以保证...

    MF00446-java学生会信息管理源码.zip

    这个系统的主要目的是为了帮助学生会成员有效地管理和维护学生会的相关信息,包括成员信息、活动记录、会议纪要等。通过这样的系统,可以提高工作效率,减少人工处理数据的错误,同时也能提供方便的数据查询和统计...

    天生创想OA网页 支持多用户协同办公,支持多分支机构管理

    `pom.xml`是Maven项目对象模型文件,表明天生创想OA可能是基于Java开发,利用Maven进行构建和依赖管理;`portfolio.html`可能是展示企业项目的模块;`content-elements.html`可能包含了各种内容元素的模板,如表格、...

    JSP企业办公自动化管理系统

    开发过程中,开发者可能使用Eclipse、IntelliJ IDEA等IDE,结合Maven或Gradle进行项目构建和依赖管理。开发完成后,系统需要在Java运行环境(如JDK)和Web服务器环境下部署。 5. **安全性** 系统应具备防止SQL...

    北大青鸟学士后第三单元项目OA

    5. **会议管理**:预约会议室,管理会议资料,记录会议纪要,提高会议效率。 6. **人力资源管理**:包括考勤、薪资、绩效、培训等模块,支持人事工作的信息化。 7. **客户关系管理**:集成CRM功能,协助销售团队...

    Projects.rar

    2. **源代码管理**:如果包含编程项目,可能会有`.cpp`, `.java`, `.py`等源代码文件,它们遵循一定的编程语言和框架,如Java的Maven或Python的虚拟环境。 3. **文档**:项目文档可能包括`.docx`, `.pdf`, `.md`等...

    JSP EIMS系统-OA子系统的设计与开发(源代码+毕设).zip

    - **Spring框架**:用于依赖注入,AOP(面向切面编程),以及事务管理,可能还有Spring Boot或Spring MVC的使用。 - **MyBatis**:持久层框架,简化SQL操作,将Java代码与SQL语句解耦。 此外,开发过程中还可能涉及...

    MyBatis-搭建MyBatis开发环境一(MyEclipse版)

    如果你使用的是Maven,可以这样配置: ```xml &lt;groupId&gt;org.mybatis &lt;artifactId&gt;mybatis &lt;version&gt;3.x.x &lt;groupId&gt;org.mybatis &lt;artifactId&gt;mybatis-spring &lt;version&gt;1.x.x ``` 接着,配置...

    自己做的一个OA系统

    在本案例中,"自己做的一个OA系统"是作为毕业设计项目完成的,使用了Java编程语言进行开发。Java作为一种面向对象的语言,具有跨平台性、稳定性和可扩展性,特别适合构建大型企业级应用,包括OA系统。 【Java技术栈...

    ConferenceCallTranscriptAnalysis:电话会议笔录分析

    7. **会议纪要生成**:结合上述分析结果,系统可以自动生成会议摘要,方便参与者回顾或未参会者了解会议情况。 在Java环境中,我们可以使用诸如Stanford CoreNLP、OpenNLP、Apache Lucene和GATE等开源库来实现这些...

    okcjug-2018-07:OKCJUG演示文稿的东西

    3. **Java开发工具**:可能涉及到IDEs(集成开发环境)的使用,如Eclipse、IntelliJ IDEA,或者构建工具如Maven和Gradle。 4. **Java框架**:可能讨论了Spring框架、Hibernate ORM或其他流行框架的应用,以及如何...

Global site tag (gtag.js) - Google Analytics