、命令
注意如下命令必须在pom.xml文件所在的目录中运行。 java
说明:"-D<name>=<value>"这种格式不是Maven定义的,它实际上是Java用来设置系统属性的方式,能够经过“java -help”查看Java的解释。Maven的bin目录下的脚本文件仅仅是把属性传入Java而已。
2、运行web项目(mvn jetty:run)
使用maven的一个方便之处是可使用Jetty Plugin来运行web项目。只要maven jetty:run就能够把web项目跑起来了。把Maven做为外部工具来用。
在Run->Externel Tools->Open Externel Tools Dialog.. 打开配置对话框,选中左边的Program节点,右键选择New而后再右边的配置里面输入Name信息,在Main tab下的Location选择你maven可执行文件的全路径(eg:/home/rory/apps/apache-maven-2.0.9/bin/mvn.bat),Working Directory选择你的maven项目(eg:${workspace_loc:/guice-example}),Arguments里输入mvn的命令参数jetty:run。
补充:为eclise添加一个变量:从菜单条,选择Window>Preferences,选择Run/Debug>String Substitution,增长一个新的变量,好比maven_exec,value为mvn.bat的路径。当你设置新的外部装载器(丛菜单条,选择Run>External Tools,选择Program),你能够在位置字段引用刚才定义的maven_exec。
3、m2eclipse插件
m2eclipse插件为Eclipse提供了Maven的集成。m2Eclipse同时也以挂钩的方式链接了Subclipse插件和Mylyn插件特性。Subclipse插件为m2eclipse提供了与Subversion仓库交互的能力,Mylyn插件为m2eclipse提供了与任务集中接口交互的能力,该接口能跟踪开发过程的上下文。
要安装m2Eclipse插件,你须要符合一些先决条件。你须要运行Eclipse 3.2或更高版本,JDK 1.4或更高版本,你须要确认Eclipse是在JDK上运行而不是JRE。在你有了Eclipse和兼容的JDK以后,你须要安装两个Eclipse插件:Subclipse和Mylyn。
1.安装 Subclipse
Subclipse 1.2: http://subclipse.tigris.org/update_1.2.x
2. 安装 Mylyn
要安装集成了JIRA支持的Mylyn,添加Mylyn Extras的Eclipse更新URL,若是你的组织使用Atlassian's JIRA来跟踪问题,你会须要这么作。使用下面的更新站点来安装Mylyn:
Mylyn (Eclipse 3.3): http://download.eclipse.org/tools/mylyn/update/e3.3
Mylyn (Eclipse 3.4): http://download.eclipse.org/tools/mylyn/update/e3.4
Mylyn Extras (JIRA 支持): http://download.eclipse.org/tools/mylyn/update/extras
3.安装 AspectJ Tools Platform (AJDT)
若是你正在安装m2eclipse的0.9.4版本,你可能同时也想要安装Web Tools Platform (WTP) 和 AspectJ Development Tools (AJDT)。使用以下的eclipse更新URL以安装AJDT。
AJDT (Eclipse 3.3): http://download.eclipse.org/tools/ajdt/33/update
AJDT (Eclipse 3.4): http://download.eclipse.org/tools/ajdt/34/dev/update
4.安装 Web Tools Platform (WTP)
要安装Web Tools Platform (WTP)。使用以下的eclipse更新URL,或者直接在Discovery站点中寻找Web Tool Project,该站点应该已经在你的Eclipse远程更新站点列表中了。
WTP: http://download.eclipse.org/webtools/updates/
5.安装 m2eclipse
一旦你已经安装好这些先决条件,你从以下的Eclipse更新URL安装m2eclipse插件:
m2eclipse 插件: http://m2eclipse.sonatype.org/update/
若是你想要安装最新的该插件的快照开发版本,你应该使用以下的开发更新URL而非以前的URL。
m2eclipse 插件 (开发快照): http://m2eclipse.sonatype.org/update-dev/
说明:若是用update方式装最新版本,则不须要进行2/3/4步的操做了,在第5步上起完成。
提示:
(1)使用 -Dmaven.repo.local=xxx 来为每一个构建定义惟一的本地仓库。
(2)开启 -Dsurefire.useFile=false 。能让surefire打印测试失败到标准输出。在settings.xml中开启<properties><surefire.useFile>true</surefire.useFile></properties>。
(3)在构建中开启 -B(batch,批处理)模式。这会让日志变短,由于这避免了依赖下载过程的日志。这也能确保构建不会由于等待用户输入而挂起。
(4)开启 -e 能让Maven在遇到构建异常的时候产生彻底的堆栈跟踪信息。这让咱们更容易根据构建失败结构的日志或者email中理解问题,而不用从新构建一次。
(5)开启 -U 让Maven老是最检查新的snapshot。该选项一样也能够在CI系统的setting.xml中开启。
(6)dependency的scope参数说明:
--compile:默认值。代表是全部任务所需的资源
--test:运行全部的测试用例时所需资源
--runtime:代表是运行时所需资源
--provided:JDK部分或应用服务器的classpath所需的资源
--system:相似provided,须要显式提供包含依赖的jar,Maven不会在Repository中查找它
(7)配置编译选项/Surefire忽略单元测试失败 web
4、Maven的生命周期 (Lifecycle) sql
5、Maven坐标 (Coordinates)
Archetype插件经过名字为pom.xml的文件建立了一个项目。这就是项目对象模型(POM),一个项目的声明性描述。当Maven运行一个目标的时候,每一个目标都会访问定义在项目POM里的信息。Maven坐标定义了一组标识,它们能够用来惟一标识一个项目,一个依赖,或者Maven POM里的一个插件。
groupId, artifactId, version和packaging。这些组合的标识符拼成了一个项目的坐标,就像任何其它的坐标系统,一个Maven坐标是一个地址,即“空间”里的某个点:从通常到特殊。当一个项目经过依赖,插件或者父项目引用和另一个项目关联的时候,Maven经过坐标来精肯定位一个项目。 apache
说明:
(1)项目的打包格式也是Maven坐标的重要组成部分,可是它不是项目惟一标识符的一个部分。一个项目的groupId:artifactId:version使之成为一个独一无二的项目;你不能同时有一个拥有一样的groupId, artifactId和version标识的项目。
(2)Maven插件和目标 (Plugins and Goals) :一个Maven插件是一个单个或者多个目标的集合。一个目标是一个明确的任务,它能够做为单独的目标运行,或者做为一个大的构建的一部分和其它目标一块儿运行。一个目标是Maven中的一个“工做单元(unit of work)”。
经常用速记符号:pluginId:goalId。例如,当提到Archetype插件的create目标的时候,咱们写成archetype:create。
6、配置Maven的本地仓库目录
一、命令行直接加参数的方式
maven [cmd] -Dmaven.home.local=D:/MavenRepo/.maven
二、在用户HOME目录下建立build.properties文件,内容为,注意/或者用\\,用\不行的。
maven.home.local=D:/MavenRepo/.maven
build.properties也能够放在项目路径下
三、修改%MAVEN_HOME%\lib\maven.jar里的defaults.properties文件,将
maven.home.local = ${user.home}/.maven
修改成
maven.home.local = D:/MavenRepo/.maven
四、项目里的project.properies里加上一句
maven.repo.local=D:/MavenRepo/.maven
7、优化POM
1.上移共同的依赖至dependencyManagement
若是多于一个项目依赖于一个特定的依赖,你能够在dependencyManagement中列出这个依赖。父POM包含一个版本和一组排除配置,全部的子POM须要使用groupId和artifactId引用这个依赖。若是依赖已经在dependencyManagement中列出,子项目能够忽略版本和排除配置。
2.为兄弟项目使用内置的项目version和groupId
使用{project.version}和${project.groupId}来引用兄弟项目。兄弟项目基本上一直共享一样的groupId,也基本上一直共享一样的发布版本。使用${project.version}能够帮你避免前面提到的兄弟版本不一致问题。
8、优化插件
大部分复杂的Maven多模块项目倾向于在顶层POM中定义全部的版本。这个顶层POM就成了影响整个项目的更改焦点。将版本号当作是Java类中的字符串字面量,若是你常常重复一个字面量,你可能会将它定义为一个变量,当它须要变化的时候,你就只须要在一个地方更改它。而且能够在顶层POM中管理(pluginManagement)插件配置,就像咱们在顶层POM中使用dependencyManagement片断管理依赖同样。如: 服务器
Maven Dependency插件可以帮助你发现对于依赖的直接引用。app
dependency:tree目标,该目标会列出项目中全部的直接和传递性依赖。dom
附:Debugging with the Maven Jetty Plugin in Eclipse
Step 1
Go to the Run/External Tools/External Tools ..." menu item on the "Run" menu bar. Select "Program" and click the "New" button. On the "Main" tab, fill in the "Location:" as the full path to your "mvn" executable. For the "Working Directory:" select the workspace that matches your webapp. For "Arguments:" add jetty:run.
Move to the "Environment" tab and click the "New" button to add a new variable named MAVEN_OPTS with the value:
-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=y
If you supply suspend=n instead of suspend=y you can start immediately without running the debugger and launch the debugger at anytime you really wish to debug.
Step 2
Then, pull up the "Run/Debug/Debug ..." menu item and select "Remote Java Application" and click the "New" button. Fill in the dialog by selecting your webapp project for the "Project:" field, and ensure you are using the same port number as you specified in the address= property above.
Now all you need to do is to Run/External Tools and select the name of the maven tool setup you created in step 1 to start the plugin and then Run/Debug and select the name of the debug setup you setup in step2.
From instructions provided by Rolf Strijdhorst on the Maven mailing list
Stopping Jetty
In order to stop the jetty server the "Allow termination of remote VM" should be checked in debug dialog in Step 2. When you have the jetty server running and the debugger connected you can switch to the debug perspective. In the debug view, right click on the Java HotSpot(TM) Client VM[localhost:4000] and chose terminate. This will stop the debugger and the jetty server.eclipse