Maven问题总结 - 2

简介:
一方库、二方库、三方库说明:
一方库:本工程中的各模块之前的相互依赖
二方库:公司内部的依赖库,一般指公司内部的其他项目发布的jar包
三方库:公司之外的开源库, 比如apache、ibm、google等发布的依赖
antx eclipse:使用antx生成eclipse工程,方便导入
(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仓库
 

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标准目录结构
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
参考:
 

 

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


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的具体使用参数参考:
插件添加到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 >

本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/364072,如需转载请自行联系原作者
相关文章
|
数据挖掘 项目管理 数据库
用语雀数据表做项目管理
项目管理是技术同学经常会面临的课题,有没有什么轻量级的工具可以便捷使用呢? 且看看科技公司项目经理的实践案例吧~
|
分布式计算 资源调度 DataWorks
dataworks常见问题之数据服务api返回超时如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
205 2
|
存储 缓存 运维
阿里巴巴鹰眼系统简介
微服务框架带来的好处十分多,比如说它提高了开发的效率,它具备更好的扩展性。可是微服务其实是一把双刃剑,微服务同时也带来了一些问题,比如:
4705 0
阿里巴巴鹰眼系统简介
|
SQL 关系型数据库 MySQL
MySQL 日期格式化 yyyy-mm-dd 详解 DATE_FORMAT() 函数
MySQL 日期格式化 yyyy-mm-dd 详解 DATE_FORMAT() 函数
5919 0
MySQL 日期格式化 yyyy-mm-dd 详解 DATE_FORMAT() 函数
|
6天前
|
人工智能 运维 安全
|
4天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
519 14
|
11天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
888 109