Maven问题总结 - 2

Maven问题总结 - 2

一方库、二方库、三方库说明:
一方库:本工程中的各模块之前的相互依赖
二方库:公司内部的依赖库,一般指公司内部的其他项目发布的jar包
三方库:公司之外的开源库, 比如apache、ibm、google等发布的依赖
antx eclipse:使用antx生成eclipse工程,方便导入
参考:
http://tianya23.blog.51cto.com/1081650/289363
 
http://tianya23.blog.51cto.com/1081650/386891
(1)Maven archetype:generate
(2)mkdir src\main\resources,src\test\resources
(3)添加parent
< parent >
     < groupId >com.alibaba </ groupId >
     < artifactId >pampas </ artifactId >
     < version >3-RC1 </ version >
</ parent >
由于在3-RC1中的使用做了黑白名单的限制,具体限制为: http://repo.alibaba-inc.com/mvn/wl.txt
com.alibaba.*
com.alifi.*
com.taobao.security
com.taobao.util
 
或者
< parent >
         < groupId >com.alibaba </ groupId >
         < artifactId >pampas </ artifactId >
         < version > 1 </ version >
</ parent >
 
(4)查询maven仓库
http://mvnsearch.org/
查询 http://repo.alibaba-inc.com/archiva/index.action
External仓库 http://svn.alibaba-inc.com/repos/binary/repository/
 
external的地址: http://repo.alibaba-inc.com:9091/external, 它代理了maven的三方库, http://svn.alibaba-inc.com/repos/binary/repository/

24、跳过单元测试
< plugin >
< groupId > org.apache.maven.plugins </ groupId >
< artifactId > maven-surefire-plugin </ artifactId >
< configuration >
< skip > true </ skip >
</ configuration >
</ plugin >
或使用命令:mvn install -Dmaven.test.skip=true

25、 发布我的jar包到我的remote repository
如何发布我的jar包到我的remote repository 
你需要在settings.xml中间设置server: 
< servers >  
< server >  
< id > mycompany-repository </ id >  
< username > jvanzyl </ username >  
<!--
 Default value is ~/.ssh/id_dsa  --> 
< privateKey > /path/to/identity </ privateKey >  
< passphrase > my_key_passphrase </ passphrase >  
</ server >  
</ servers >  

然后在pom.xml中设置远程url: 

< distributionManagement >  
< repository >  
< id > mycompany-repository </ id >  
< name > MyCompany Repository </ name >  
< url > scp://repository.mycompany.com/repository/maven2 </ url >  
</ repository >  
</ distributionManagement >

26、拷贝所有的依赖, mvn dependency:copy-dependencies

会将工程的全部依赖(包括依赖的依赖等)全部拷贝到工程下面的目录 target\dependency下面, 以后就可以直接拷贝到Linux上面了。

27、Maven标准目录结构
RUL: http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
src/main/java Application/Library sources
src/main/resources Application/Library resources
src/main/filters Resource filter files
src/main/assembly Assembly descriptors
src/main/config Configuration files
src/main/webapp Web application sources
src/test/java Test sources
src/test/resources Test resources
src/test/filters Test resource filter files
src/site Site
LICENSE.txt Project's license
README.txt Project's readme

28、

Maven内存不够怎么办?!

通常是PermSize不够,用下面参数一般可解决问题(注意:用上面的apt源安装的maven,已经正确设置了内存大小!):

在安装目录下面的bin目录下面的mvn.bat文件中添加如下内容:
set MAVEN_OPTS=-Xms256m -Xmx512m -XX:ReservedCodeCacheSize=64m -XX:MaxPermSize=128m
参考:
http://b2b-doc.alibaba-inc.com/display/opentech/Maven

 

29、Maven运行Junit4

项目中用到了Junit4.x中的一些新特性(通过Annotation定义setUp()@Before,testXXX()@Test)在Eclipse中可以正常run的unit test在Maven2中出来一些奇怪的错误,没有执行@Before标记的setUp()方法。

解决步骤:
方案1:
1.在pom中加入surefire-plugin 插件.
< plugin >
< groupId >org.apache.maven.plugins </ groupId >
< artifactId >maven-surefire-plugin </ artifactId >
< version >2.5 </ version >        
</ plugin >

2.在Dependency中加入surefire-junit bundle
< dependency >
< groupId >org.apache.maven.surefire </ groupId >
< artifactId >surefire-junit47 </ artifactId >
< version >2.5 </ version >
< scope >test </ scope >
</ dependency >
注意:surefire-junit bundle是一定需要加的,而且加时要注意artifactId,如果是Junit4.7的话artifactId是surefire-junit47.
 
方案2:(推荐方式)
 
添加test依赖
         
       
       
       
  1. <dependency> 
  2.             <groupId>com.alibaba.external</groupId> 
  3.             <artifactId>test.junit</artifactId> 
  4.             <version>4.8.1</version> 
  5.         </dependency> 
再增加surefire对junit和testng的支持
         
       
       
       
  1. <plugin> 
  2.                 <groupId>org.apache.maven.plugins</groupId> 
  3.                 <artifactId>maven-surefire-plugin</artifactId> 
  4.                 <configuration> 
  5.                     <junitArtifactName>com.alibaba.external:test.junit</junitArtifactName> 
  6.                     <testNGArtifactName>com.alibaba.external:test.testng</testNGArtifactName> 
  7.                     <excludes> 
  8.                         <exclude>**/IT*.java</exclude> 
  9.                         <exclude>**/*Bean.java</exclude> 
  10.                         <exclude>**/TestHelper.java</exclude> 
  11.                     </excludes> 
  12.                 </configuration> 
  13.             </plugin> 
结论:建议选用方案2

 

30、Maven版本仲裁原则

  (1)取路径最近的
  (2)路径相同,取写在最前面的
如果需要使用某一版本,在dependencyManagement进行声明
< dependencyManagement >
     < dependencies >
       < dependency >
         < artifactId >napoli.client </ artifactId >
         < groupId >com.alibaba.napoli </ groupId >
         < version >1.2.0 </ version >
       </ dependency >
     </ dependencies >
   </ dependencyManagement >

31、以debug方式启动jetty

正常的启动jetty是这样的:mvn jetty:run-war 
若想以debug方式来启动的话,就要用maven_home/bin下的mavenDebug命令,即: 
mvnDebug jetty:run-war 
关于Jetty的更多内容,参考:http://www.ibm.com/developerworks/cn/web/wa-lo-jetty/

32、调试mvn test

执行mvn test时查看是什么原因失败的

 
mvn -Dsurefire.useFile= false test

更多参考:
http://b2b-doc.alibaba-inc.com/pages/viewpage.action?pageId=29324595

33、下载源代码
mvn -DdownloadSources=true -Declipse.addVersionToProjectName=true eclipse:eclipse 生成eclipse项目文件,尝试从repository下载源代码,并且生成的项目名包含模块版本(注:如果用公共POM,上述的开关缺省已打开)

34、Eclipse中Maven缓存的问题
在elipse中,默认会缓存之前的依赖内容,当被依赖的内容发生变化时,重新打包到本地仓库,此时可能存在报错的现象,提示一些类无法识别。 非常的恼人,其实只需要Project -> Clean掉重新build即可。

35、

更新当前项目及其 module 的版本

在一个多 module 的 maven 项目中,当项目升级的时候,我们需要修改项目的 version。如果项目中仅有几个 module,那我们可以手工修改,如果项目中有几十甚至更多 module 的时候,人肉去修改的话,第一可能会出错,第二可能会少修改一些 module。使用插件  versions:set 可以很容易地完成这件事情,只要运行如下命令即可:
mvn versions:set -DnewVersion=new_version
DZone 上有一篇介绍此插件的文章: Managing POM versions

36、

Maven Autoconf使用

autoconf的具体使用参数参考:
http://b2b-doc.alibaba-inc.com/display/opentech/Maven+Autoconf
插件添加到pom.xml
< plugin >
                 < groupId >com.alibaba.maven.plugins </ groupId >
                 < artifactId >maven-autoconf-plugin </ artifactId >
                 < version >0.3-alpha-7 </ version >
                 < executions >
                     < execution >
                         < id >autoconf </ id >
                         < phase >package </ phase >
                         < goals >
                             < goal >autoconf </ goal >
                         </ goals >
                     </ execution >
                 </ executions >
                 < configuration >
                     < path >${project.build.directory}/${project.build.finalName}.${project.packaging} </ path >
                    <!-- -Dxxx=yyy to <xxx>yyy</xxx> -->
                 </ configuration >
             </ plugin >

Maven生命周期参考:
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

 

 

你可能感兴趣的:(maven,职场,休闲)