maven运行的一些事

、命令 
   注意以下命令必须在pom.xml文件所在的目录中运行。 

  1. --mvn help:effective-pom 查看项目的有效POM
  2. --mvn test:运行应用程序中的单元测试
  3. --mvn package:依据项目生成jar文件
  4. --mvn install:在本地Repository中安装jar
  5. --mvn site:生成项目相关信息的网站
  6. --mvn clean:清除目标目录中的生成结果
  7. --mvn eclipse:eclipse:生成Eclipse项目文件
  8. --mvn compile:编译相应的java文件
  9. --mvn test-compile:只编译test
  10. --mvn archetype:create 创建Maven项目
  11. --mvn -Dplugin=groupId:artifactId help:describe 查看一个插件所用的版本
  12. --mvn -Dmaven.test.skip=true 忽略编译test
  13. --mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging> -DgeneratePom=true maven的一个插件,安装到本地库


说明:"-D<name>=<value>"这种格式不是Maven定义的,它其实是Java用来设置系统属性的方式,可以通过“java -help”查看Java的解释。Maven的bin目录下的脚本文件仅仅是把属性传入Java而已。 
二、运行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。 
三、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忽略单元测试失败 

Xml代码  收藏代码
  1. <plugins>  
  2.     <plugin>  
  3.       <groupId>org.apache.maven.plugins</groupId>    
  4.       <artifactId>maven-compiler-plugin</artifactId>    
  5.       <configuration>  
  6.         <source>1.5</source>  
  7.         <target>1.5</target>  
  8.       </configuration>  
  9.     </plugin>  
  10.     <plugin>  
  11.       <groupId>org.apache.maven.plugins</groupId>  
  12.       <artifactId>maven-surefire-plugin</artifactId>  
  13.      <configuration>  
  14.        <testFailureIgnore>true</testFailureIgnore>  
  15.      </configuration>  
  16.     </plugin>  
  17. </plugins>  


四、Maven的生命周期 (Lifecycle) 

  1. validate:验证工程是否正确,所有需要的资源是否可用。
  2. compile:编译项目的源代码。
  3. test-compile:编译项目测试代码。
  4. test:使用已编译的测试代码,测试已编译的源代码。
  5. package:已发布的格式,如jar,将已编译的源代码打包。
  6. integration-test:在集成测试可以运行的环境中处理和发布包。
  7. verify:运行任何检查,验证包是否有效且达到质量标准。
  8. install:把包安装在本地的repository中,可以被其他工程作为依赖来使用
  9. deploy:在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
  10. generate-sources:产生应用需要的任何额外的源代码,如xdoclet。


五、Maven坐标 (Coordinates) 
  Archetype插件通过名字为pom.xml的文件创建了一个项目。这就是项目对象模型(POM),一个项目的声明性描述。当Maven运行一个目标的时候,每个目标都会访问定义在项目POM里的信息。Maven坐标定义了一组标识,它们可以用来唯一标识一个项目,一个依赖,或者Maven POM里的一个插件。 
  groupId, artifactId, version和packaging。这些组合的标识符拼成了一个项目的坐标,就像任何其它的坐标系统,一个Maven坐标是一个地址,即“空间”里的某个点:从一般到特殊。当一个项目通过依赖,插件或者父项目引用和另外一个项目关联的时候,Maven通过坐标来精确定位一个项目。 

  • groupId :团体,公司,小组,组织,项目,或者其它团体。团体标识的约定是,它以创建这个项目的组织名称的逆向域名(reverse domain name)开头。
  • artifactId :在groupId下的表示一个单独项目的唯一标识符。
  • version :一个项目的特定版本。发布的项目有一个固定的版本标识来指向该项目的某一个特定的版本。而正在开发中的项目可以用一个特殊的标识,这种标识给版本加上一个“SNAPSHOT”的标记。
  • packaging :项目的类型,默认是jar,描述了项目打包后的输出。类型为jar的项目产生一个JAR文件,类型为war的项目产生一个web应用。


说明: 
(1)项目的打包格式也是Maven坐标的重要组成部分,但是它不是项目唯一标识符的一个部分。一个项目的groupId:artifactId:version使之成为一个独一无二的项目;你不能同时有一个拥有同样的groupId, artifactId和version标识的项目。 
(2)Maven插件和目标 (Plugins and Goals) :一个Maven插件是一个单个或者多个目标的集合。一个目标是一个明确的任务,它可以作为单独的目标运行,或者作为一个大的构建的一部分和其它目标一起运行。一个目标是Maven中的一个“工作单元(unit of work)”。 
常常用速记符号:pluginId:goalId。例如,当提到Archetype插件的create目标的时候,我们写成archetype:create。 
六、配置Maven的本地仓库目录 
1、命令行直接加参数的方式 
maven [cmd] -Dmaven.home.local=D:/MavenRepo/.maven 
2、在用户HOME目录下创建build.properties文件,内容为,注意/或者用\\,用\不行的。 
maven.home.local=D:/MavenRepo/.maven 
build.properties也可以放在项目路径下 
3、修改%MAVEN_HOME%\lib\maven.jar里的defaults.properties文件,将 
maven.home.local = ${user.home}/.maven 
修改为 
maven.home.local = D:/MavenRepo/.maven 
4、项目里的project.properies里加上一句 
maven.repo.local=D:/MavenRepo/.maven 
七、优化POM 
1.上移共同的依赖至dependencyManagement 
如果多于一个项目依赖于一个特定的依赖,你可以在dependencyManagement中列出这个依赖。父POM包含一个版本和一组排除配置,所有的子POM需要使用groupId和artifactId引用这个依赖。如果依赖已经在dependencyManagement中列出,子项目可以忽略版本和排除配置。 
2.为兄弟项目使用内置的项目version和groupId 
使用{project.version}和${project.groupId}来引用兄弟项目。兄弟项目基本上一直共享同样的groupId,也基本上一直共享同样的发布版本。使用${project.version}可以帮你避免前面提到的兄弟版本不一致问题。 
八、优化插件 
   大部分复杂的Maven多模块项目倾向于在顶层POM中定义所有的版本。这个顶层POM就成了影响整个项目的更改焦点。将版本号看成是Java类中的字符串字面量,如果你经常重复一个字面量,你可能会将它定义为一个变量,当它需要变化的时候,你就只需要在一个地方更改它。并且可以在顶层POM中管理(pluginManagement)插件配置,就像我们在顶层POM中使用dependencyManagement片段管理依赖一样。如: 

Xml代码  收藏代码
  1. <project>  
  2.   ...  
  3.   <properties>  
  4.     <hibernate.annotations.version>3.3.0.ga</hibernate.annotations.version>  
  5.     <hsqldb.version>1.8.0.7</hsqldb.version>  
  6.   </properties>  
  7. <build>  
  8.     <pluginManagement>  
  9.       <plugins>  
  10.         <plugin>  
  11.           <groupId>org.codehaus.mojo</groupId>  
  12.           <artifactId>hibernate3-maven-plugin</artifactId>  
  13.           <version>2.1</version>  
  14.           <configuration>  
  15.             <components>  
  16.               <component>  
  17.                 <name>hbm2ddl</name>  
  18.                 <implementation>annotationconfiguration</implementation>  
  19.               </component>  
  20.             </components>  
  21.           </configuration>  
  22.           <dependencies>  
  23.             <dependency>  
  24.               <groupId>hsqldb</groupId>  
  25.               <artifactId>hsqldb</artifactId>  
  26.               <version>${hsqldb.version}</version>  
  27.             </dependency>  
  28.           </dependencies>  
  29.         </plugin>  
  30.       </plugins>  
  31.     </pluginManagement>  
  32.   </build>    
  33.    ...  
  34. </project>  


   Maven Dependency插件能够帮助你发现对于依赖的直接引用。

Java代码  收藏代码
  1. $ mvn dependency:analyze  

dependency:tree目标,该目标会列出项目中所有的直接和传递性依赖。

Java代码  收藏代码
  1. $ mvn dependency:tree  



附: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.

posted @ 2017-07-11 14:13  我是小小竹  阅读(721)  评论(0编辑  收藏  举报