- 浏览: 37781 次
- 性别:
- 来自: 厦门
文章分类
最新评论
-
liubey:
xly_971223 写道maven这东西搞得有点复杂,个人认 ...
人生无法避免之错------分析Maven的依赖 -
xly_971223:
maven这东西搞得有点复杂,个人认为不会长久
人生无法避免之错------分析Maven的依赖 -
303178394:
好的。谢谢
碎片化的年代-----MAVEN的部署和简单介绍 -
yixiandave:
xml可以用iteye的code元件的。例如
<?xml ...
碎片化的年代-----MAVEN的部署和简单介绍 -
gxz1989611:
把错别字改一改,代码格式调整下吧。看的不习惯。
碎片化的年代-----MAVEN的部署和简单介绍
今天写的比较多,有时间在整理格式,这格式在logdown排版还行。ITeye没去重排,有兴趣可以去看看我的Logdownhttp://yuezaixz.logdown.com/posts/165674-not-proud-of-maven-life-cycle-as-well-as-those-in-the-plugin-details。
最近甚是苦恼,出入项目管理,就遇到如此大的问题:进度紧、资源不足、职能型组织跨部门难协调、产品需求和设计阶段(我也是在需求和设计后才接受该项目)不足等,但这些都是环境的问题,管理这些问题我觉得都是有价值有意义的,我觉得最大的问题还在于人,这些人又包括下面的人和上面的人。
[size=20px;]团队成员的工作方式让我觉得成天在做无用功[/size]
功能实现有漏洞这些都是正常的事情,问题是这问题完全无法用,为什么做完不点一点,自己测试下?如果这还算没那么离谱,那界面上一片混乱,完全没有按照美工的静态页面去实现,界面总是所见即所得的吧,那我只能理解这个人做事遇到问题选择性忽视,做完功能不愿意自测也是因为怕遇到问题的掩耳盗铃行为。
还有就是经常多次询问是否已经提交代码要开始构建项目后,发现还有代码未提交。再然后数据库脚本的更新包也能混杂一些错误的符号导致脚本无法运行,再再然后,提交的页面经常多一个标签少一个标签的导致IE6下会频频出问题,再再再然后……
总之,就是在不断的引入混乱,增加了我无数时间在检查问题上,而且提出的问题修改后问题会不断地重现,要不就引入新的问题。
还有就是加班问题上,引入如此多的混乱,安排的任务都没完成也不愿意加班。被我强留下来后,竟然趁我吃饭的时候跑路了,这点责任心我完全没法接受了。
我知道团队建设是需要经历震荡期的。技术问题是可以弥补的,但是,心态问题、责任心问题我觉得都不是那么好改正的。
他们或许也有些工作的不开心,因为没有需求和设计,缺少美工支持,计划总在变,这些都会影响工作的积极性。开始我也会烦恼这些,但是后来我觉得这些环境因素都是可以克服的,也是挑战。但我完全没有看到他们在困难面前的改变。而我就会选择放弃午休,甚至午饭后晚饭后都立马工作,并且连续一个月不间歇加班。而实际是,加班总是我一个人。
[size=20px;]领导希望做好,也的确重视,但是却不愿意投入[/size]
我是一个热衷技术的人,如果领导安排本年任务是完成该项目,于是兢兢业业地安排年度计划,定方案,再编码,而领导频繁的因为形势变化,改变工作内容和计划。那我付出一年劳动,也挣了一年薪水,但我的工作真的有价值吗?真的做的开心吗?(PS.入职一年未涨过薪水,原因是公司没有给转正一年的职工涨薪的例子。其实薪水和我两年前是一个水平,只是觉得有价值有挑战才继续做)
-------------------------------------分割线-------------------------------------------
[size=20px;]生命周期[/size]
[size=16px;]何为生命周期[/size]
开发人员每天都项目进行清理、编译、测试以及部署就是项目构建的生命周期。
Maven的生命周期就是为了所有的构建过程进行抽象和同意。
Maven的生命周期是抽象的,相当于设计模式的模板模式。只是定义整体的算法,生命周期中真正的工作还是由插件来完成的。
插件绑定又分为内置绑定和默认绑定。
[size=16px;]三套生命周期[/size]
Maven拥有三套相互独立的生命周期,分别为clean、default、site。
Clean是为了清理项目;
Default是构建项目;
Site是为了建立项目站点。
三套生命周期是相互独立的,例如调用clean生命周期的某个阶段(之后有详细说阶段),不会影响对default生命周期产生任何影响。
[size=16px;]生命周期的阶段[/size]
每个生命周期都包含一些阶段(phase),这些阶段是有顺序的,后面的依赖前面的阶段。以clean生命周期为例,包含的阶段有pre-clean、clean和post-clean。当用户调用clean,则会调用pre-clean和clean阶段。
[size=16px;]生命周期以及阶段罗列[/size]
Clean生命周期一共包含了三个阶段
pre-clean 执行一些需要在clean之前完成的工作
clean 移除所有上一次构建生成的文件
post-clean 执行一些需要在clean之后立刻完成的工作
Default生命周期的各个阶段
绝大多数重要的阶段都在该周期中:
validate
generate-sources
process-sources
generate-resources
process-resources 复制并处理资源文件,至目标目录,准备打包。
compile 编译项目的源代码。
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources 复制并处理资源文件,至目标测试目录。
test-compile 编译测试源代码。
process-test-classes
test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
prepare-package
package 接受编译好的代码,打包成可发布的格式,如 JAR 。
pre-integration-test
integration-test
post-integration-test
verify
install 将包安装至本地仓库,以让其它项目依赖。
deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享。
Site生命周期的各个阶段
pre-site 执行一些需要在生成站点文档之前完成的工作
site 生成项目的站点文档
post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
site-deploy 将生成的站点文档部署到特定的服务器上
参考资料
详细一刻参考Maven 官网中的介绍页面的[Lifecycle Reference](http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html).章节部分的内容。
[size=16px;]命令行[/size]
### mvn clean
执行clean周期的clean阶段,实际执行的阶段有clean周期的pre-clean和clean阶段。
### mvn test
调用default生命周期的test阶段。实际执行default生命周期知道test的所有阶段。
### mvn clean install
执行clean生命周期的pre-clean和clean阶段,以及default直到install的所有阶段。
### mvn clean deploy site-deploy
执行clean生命周期的pre-clean和clean阶段,以及default的所有阶段,deploy生命周期的所有阶段。
[size=20px;]插件[/size]
[size=16px;]插件的目标[/size]
插件本身为了复用代码,往往完成了多个任务。例如maven-dependency-plugin插件就能够分析项目依赖、列出依赖树、分析依赖来源、列出所有已解析依赖等等。这些功能里面有很多代码其实是复用的,所以为了复用,他们集成为了一个插件。
因此,每个插件的目标就是一个插件的功能。dependency:analyze的目标就是analyze,功能就是分析依赖。dependency:tree的目标tree的功能就是列出依赖树。
[size=16px;]写法[/size]
dependency:tree是一种通用的写法,冒号前面是插件的前缀,后面是插件的目标。例如还有compile:compile就是maven-compiler-plugin的compile目标。
[size=16px;]插件的绑定[/size]
Maven的生命周期与插件相互绑定,用以完成实际的构建。例如项目编译这一任务就是default生命周期compile阶段做的事情,而maven-compile-plugin插件的compile目标就完成该功能。因此,将他们绑定就能实现项目的编译目标。
插件的绑定在之前1.1章节已经说过了,分为内置绑定和自定义绑定。
[size=16px;]内置绑定[/size]
内置绑定是预设的,不用用户配置。Maven已经为完成构建的主要功能,已经在生命周期的各个阶段上绑定了很多插件。例如clean生命周期的clean阶段就与maven-clean-plugin的clean目标绑定。
有一些比较特殊的,比如default生命周期的package阶段,他默认是有maven-jar-plugin:jar 绑定。
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package jar:jar
install install:install
deploy deploy:deploy
[size=16px;]参考资料[/size]
具体的内容,也可以在[Setting Up Your Project to Use the Build Lifecycle](http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html) 章节中看到。
命令输出
也可以从执行命令时候,看Maven控制台的输出,也可以知道具体阶段执行了那些插件目标。
自定义插件
用户自己通过配置,将插件目标与阶段绑定。具体配置如下代码:
org.codehaus.modellomodello-maven-plugin1.4modello-javaverifyjava
groupIdle、artifactId、version为插件的依赖坐标。
Executions下每个execution子元素都可以用来配置执行一个任务。
例子中配置了一个id为modello-java,配置phase配置绑定在了verify生命周期阶段上,在通过goals中配置的指定目标来执行。
运行mvn verify就能看到执行了插件。
### 查询插件绑定
可以查询自定应绑定的插件的详细信息。
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plug
in:2.1.1 –Ddetail 命令后,显示
source:test-jar-no-fork Description: This goal bundles all the test sources into a jar archive. This goal functions the same as the test-jar goal but does not fork the build, and is suitable for attaching to the build lifecycle. Implementation: org.apache.maven.plugin.source.TestSourceJarNoForkMojo Language: java Bound to phase: package Available parameters: archive The archive configuration to use. See Maven Archiver Reference.
Bound to phase: package表示插件目标默认绑定的生命周期阶段为package。
[size=16px;]插件配置[/size]
命令行插件配置
运行命令时候,加上-D(java自带的参数,其功能是通过命令行设置一个java系统属性),实现了插件参数的配置。
例如,maven-surefire-plugin提供了一个maven.test.skip的参数,当值为true的时候,就会跳过执行测试。于是
D:\workspace\hello-world>mvn install -Dmaven.test.skip=true
就会跳过测试阶段。
控制台输出信息含有一下信息。
[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ hello-world ---
[INFO] Tests are skipped.
POM中插件全局配置
不是所有参数都可以从命令行执行,有些参数在项目创建到项目发布也都不会改变,就可以在pom文件中一次性配置。比如java 1.5这个参数。
...
org.apache.maven.plugins
maven-jar-plugin
2.1
1.5 source >
1.5 target >
这样,不管绑定到compile阶段,还是绑定到test阶段,都可以用到该配置,急于java1.5进行编译。
POM中插件任务配置
以下配置可以让Maven在绑定的阶段执行任务。也可以绑定多个execetuion,让Maven在不同的生命周期执行不同的任务。
下例为ant脚本插件,用于执行ant命令,输出正在创建的目录,用于提示信息。
maven-antrun-plugin
echodir
run
verify
false
Build Dir: ${project.build.directory}
注意:inherited: 是否此插件配置将会应用于poms,那些继承于此的项目.
[size=16px;]用命令获取插件描述信息[/size]
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plug
in:2.1.1 命令后,显示插件描述信息。
```
D:\workspace\hello-world>mvn help:describe -Dplugin=org.apache.maven
.plugins:maven-compiler-plugin:2.1
Name: Maven Compiler Plugin
Description: The Compiler Plugin is used to compile the sour
project.
Group Id: org.apache.maven.plugins
Artifact Id: maven-compiler-plugin
Version: 2.1
Goal Prefix: compiler
This plugin has 3 goals:
compiler:compile
Description: Compiles application sources
compiler:help
Description: Display help information on maven-compiler-pl
Call
mvn compiler:help -Ddetail=true -Dgoal=
to display parameter details.
compiler:testCompile
Description: Compiles application test sources.
For more information, run 'mvn help:describe [...] -Ddetail'
```
描述了插件的坐标、目标。还可以通过最后加-Ddetail参数来获取更多的信息。
[size=16px;]命令行调用插件[/size]
例如mvn dependency:tree 。
[size=16px;]插件解析机制[/size]
插件仓库
我们使用Maven插件的目标的时候都是利用他的前缀(简写),一旦执行命令出问题了,比较难定位具体是哪个插件运行出错的。在此咱们一起来看看它的插件插件机制。为何将仓库的依赖解析和插件解析放在一起呢,因为他们确实有相似的地方。插件的组件也是基于坐标存在于Maven库中,需要的时候,从本地仓库需要相关插件,不存在,从远程仓库去找,找到后下载到本地。
```
•
•
• central
• Maven plugin
• htpp://repo1.maven.org/maven2
• default
•
• true
•
•
• false
•
•
•
```
### 插件默认的groupId
插件配置可以省略groupId,默认为Maven的官方插件。
例如
maven-antrun-plugin
echodir
run
verify
false
Build Dir: ${project.build.directory}
解析插件版本
版本也可以省略,默认会去核心POM中先查看版本,如果不存在就会去中央仓库查看maven-metadata.xml,找到插件的最近发布版本来解析。
[size=16px;]插件的前缀[/size]
会去查插件库元数据,里面有插件的前缀(prefix标签下)。
如果各个插件的groupid下的元数据配置文件都不含有前缀,则会报错。
[size=20px;]总结[/size]
主要内容为生命周期和插件,其中对于插件的前缀的查询,还需要进一步理解下。
发表评论
-
暂停更新ITEYE博客
2014-01-02 22:36 349最近工作比较忙,暂时就不更新ITEYE这边的博客。LOGDOW ... -
元总结---express框架之模板引擎、片段视图、视图助手
2013-12-27 07:45 2521Logdown博文地址 #元总结 ... -
摸着石头过河---nodejs的express框架
2013-12-23 10:24 1212logdown博文链接 今天博 ... -
学会提问---nodejs初体验
2013-12-20 07:45 967惯例,先上logdown地址 ... -
Just be fun ---centos6安装nodejs0.9.0全过程
2013-12-19 08:03 1099logdown地址 =。。= 不是 ... -
亡羊补牢---Maven的约定和反应堆
2013-12-17 07:42 1751logdown博文地址 不得不说,时间过得还真挺快的,两个月 ... -
不得意后的些许收获-----Maven的聚合和集成
2013-12-13 08:38 1539LogDown发布的地址 上篇 ... -
人生无法避免之错------分析Maven的依赖
2013-11-29 07:48 5688上一个Sprint总结会中,组内有人提出很多需求为什么会变化, ... -
碎片化信息的影响---Maven注意事项
2013-11-27 07:49 1312追求获取信息的速度和效率本来就是网络持之以恒的使命,有相当数量 ... -
碎片化的年代-----MAVEN的部署和简单介绍
2013-11-26 07:49 1439现在就是一个碎片化的年代——信息的碎片化、浏览器的碎片化、安卓 ... -
思而不学则殆则殆----Java程序员学Python学习笔记(三)
2013-11-22 07:51 983项管考试结束已经10来 ... -
编程语言的黄金时代-------系统集成项目管理工程师复习(四,常错题目纠正)
2013-10-26 10:05 1380好久没写博文了,整个 ... -
财富的不平等----系统集成项目管理工程师计算题复习(三)信息技术基础知识
2013-10-17 07:24 883这篇文章其实是写给自己看的,自己最近的确是对当前薪资很不满意, ... -
浅谈考核----系统集成项目管理工程师成本管理计算题复习
2013-10-14 07:28 1532齐威王召即墨大夫 ... -
傲慢与谦卑----系统集成项目管理工程师时间管理计算题复习
2013-10-12 06:49 1052天理路上甚宽,稍 ... -
了不起的盖茨比读后感---Java程序员学Python学习笔记(二)
2013-09-30 07:28 1637还是从logdown搬过来的,搬的时候稍微排版了下。今 ... -
沉默成本,跪在坚持----Java程序员学Python学习笔记(一)
2013-09-27 07:19 3095搬运工又来了,从自己的logdown博客搬东西过来了。 ... -
在我看来如何学习编程
2013-09-07 08:34 1096最近都在logdown写博文, ... -
Java面对对象类设计随笔
2013-08-23 07:06 2493想要做好设计很不 ... -
如果你觉得现在的你做的不好,那就请改变现在的状况
2013-08-20 06:59 1429最近看了一些博文(每天工作四小时),一些书(浪潮之巅) ...
相关推荐
本项目是基于Java的smart-doc-maven-plugin官方maven插件设计源码,包含43个文件,其中包括27个Java源文件、7个Markdown文档、2个JSON文件、1个gitignore文件、1个LICENSE文件、1个NOTICE文件、1个PNG图片文件、1个...
首先,你需要下载`apache-maven-3.6.0`压缩包。这个压缩包包含了Maven运行所需的所有文件,包括bin目录下的可执行脚本,lib目录中的依赖库,以及conf目录下的配置文件如settings.xml。下载完成后,解压到你选择的...
`maven-compiler-plugin-3.8.0-source-release` 是 Maven 生态系统中不可或缺的一部分,它提供了可靠的源代码编译功能,使得开发者能够专注于编写代码,而无需关心构建过程的细节。通过理解 Maven 插件的工作原理和...
mybatis-plus-generator-maven-plugin-v1.0.0依赖的pom.xml,用于mybatis-plus-generator-maven-plugin-1.0.0.jar本地仓库上传时依赖使用
这是因为 tomcat8-maven-plugin 插件并不是 Maven 的标准插件。 解决方法是使用 Maven 的插件仓库机制。我们可以在 POM 文件中添加以下内容: ``` <id>alfresco-public <url>...
为了在项目中快捷方便的代码生成,将mybatis-plus-generator封装为了一个maven的插件`mybatis-plus-generator-maven-plugin。使用文档参考:https://blog.csdn.net/xiweiller/article/details/103072165
打开并输入:path= D:/Development/eclipse-JavaEE/eclipse/plugins/maven(请参照上面对应你的 maven 插件) 4. 重启 eclipse,OK,完成了,启动后你打开Window ---> Preferences 会发现一个多了一个选项Maven...
exec-maven-plugin是Maven生态系统中的一个插件,它允许用户在Maven构建过程中执行外部命令或脚本。这使得Maven项目可以集成更多的自定义操作,比如运行特定的脚本、调用系统命令等。本文将详细介绍exec-maven-...
在“apache-maven-3.6.2”这个压缩包中,我们获得了Maven 3.6.2的完整版本。这个版本是Maven的一个稳定版本,包含了执行构建、解析依赖、生成文档以及执行各种构建任务所需的所有组件。 Maven 的工作流程主要围绕...
4. **Maven集成**:作为Maven插件,graphql-java-codegen-maven-plugin可以在项目的生命周期中的特定阶段执行,例如在编译前或编译后。你可以配置插件在每次构建时自动运行,确保生成的代码始终与schema保持同步。 ...
插件通过目标(Goals)来实现特定的任务,这些目标可以单独调用,也可以在生命周期的不同阶段中自动执行。 在压缩包内,我们可能会找到以下文件和目录: 1. `bin/`:包含了Maven的可执行脚本,如`mvn`和`mvn.cmd`...
apache-maven-3.5.2-bin.zip (maven的插件包,用于eclipse、myeclipse、IDEA) 配置参考博客:https://blog.csdn.net/chenchunlin526
Maven是Java开发中广泛使用的项目管理和综合工具,它通过定义一套标准的生命周期和构建过程,简化了项目的构建、依赖管理以及文档生成等工作。在Maven的世界里,理解生命周期和插件的概念是至关重要的。 ### 1. ...
maven-tomcat-plugin让maven与tomcat配合得很好。它可以把应用部署到Tomcat服务器,也可以把tomcat作为内嵌服务器启动,就像jetty一样。 使用JPDA启动tomcat的远程调试功能。这样就能与eclipse配合起来,轻松地实现...
### Maven的生命周期和插件详解 #### Maven生命周期概述 Maven是一个项目管理和综合工具,它通过一系列预定义的任务和明确的构建生命周期来管理项目的构建、报告和文档。Maven的核心特性之一是其生命周期...
- **构建生命周期**:Maven定义了一套标准的构建生命周期,包括编译、测试、打包、集成测试、验证、部署等阶段。 - **插件系统**:Maven通过插件执行各种任务,如编译源代码、运行测试、创建文档、打包应用等。 -...
例如,在clean生命周期中,clean阶段会调用maven-clean-plugin插件的clean目标来执行清理工作。默认情况下,每个阶段都绑定有相应的默认插件目标,但是Maven还提供了强大的插件配置能力,允许用户自定义插件的行为,...
maven-aether-provider-3.2.1-sources.jar maven-antrun-plugin-1.3.jar maven-archiver-2.2.jar maven-artifact-3.2.1-sources.jar maven-assembly-plugin-2.2-beta-5.jar maven-bundle-plugin-1.0.0.jar maven-...
综上所述,"maven-source-without-ratCheck"是一个解决Maven构建过程中由于Rat插件引起的许可检查问题的方法,通过插件管理来规避这一问题,保证项目的正常构建。对于开源项目而言,正确处理许可信息是至关重要的,...