maven snapshot和maven release plugin版本的区别

maven中snapshot快照库和release发布库的区别和作用_百度知道
maven中snapshot快照库和release发布库的区别和作用
提问者采纳
那么遇到这个问题,随时需要修改并发布,maven会自动从镜像服务器上下载最新的快 照版本,在不更改版本号的情况下;/&lt,对于发布状态的&lt,maven也不会主动下载的:&lt,而被依赖组件则引用快照版本进行开发。但是,我们也不需要修 改pom文件提示版本号来下载新的版本, 甚至一天要发布N次,如果版本号相同,release正式仓库则是用来保存稳定的发行版本,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务 器上下载,只需要在pom文件中在该模块的版本号后加上-SNAPSHOT即可(注意这里必须是大写),而使用正式版本的模块;cc,如下,在不更改版本号的情况下,可这样就 明显不符合要求和实际情况了;artifactId&gt。snapshot快照仓库用于保存开发过程中的不稳定版 本,就需要升级组件的版本号;packaging&gt,那么在mvn deploy时会自动发布到正式版本库中,我们在开发阶段;
maven2会根据模块的版本号(pom文件中的version)中是否带有-SNAPSHOT来判断是快照版本还是正式版本;jar&lt,直接编译打包时。
所以,即使我们内部的镜像服务器上的 组件比本地新,maven的依赖管理是基于版本管理的在使用maven过程中,可以将公用库的版本设置为快照版本、打包命令即可重新下载最新的快照库了,在公用库的快照版本更新后;groupId&packaging&gt,我们在开发阶段经常性的会有很多公共库处于不稳定状态,如果是基于快照版本;version&&#47。如果是快照版 本.1-SNAPSHOT&lt,可能一天就要发布一次。如果是正式发布版本,而maven已经为我们准备好了这一切;version&0;&#47。定义一个组件&#47,遇到bug时。我们知道。如果我们在开发阶段都是基于正式发布版本来做依赖管理,而使用快照版本的模块.mzone&lt,那么在mvn deploy时会自动发布到快照版本库中,snapshot快照仓库和release发布仓库;/groupId&gt。
maven中的仓库分为两种;m1&artifactId&&模块为快照版本,那么问题就自热而然的解决了,直接mvn执行相关编译,从而也方便了我们进行开发
其他类似问题
maven的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Maven版本管理_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
&&¥1.00
喜欢此文档的还喜欢
Maven版本管理
主​要​介​绍​了​版​本​的​管​理​方​式​,​包​括​各​种​不​同​种​类​版​本​的​切​换​、​版​本​号​的​意​义​、​以​及​S​V​N​和​M​A​V​E​N​的​结​合​方​式​,​最​后​还​介​绍​了​自​动​化​发​布​和​自​动​化​创​建​分​支​的​操​作​.
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢4568人阅读
&在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次。我们知道,maven的依赖管理是基于版本管理的,对于发布状态的artifact,如果版本号相同,即使我们内部的镜像服务器上的组件比本地新,maven也不会主动下载的。如果我们在开发阶段都是基于正式发布版本来做依赖管理,那么遇到这个问题,就需要升级组件的版本号,可这样就明显不符合要求和实际情况了。但是,如果是基于快照版本,那么问题就自热而然的解决了,而maven已经为我们准备好了这一切。
&& & &maven中的仓库分为两种,snapshot快照仓库和release发布仓库。snapshot快照仓库用于保存开发过程中的不稳定版本,release正式仓库则是用来保存稳定的发行版本。定义一个组件/模块为快照版本,只需要在pom文件中在该模块的版本号后加上-SNAPSHOT即可(注意这里必须是大写),如下:
&groupId&cc.mzone&/groupId&&artifactId&m1&/artifactId&&version&0.1-SNAPSHOT&/version&&packaging&jar&/packaging&
&& & &maven2会根据模块的版本号(pom文件中的version)中是否带有-SNAPSHOT来判断是快照版本还是正式版本。如果是快照版本,那么在mvn deploy时会自动发布到快照版本库中,而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。如果是正式发布版本,那么在mvn deploy时会自动发布到正式版本库中,而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载。
&& & &所以,我们在开发阶段,可以将公用库的版本设置为快照版本,而被依赖组件则引用快照版本进行开发,在公用库的快照版本更新后,我们也不需要修改pom文件提示版本号来下载新的版本,直接mvn执行相关编译、打包命令即可重新下载最新的快照库了,从而也方便了我们进行开发。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:654595次
积分:9977
积分:9977
排名:第592名
原创:323篇
转载:188篇
评论:83条
(10)(2)(1)(10)(1)(3)(7)(3)(4)(6)(5)(6)(4)(9)(1)(4)(1)(2)(2)(6)(3)(3)(2)(18)(10)(13)(20)(42)(52)(7)(25)(19)(14)(9)(19)(22)(42)(8)(3)(10)(65)(19)常用Maven插件介绍 - 种菜得瓜 - 博客园
我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的。进一步说,每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标,例如maven- compiler-plugin的compile目标用来编译位于src/main/java/目录下的主源码,testCompile目标用来编译位于src/test/java/目录下的测试源码。
用户可以通过两种方式调用Maven插件目标。第一种方式是将插件目标与生命周期阶段(lifecycle phase)绑定,这样用户在命令行只是输入生命周期阶段而已,例如Maven默认将maven-compiler-plugin的compile目标与 compile生命周期阶段绑定,因此命令mvn compile实际上是先定位到compile这一生命周期阶段,然后再根据绑定关系调用maven-compiler-plugin的compile目标。第二种方式是直接在命令行指定要执行的插件目标,例如mvn archetype:generate 就表示调用maven-archetype-plugin的generate目标,这种带冒号的调用方式与生命周期无关。
认识上述Maven插件的基本概念能帮助你理解Maven的工作机制,不过要想更高效率地使用Maven,了解一些常用的插件还是很有必要的,这可 以帮助你避免一不小心重新发明轮子。多年来Maven社区积累了大量的经验,并随之形成了一个成熟的插件生态圈。Maven官方有两个插件列表,第一个列 表的GroupId为org.apache.maven.plugins,这里的插件最为成熟,具体地址为:。第二个列表的GroupId为org.codehaus.mojo,这里的插件没有那么核心,但也有不少十分有用,其地址为:。
接下来笔者根据自己的经验介绍一些最常用的Maven插件,在不同的环境下它们各自都有其出色的表现,熟练地使用它们能让你的日常构建工作事半功倍。
maven-antrun-plugin
maven-antrun-plugin能让用户在Maven项目中运行Ant任务。用户可以直接在该插件的配置以Ant的方式编写Target, 然后交给该插件的run目标去执行。在一些由Ant往Maven迁移的项目中,该插件尤其有用。此外当你发现需要编写一些自定义程度很高的任务,同时又觉 得Maven不够灵活时,也可以以Ant的方式实现之。maven-antrun-plugin的run目标通常与生命周期绑定运行。
maven-archetype-plugin
Archtype指项目的骨架,Maven初学者最开始执行的Maven命令可能就是mvn archetype:generate,这实际上就是让maven-archetype-plugin生成一个很简单的项目骨架,帮助开发者快速上手。可能也有人看到一些文档写了mvn archetype:create, 但实际上create目标已经被弃用了,取而代之的是generate目标,该目标使用交互式的方式提示用户输入必要的信息以创建项目,体验更好。 maven-archetype-plugin还有一些其他目标帮助用户自己定义项目原型,例如你由一个产品需要交付给很多客户进行二次开发,你就可以为 他们提供一个Archtype,帮助他们快速上手。
maven-assembly-plugin
maven-assembly-plugin的用途是制作项目分发包,该分发包可能包含了项目的可执行文件、源代码、readme、平台脚本等等。 maven-assembly-plugin支持各种主流的格式如zip、tar.gz、jar和war等,具体打包哪些文件是高度可控的,例如用户可以 按文件级别的粒度、文件集级别的粒度、模块级别的粒度、以及依赖级别的粒度控制打包,此外,包含和排除配置也是支持的。maven-assembly- plugin要求用户使用一个名为assembly.xml的元数据文件来表述打包,它的single目标可以直接在命令行调用,也可以被绑定至生命周期。
maven-dependency-plugin
maven-dependency-plugin最大的用途是帮助分析项目依赖,dependency:list能够列出项目最终解析到的依赖列表,dependency:tree能进一步的描绘项目依赖树,dependency:analyze可以告诉你项目依赖潜在的问题,如果你有直接使用到的却未声明的依赖,该目标就会发出警告。maven-dependency-plugin还有很多目标帮助你操作依赖文件,例如dependency:copy-dependencies能将项目依赖从本地Maven仓库复制到某个特定的文件夹下面。
maven-enforcer-plugin
在一个稍大一点的组织或团队中,你无法保证所有成员都熟悉Maven,那他们做一些比较愚蠢的事情就会变得很正常,例如给项目引入了外部的 SNAPSHOT依赖而导致构建不稳定,使用了一个与大家不一致的Maven版本而经常抱怨构建出现诡异问题。maven-enforcer- plugin能够帮助你避免之类问题,它允许你创建一系列规则强制大家遵守,包括设定Java版本、设定Maven版本、禁止某些依赖、禁止 SNAPSHOT依赖。只要在一个父POM配置规则,然后让大家继承,当规则遭到破坏的时候,Maven就会报错。除了标准的规则之外,你还可以扩展该插 件,编写自己的规则。maven-enforcer-plugin的enforce目标负责检查规则,它默认绑定到生命周期的validate阶段。
maven-help-plugin
maven-help-plugin是一个小巧的辅助工具,最简单的help:system可以打印所有可用的环境变量和Java系统属性。help:effective-pom和help:effective-settings最 为有用,它们分别打印项目的有效POM和有效settings,有效POM是指合并了所有父POM(包括Super POM)后的XML,当你不确定POM的某些信息从何而来时,就可以查看有效POM。有效settings同理,特别是当你发现自己配置的 settings.xml没有生效时,就可以用help:effective-settings来验证。此外,maven-help-plugin的describe目标可以帮助你描述任何一个Maven插件的信息,还有all-profiles目标和active-profiles目标帮助查看项目的Profile。
maven-release-plugin
maven-release-plugin的用途是帮助自动化项目版本发布,它依赖于POM中的SCM信息。release:prepare用来准备版本发布,具体的工作包括检查是否有未提交代码、检查是否有SNAPSHOT依赖、升级项目的SNAPSHOT版本至RELEASE版本、为项目打标签等等。release:perform则 是签出标签中的RELEASE源码,构建并发布。版本发布是非常琐碎的工作,它涉及了各种检查,而且由于该工作仅仅是偶尔需要,因此手动操作很容易遗漏一 些细节,maven-release-plugin让该工作变得非常快速简便,不易出错。maven-release-plugin的各种目标通常直接在 命令行调用,因为版本发布显然不是日常构建生命周期的一部分。
maven-resources-plugin
为了使项目结构更为清晰,Maven区别对待Java代码文件和资源文件,maven-compiler-plugin用来编译Java代码,maven-resources-plugin则用来处理资源文件。默认的主资源文件目录是src/main/resources,很多用户会需要添加额外的资源文件目录,这个时候就可以通过配置maven-resources-plugin来实现。此外,资源文件过滤也是Maven的一大特性,你可以在资源文件中使用${propertyName}形式的Maven属性,然后配置maven-resources-plugin开启对资源文件的过滤,之后就可以针对不同环境通过命令行或者Profile传入属性的值,以实现更为灵活的构建。
maven-surefire-plugin
可能是由于历史的原因,Maven 2/3中用于执行测试的插件不是maven-test-plugin,而是maven-surefire-plugin。其实大部分时间内,只要你的测试 类遵循通用的命令约定(以Test结尾、以TestCase结尾、或者以Test开头),就几乎不用知晓该插件的存在。然而在当你想要跳过测试、排除某些 测试类、或者使用一些TestNG特性的时候,了解maven-surefire-plugin的一些配置选项就很有用了。例如 mvn test -Dtest=FooTest 这样一条命令的效果是仅运行FooTest测试类,这是通过控制maven-surefire-plugin的test参数实现的。
build-helper-maven-plugin
Maven默认只允许指定一个主Java代码目录和一个测试Java代码目录,虽然这其实是个应当尽量遵守的约定,但偶尔你还是会希望能够指定多个 源码目录(例如为了应对遗留项目),build-helper-maven-plugin的add-source目标就是服务于这个目的,通常它被绑定到 默认生命周期的generate-sources阶段以添加额外的源码目录。需要强调的是,这种做法还是不推荐的,因为它破坏了 Maven的约定,而且可能会遇到其他严格遵守约定的插件工具无法正确识别额外的源码目录。
build-helper-maven-plugin的另一个非常有用的目标是attach-artifact,使用该目标你可以以classifier的形式选取部分项目文件生成附属构件,并同时install到本地仓库,也可以deploy到远程仓库。
exec-maven-plugin
exec-maven-plugin很好理解,顾名思义,它能让你运行任何本地的系统程序,在某些特定情况下,运行一个Maven外部的程序可能就是最简单的问题解决方案,这就是exec:exec的 用途,当然,该插件还允许你配置相关的程序运行参数。除了exec目标之外,exec-maven-plugin还提供了一个java目标,该目标要求你 提供一个mainClass参数,然后它能够利用当前项目的依赖作为classpath,在同一个JVM中运行该mainClass。有时候,为了简单的 演示一个命令行Java程序,你可以在POM中配置好exec-maven-plugin的相关运行参数,然后直接在命令运行 mvn exec:java 以查看运行效果。
jetty-maven-plugin
在进行Web开发的时候,打开浏览器对应用进行手动的测试几乎是无法避免的,这种测试方法通常就是将项目打包成war文件,然后部署到Web容器 中,再启动容器进行验证,这显然十分耗时。为了帮助开发者节省时间,jetty-maven-plugin应运而生,它完全兼容 Maven项目的目录结构,能够周期性地检查源文件,一旦发现变更后自动更新到内置的Jetty Web容器中。做一些基本配置后(例如Web应用的contextPath和自动扫描变更的时间间隔),你只要执行 mvn jetty:run ,然后在IDE中修改代码,代码经IDE自动编译后产生变更,再由jetty-maven-plugin侦测到后更新至Jetty容器,这时你就可以直接 测试Web页面了。需要注意的是,jetty-maven-plugin并不是宿主于Apache或Codehaus的官方插件,因此使用的时候需要额外 的配置settings.xml的pluginGroups元素,将org.mortbay.jetty这个pluginGroup加入。
versions-maven-plugin
很多Maven用户遇到过这样一个问题,当项目包含大量模块的时候,为他们集体更新版本就变成一件烦人的事情,到底有没有自动化工具能帮助完成这件 事情呢?(当然你可以使用sed之类的文本操作工具,不过不在本文讨论范围)答案是肯定的,versions-maven- plugin提供了很多目标帮助你管理Maven项目的各种版本信息。例如最常用的,命令 mvn versions:set -DnewVersion=1.1-SNAPSHOT 就能帮助你把所有模块的版本更新到1.1-SNAPSHOT。该插件还提供了其他一些很有用的目标,display-dependency- updates能告诉你项目依赖有哪些可用的更新;类似的display-plugin-updates能告诉你可用的插件更新;然后use- latest-versions能自动帮你将所有依赖升级到最新版本。最后,如果你对所做的更改满意,则可以使用 mvn versions:commit 提交,不满意的话也可以使用 mvn versions:revert 进行撤销。
本文介绍了一些最常用的Maven插件,这里指的&常用&是指经常需要进行配置的插件,事实上我们用Maven的时候很多其它插件也是必须的,例如 默认的编译插件maven-compiler-plugin和默认的打包插件maven-jar-plugin,但因为很少需要对它们进行配置,因此不在 本文讨论范围。了解常用的Maven插件能帮助你事倍功半地完成项目构建任务,反之你就可能会因为经常遇到一些难以解决的问题而感到沮丧。本文介绍的插件 基本能覆盖大部分Maven用户的日常使用需要,如果你真有非常特殊的需求,自行编写一个Maven插件也不是难事,更何况还有这么多开放源代码的插件供 你参考。
本文的这个插件列表并不是一个完整列表,读者有兴趣的话也可以去仔细浏览一下Apache和Codehaus Mojo的Maven插件列表,以的到一个更为全面的认识。最后,在线的Maven仓库搜索引擎如也能帮助你快速找到自己感兴趣的Maven插件。发表于 8个月前
&来自话题&&&·&
摘要:绝大部分Maven用户都称Maven是一个&构建工具&:一个用来把源代码构建成可发布的构件的工具。 构建工程师和项目经理会说Maven是一个更复杂的东西:一个项目管理工具。那么区别是什么?
1.Maven是什么
如何回答这个问题要看你怎么看这个问题。 绝大部分Maven用户都称Maven是一个"构建工具":一个用来把源代码构建成可发布的构件的工具。 构建工程师和项目经理会说Maven是一个更复杂的东西:一个项目管理工具。那么区别是什么? 像Ant这样的构建工具仅仅是关注预处理,编译,打包,测试和分发。像 Maven 这样的一个项目管理工具提供了构建工具所提供功能的超集。 除了提供构建的功能,Maven还可以生成报告,生成Web站点,并且帮助推动工作团 队成员间的交流。
一个更正式的 Apache Maven的定义: Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(ProjectLifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。 当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后 Maven 可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
别让Maven是一个"项目管理"工具的事实吓跑你。如果你只是在找一个构建工具,Maven能做这个工作。
2.maven的好处
1. Maven的库是由开源组织维护,不需要我们再花精力去管第三方库,即使自己维护,也比较方便。
2. Maven对jar包的版本管理有工具上的支持,比如将Release版本和Snapshot版本区分开,有利于SCM管理。
3. Maven是标准,用过的人多,不需要额外培训。
4. Maven的plugin比较多,可以有更多功能,Maven现有体系比较开放,采用的技术相对比较通用和成熟,plugin的机制也可以便于我们扩展更多功能。
5. Maven的库下载是即用即下,不需要实现全部down下来。Maven的插件也是自动升级,可以方便的我们扩展新功能。
6. 可以很方便的与eclipse, IDEA这样的主流的IDE集成
7. 版本管理功能,这里的版本管理不是指第三方库的版本管理,而是项目的版本管理
8. 站点功能:它的出现让我们可以对项目的状态一目了然,可以自动的把项目的状态和各种报表以站点的形式发布到内部网或者外部网,可以随时随地查看项目状态。有很多中报表可以选择,包括,doc生成,代码规范的检查,自动bug检查,单元测试报表,单元测试的代码覆盖率报表。
3.Maven环境搭建
a)Apache Maven下载站点:http://maven.apache.org/download.html
b)maven的安装
把Maven解压到安装目录后,需要设置两个环境变量——PATH和M2_HOME。设置这两个环境变量,假设Maven安装目录是 c:\Program Files\maven-2.0.9,键入下面的命令:
C:\Users\tobrien & set M2_HOME=c:\Program Files\maven-2.0.9
C:\Users\tobrien & set PATH=%PATH%;%M2_HOME%\bin
c)验证Maven安装
当Maven安装完成后,你可以检查一下它是否真得装好了,通过在命令行运行 mvn -v。
如果Maven装好了,你应该能看到类似于下面的输出:
Maven 2.0.9
4.Setting.xml的配置
4.1.settings.xml基本结构
settings.xml对于maven来说相当于全局性的配置,用于所有的项目。在maven2中存在两个settings.xml,一个位于maven2的安装目录conf下面,作为全局性配置。对于团队设置,保持一致的定义是关键,所以maven2/conf下面的settings.xml就作为团队共同的配置文件。保证所有的团队成员都拥有相同的配置。当然对于每个成员,都需要特殊的自定义设置,如用户信息,所以另外一个settings.xml就作为本地配置。默认的位置为:${user.dir}/.m2/settings.xml目录中(${user.dir} 指windows 中的用户目录)。settings.xml基本结构如下:
&settingsxmlns="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/settings-1.0.0.xsd"&
&localRepository/&
&interactiveMode/&
&usePluginRegistry/&
&offline/&
&pluginGroups/&
&servers/&
&mirrors/&
&proxies/&
&profiles/&
&activeProfiles/&
&/settings&
4.2. setting.xml主要配置简介
a)localRepository
表示本地库的保存位置,也就是maven2主要的jar保存位置,默认在${user.dir}/.m2/repository,如果需要另外设置,就换成其他的路径。
如果不想每次编译,都去查找远程中心库,那就设置为true。当然前提是你已经下载了必须的依赖包。
在POM中的 distributionManagement元素定义了开发库。然而,特定的username和pwd不能使用于pom.xml,所以通过此配置来保存server信息
(红色部分是server的主要配置,想要将产物发布到私服,这三项缺一不可。)
&server& &
&id&server001&/id&
&username&my_login&/username&
&password&my_password&/password& &
&privateKey&${usr.home}/.ssh/id_dsa&/privateKey&
&passphrase&some_passphrase&/passphrase&
&filePermissions&664&/filePermissions&
&directoryPermissions&775&/directoryPermissions&
&configuration&&/configuration&
&/servers&
id:server 的id,用于匹配distributionManagement库id,比较重要。
username, password:用于登陆此服务器的用户名和密码
privateKey, passphrase:设置private key,以及passphrase
filePermissions, directoryPermissions:当库文件或者目录创建后,需要使用权限进行访问。
表示镜像库,指定库的镜像,用于增加其他库
&name&PlanetMirror Australia&/name&
&url&/pub/maven2&/url&
&mirrorOf&central&/mirrorOf&
&/mirrors&
id,name:唯一的标志,用于区别镜像
url:镜像的url
mirrorOf:此镜像指向的服务id
此设置,主要用于无法直接访问中心的库用户配置。
&id&myproxy&/id&
&active&true&/active&
&protocol&http&/protocol&
&host&&/host&
&port&8080&/port&
&username&proxyuser&/username&
&password&somepassword&/password&
&nonProxyHosts&*.|ibiblio.org&/nonProxyHosts&
&/proxies&
id:代理的标志
active:是否激活代理
protocol, host, port:protocol://host:port 代理
username, password:用户名和密码
nonProxyHosts: 不需要代理的host
f)Profiles
类似于pom.xml中的profile元素,主要包括activation,repositories,properties和pluginRepositories元素。刚开始接触的时候,可能会比较迷惑,其实这是maven2中比较强大的功能。从字面上来说,就是个性配置。单独定义profile后,并不会生效,需要通过满足条件来激活。repositories 和pluginRepositories定义其他开发库和插件开发库。对于团队来说,肯定有自己的开发库。可以通过此配置来定义。
如下的配置,定义了本地开发库,用于release 发布。
&repositories&
&repository&
&id&repo-local&/id&
&name&Internal 开发库&/name&
&url&http://192.168.0.2:8082/repo-local&/url&
&releases&
&enabled&true&/enabled&
&updatePolicy&never&/updatePolicy&
&checksumPolicy&warn&/checksumPolicy&
&/releases&
&snapshots&
&enabled&false&/enabled&
&/snapshots&
&layout&default&/layout&
&/repository&
&/repositories&
&pluginRepositories&
&pluginRepository&
&id&repo-local&/id&
&name&Internal 开发库&/name&
&url&http://192.168.0.2:8082/repo-local&/url&
&releases&
&enabled&true&/enabled&
&updatePolicy&never&/updatePolicy&
&checksumPolicy&warn&/checksumPolicy&
&/releases&
&snapshots&
&enabled&false&/enabled&
&/snapshots&
&layout&default&/layout&
&/pluginRepository&
&/pluginRepositories&
releases, snapshots:每个产品的版本的Release或者snapshot(注:release和snapshot的区别,release一般是比较稳定的版本,而snapshot基本上不稳定,只是作为快照)。properties maven 的properties作为placeholder值,如ant的properties。包括以下的5种类型值:
env.X,返回当前的环境变量
project.x:返回pom中定义的元素值,如project.version
settings.x:返回settings.xml中定义的元素
java 系统属性:所有经过java.lang.System.getProperties()返回的值
x:用户自己设定的值
Activation用于激活此profile
&activation&
&activeByDefault&false&/activeByDefault&
&jdk&1.5&/jdk&
&name&Windows XP&/name&
&family&Windows&/family&
&arch&x86&/arch&
&version&5.1.2600&/version&
&property&
&name&mavenVersion&/name&
&value&2.0.3&/value&
&/property&
&exists&${basedir}/file2.properties&/exists&
&missing&${basedir}/file1.properties&/missing&
&/activation&
jdk:如果匹配指定的jdk版本,将会激活
os:操作系统
property:maven能检测到相应的属性
file: 用于判断文件是否存在或者不存在
除了使用activation来激活profile,同样可以通过activeProfiles来激活
g)Active Profiles
表示激活的profile,通过profile id来指定。
&activeProfiles&
&activeProfile&env-test&/activeProfile& 指定的profile id
&/activeProfiles&
5.Maven中pom.xml语法简介
5.1.什么是pom
pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。
快速察看:
&modelVersion&4.0.0&/modelVersion&
&!-- The Basics --&
&groupId&...&/groupId&
&artifactId&...&/artifactId&
&version&...&/version&
&packaging&...&/packaging&
&dependencies&...&/dependencies&
&parent&...&/parent&
&dependencyManagement&...&/dependencyManagement&
&modules&...&/modules&
&properties&...&/properties&
&!-- Build Settings --&
&build&...&/build&
&reporting&...&/reporting&
&!-- More Project Information --&
&name&...&/name&
&description&...&/description&
&url&...&/url&
&inceptionYear&...&/inceptionYear&
&licenses&...&/licenses&
&organization&...&/organization&
&developers&...&/developers&
&contributors&...&/contributors&
&!-- Environment Settings --&
&issueManagement&...&/issueManagement&
&ciManagement&...&/ciManagement&
&mailingLists&...&/mailingLists&
&scm&...&/scm&
&prerequisites&...&/prerequisites&
&repositories&...&/repositories&
&pluginRepositories&...&/pluginRepositories&
&distributionManagement&...&/distributionManagement&
&profiles&...&/profiles&
&/project&
5.2.pom.xml主要属性简介
a)groupId:项目或者组织的唯一标志,并且配置时生成的路径也是由此生成,如org.codehaus.mojo生成的相对路径为:/org/codehaus/mojo
b)artifactId: 项目的通用名称
c)version:项目的版本
d)packaging: 打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar
e)build 设置:
主要用于编译设置,包括两个主要的元素,build和report
1)build主要分为两部分,基本元素和扩展元素集合
注意:包括项目build和profile build
&build&...&/build&
&profiles&
&build&...&/build&
&/profile&
&/profiles&
&/project&
&defaultGoal&install&/defaultGoal&
&directory&${basedir}/target&/directory&
&finalName&${artifactId}-${version}&/finalName&
&filter&filters/filter1.properties&/filter&
&/filters&
defaultGoal: 定义默认的目标或者阶段。如install
directory: 编译输出的目录
finalName: 生成最后的文件的样式
filter: 定义过滤,用于替换相应的属性文件,使用maven定义的属性。设置所有placehold的值
资源(resources)
你项目中需要指定的资源。如spring配置文件,log4j.properties
&resources&
&resource&
&targetPath&META-INF/plexus&/targetPath&
&filtering&false&/filtering&
&directory&${basedir}/src/main/plexus&/directory&
&includes&
&include&configuration.xml&/include&
&/includes&
&excludes&
&exclude&**/*.properties&/exclude&
&/excludes&
&/resource&
&/resources&
&testResources&
&/testResources&
&/project&
resources: resource的列表,用于包括所有的资源
targetPath: 指定目标路径,用于放置资源,用于build
filtering: 是否替换资源中的属性placehold
directory: 资源所在的位置
includes: 样式,包括哪些资源
excludes: 排除的资源
testResources: 测试资源列表
在build时,执行的插件,比较有用的部分,如使用jdk 5.0编译等等
&groupId&org.apache.maven.plugins&/groupId&
&artifactId&maven-jar-plugin&/artifactId&
&version&2.0&/version&
&extensions&false&/extensions&
&inherited&true&/inherited&
&configuration&
&classifier&test&/classifier&
&/configuration&
&dependencies&...&/dependencies&
&executions&...&/executions&
&/plugins&
&/project&
extensions: true or false,是否装载插件扩展。默认false
inherited: true or false,是否此插件配置将会应用于poms,那些继承于此的项目
configuration: 指定插件配置
dependencies: 插件需要依赖的包
executions: 用于配置execution目标,一个插件可以有多个目标。
&artifactId&maven-antrun-plugin&/artifactId&
&executions&
&execution&
&id&echodir&/id&
&goal&run&/goal&
&phase&verify&/phase&
&inherited&false&/inherited&
&configuration&
&echo&Build Dir: ${project.build.directory}&/echo&
&/configuration&
&/execution&
&/executions&
id:规定execution 的唯一标志
goals: 表示目标
phase: 表示阶段,目标将会在什么阶段执行
inherited: 和上面的元素一样,设置false maven将会拒绝执行继承给子插件
configuration: 表示此执行的配置属性
pluginManagement:插件管理以同样的方式包括插件元素,用于在特定的项目中配置。所有继承于此项目的子项目都能使用。主要定义插件的共同元素、扩展元素集合。
主要包括以下的元素:
Directories用于设置各种目录结构,如下:
&sourceDirectory&${basedir}/src/main/java&/sourceDirectory&
&scriptSourceDirectory&${basedir}/src/main/scripts&/scriptSourceDirectory&
&testSourceDirectory&${basedir}/src/test/java&/testSourceDirectory&
&outputDirectory&${basedir}/target/classes&/outputDirectory&
&testOutputDirectory&${basedir}/target/test-classes&/testOutputDirectory&
Extensions
表示需要扩展的插件,必须包括进相应的build路径。
&extensions&
&extension&
&groupId&org.apache.maven.wagon&/groupId&
&artifactId&wagon-ftp&/artifactId&
&version&1.0-alpha-3&/version&
&/extension&
&/extensions&
&/project&
用于在site阶段输出报表。特定的maven 插件能输出相应的定制和配置报表。
&reporting&
&outputDirectory&${basedir}/target/site&/outputDirectory&
&artifactId&maven-project-info-reports-plugin&/artifactId&
&reportSets&
&reportSet&&/reportSet&
&/reportSets&
&/plugins&
&/reporting&
Report Sets
用于配置不同的目标,应用于不同的报表
&reporting&
&reportSets&
&reportSet&
&id&sunlink&/id&
&report&javadoc&/report&
&/reports&
&inherited&true&/inherited&
&configuration&
&link&/j2se/1.5.0/docs/api/&/link&
&/configuration&
&/reportSet&
&/reportSets&
&/plugins&
&/reporting&
更多的项目信息
name:项目除了artifactId外,可以定义多个名称
description: 项目描述
url: 项目url
inceptionYear:创始年份
&licenses&
&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&
Organization
配置组织信息
&organization&
&name&Codehaus Mojo&/name&
&url&http://mojo.codehaus.org&/url&
&/organization&
Developers
配置开发者信息
&developers&
&developer&
&id&eric&/id&
&name&Eric&/name&
&email&eredmond@codehaus.org&/email&
&url&http://eric.propellors.net&/url&
&organization&Codehaus&/organization&
&organizationUrl&http://mojo.codehaus.org&/organizationUrl&
&role&architect&/role&
&role&developer&/role&
&timezone&-6&/timezone&
&properties&
&picUrl&/prv4t&/picUrl&
&/properties&
&/developer&
&/developers&
Contributors
&contributors&
&contributor&
&name&Noelle&/name&
&email&some.&/email&
&url&&/url&
&organization&Noelle Marie&/organization&
&organizationUrl&&/organizationUrl&
&role&tester&/role&
&timezone&-5&/timezone&
&properties&
&gtalk&some.&/gtalk&
&/properties&
&/contributor&
&/contributors&
Continuous Integration Management
连续整合管理,基于triggers或者timings
&ciManagement&
&system&continuum&/system&
&url&http://127.0.0.1:8080/continuum&/url&
&notifiers&
&notifier&
&type&mail&/type&
&sendOnError&true&/sendOnError&
&sendOnFailure&true&/sendOnFailure&
&sendOnSuccess&false&/sendOnSuccess&
&sendOnWarning&false&/sendOnWarning&
&configuration&&address&continuum@127.0.0.1&/address&&/configuration&
&/notifier&
&/notifiers&
&/ciManagement&
Mailing Lists
&mailingLists&
&mailingList&
&name&User List&/name&
&subscribe&user-subscribe@127.0.0.1&/subscribe&
&unsubscribe&user-unsubscribe@127.0.0.1&/unsubscribe&
&post&user@127.0.0.1&/post&
&archive&http://127.0.0.1/user/&/archive&
&otherArchives&
&otherArchive&/base/1/127.0.0.1&/otherArchive&
&/otherArchives&
&/mailingList&
&/mailingLists&
&软件配置管理,如cvs 和svn
&connection&scm:svn:http://127.0.0.1/svn/my-project&/connection&
&developerConnection&scm:svn:https://127.0.0.1/svn/my-project&/developerConnection&
&tag&HEAD&/tag&
&url&http://127.0.0.1/websvn/my-project&/url&
Repositories配置同setting.xml中的开发库
Plugin Repositories配置同 repositories
Distribution Management
用于配置分发管理,配置相应的产品发布信息,主要用于发布,在执行mvn deploy后表示要发布的位置
1 配置到文件系统
&distributionManagement&
&repository&
&id&proficio-repository&/id&
&name&Proficio Repository&/name&
&url&file://${basedir}/target/deploy&/url&
&/repository&
&/distributionManagement&
2 使用ssh2配置
&distributionManagement&
&repository&
&id&proficio-repository&/id&
&name&Proficio Repository&/name&
&url&scp:///deploy&/url&
&/repository&
&/distributionManagement&
3 使用sftp配置
&distributionManagement&
&repository&
&id&proficio-repository&/id&
&name&Proficio Repository&/name&
&url&s/deploy&/url&
&/repository&
&/distributionManagement&
4 使用外在的ssh配置
编译扩展用于指定使用wagon外在ssh提供,用于提供你的文件到相应的远程服务器。
&distributionManagement&
&repository&
&id&proficio-repository&/id&
&name&Proficio Repository&/name&
&url&scpexe:///deploy&/url&
&/repository&
&/distributionManagement&
&extensions&
&extension&
&groupId&org.apache.maven.wagon&/groupId&
&artifactId&wagon-ssh-external&/artifactId&
&version&1.0-alpha-6&/version&
&/extension&
&/extensions&
5 使用ftp配置
&distributionManagement&
&repository&
&id&proficio-repository&/id&
&name&Proficio Repository&/name&
&url&/deploy&/url&
&/repository&
&/distributionManagement&
&extensions&
&extension&
&groupId&org.apache.maven.wagon&/groupId&
&artifactId&wagon-ftp&/artifactId&
&version&1.0-alpha-6&/version&
&/extension&
&/extensions&
repository 对应于你的开发库,用户信息通过settings.xml中的server取得
类似于settings.xml中的profiles,增加了几个元素,如下的样式:
&profiles&
&id&test&/id&
&activation&...&/activation&
&build&...&/build&
&modules&...&/modules&
&repositories&...&/repositories&
&pluginRepositories&...&/pluginRepositories&
&dependencies&...&/dependencies&
&reporting&...&/reporting&
&dependencyManagement&...&/dependencyManagement&
&distributionManagement&...&/distributionManagement&
&/profile&
&/profiles&
5.3.POM间的关系
Pom间的关系主要为依赖,继承,合成
a)依赖关系
&dependencies&
&dependency&
&groupId&junit&/groupId&
&artifactId&junit&/artifactId&
&version&4.0&/version&
&type&jar&/type&
&scope&test&/scope&
&optional&true&/optional&
&/dependency&
&/dependencies&
groupId, artifactId, version:描述了依赖的项目唯一标志
type:相应的依赖产品包形式,如jar,war
scope:用于限制相应的依赖范围,包括以下的几种变量:
& & &compile :缺省值,适用于所有阶段,会随着项目一起发布
& & &provided:provided,类似compile,期望JDK、容器或使用者会提供这个依赖
& & &runtime:只在运行时使用,如JDBC驱动,适用运行和测试阶段
& & &test:只在测试时使用,用于编译和运行测试代码。不会随项目发布
& & &system:类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它
optional: 标注可选,当项目自身也是依赖时。用于连续依赖时使用
独占性:外在告诉maven你只包括指定的项目,不包括相关的依赖。此因素主要用于解决版本冲突问题
&dependencies&
&dependency&
&groupId&org.apache.maven&/groupId&
&artifactId&maven-embedder&/artifactId&
&version&2.0&/version&
&exclusions&
&exclusion&
&groupId&org.apache.maven&/groupId&
&artifactId&maven-core&/artifactId&
&/exclusion&
&/exclusions&
&/dependency&
表示项目maven-embedder需要项目maven-core,但我们不想引用maven-core
b)继承关系
另一个强大的变化,maven带来的是项目继承。主要的设置:
&modelVersion&4.0.0&/modelVersion&
&groupId&org.codehaus.mojo&/groupId&
&artifactId&my-parent&/artifactId&
&version&2.0&/version&
&packaging&pom&/packaging&
父项目packaging 类型必须是pom,我们需要增加相应的值给父pom,用于子项目继承。
&modelVersion&4.0.0&/modelVersion&
&groupId&org.codehaus.mojo&/groupId&
&artifactId&my-parent&/artifactId&
&version&2.0&/version&
&relativePath&../my-parent&/relativePath&
&artifactId&my-project&/artifactId&
&/project&
relativePath可以不需要,用于指明parent的目录,用于快速查询。
dependencyManagement:
用于父项目配置共同的依赖关系,主要配置依赖包相同因素,如版本,scope。
c)合成关系(或者多个模块)
一个项目有多个模块,也叫做多重模块,或者合成项目。
如下的定义:
&modelVersion&4.0.0&/modelVersion&
&groupId&org.codehaus.mojo&/groupId&
&artifactId&my-parent&/artifactId&
&version&2.0&/version&
&module&my-project1&module&
&module&my-project2&module&
&/modules&
&/project&
后方可回复
如果没有账号可以
一个帐号。
回答数&0&·&文章数&3

我要回帖

更多关于 maven release 的文章

 

随机推荐