学习maven的各种问题
1. The container 'Maven Dependencies' references non existing library
解决方法,将eclipse中maven插件中“resolve dependencies from workspace projects”的选项取消
默认的本地库更改,修改maven_home\conf\settings.xml中localRepository的配置
[ERROR] The goal you specified requires a project to execute but there is no POM in this directory (...). Please verify you invoked Maven from the correct directory.
到有pom.xml文件的目录下执行命令
2. myeclipse从svn导入maven项目,有modules。
myeclipse的check out maven projects from scm,没有试成功怎么导出。但可以先从svn检查maven项目,包含子module,然后再导入exists maven projects。
3. Failure to find xxx:jar:1.0 in ... was cached in the local repository, resolution will not be reattempted until the update interval of nexus has elapsed or updates are forced
这是一些jar包在之前的仓库无法获得,在更改仓库后,或把jar包部署到了私服上后,仍然出错。这时把.m2 文件夹下对应的 xxx.lastUpdated文件再更新依赖,就可以了。或者使用mvn命令时加 -U参数,忽略xxx.lastUpdated。
另外以上方式仍然报错,这时可能是maven 库或私服里确实没有对应的jar包,这时可以在私服里增加仓库,或者更改仓库。
4. pom聚合的install,在maven 的build config里,goals选项里填入install,profiles中填入maven聚合项目中配置的modules profile的id,如果是如下配置:
<profiles>
<profile>
<id>modules</id>
<modules>
<module>modules/parent</module>
<module>modules/common</module>
<module>modules/entity</module>
<module>modules/ejb</module>
<module>modules/spring</module>
<module>modules/hibernate</module>
<module>modules/web</module>
<module>modules/test</module>
</modules>
</profile>
</profiles>
则这里就要填入modules
5. maven install的plugin找不到,比如effective pom 中配的是2.3.1,本机上已经有2.2.1了,是不会使用的。就会去maven仓库中下载新版本,maven 的中央库连接经常不稳定。一般会在settings.xml中配置一些镜像。但maven不会依次去尝试所有镜像,而当排在前面的镜像失效、或不能提供最新版本时,就需要调整镜像的位置。
6. 导入的maven项目找不到jdk中的类
jdk版本是1.6,ide是ide出问题了,将Myeclipse重启ide,对有依赖的maven项目进行更新maven依赖、更新maven项目配置操作,然后对本项目clean、 重新build后就可以了。
7. 拷贝依赖包 mvn dependency:copy-dependencies,默认会拷到项目的 target\dependency 目录,想要复制到自定义的目录比如target/libs目录下,需要在pom.xml文件中添加设置覆盖默认设置:
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>true</stripVersion>
</configuration>
</plugin>
其中${project.build.directory}是maven变量,表示target目录。如果不写的话,将在根目录下创建lib目录。
excludeTransitive,表示是否不包含间接依赖的包;
stripVersion表示复制的jar文件去掉版本信息。
如果需要在其他过程,比如package中加入copy-dependencies,需要在该plugin标签中这样设置:
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>libs</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>true</stripVersion>
</configuration>
</execution>
</executions>
8. 导入jar包到本地库
有时候有些第三方就是从仓库中下载不下来,配的私服也有问题,就只有手动导入jar包了。Myeclipse 10 可以使用“Myeclipse -- utilities -- Maven4MyEclipse -- import jar to local repository”工具,导入jar包到本地库。eclipse的m2eclipse插件暂时没找到这样的工具。使用maven命令的可以这样:
mvn install:install-file
-DgroupId=com.danga
-DartifactId=memcached
-Dversion=2.0.1
-Dfile=java_memcached-release_2.0.1.jar (或者/d:/java_memcached-release_2.0.1.jar)
-Dpackaging=jar -DgeneratePom=true
This will add the memcache jar into your local Maven2 repository under groupId com.danga and artifactId memcached, you can then edit your pom.xml adding this dependency.
However, the maven eclipse can not recognize it since it always search from public repository .
安装到私服
mvn deploy:deploy-file -DgroupId=org.apache.hadoop -DartifactId=hbase -Dversion=1.0 -Dpackaging=jar -Dfile=[path to file] -Durl=[url] -DrepositoryId=[id]
批量导入jar
直接拷贝文件至/opt/data/nexus/sonatype-work/nexus/storage/pvinsight/org/apache/hadoop/hive/hive-exec/0.5.0
或者
通过脚本执行 mvn deploy:deploy-file
9. 使用maven发布是,报某个类找不到,原因是某个运行时的类,import了用于测试的类(但并未使用),比如junit相关的类。这样,在ide中和maven compile时都不会报错,在打包时,由于junit这样的jar的scope是test类型,因此就不会包含进来,于是就出错了。解决方法就是删除不不要的引用。
建立maven的本地代码库服务器,也就是“私服”
Maven的服务器很简单,一个普通的http服务器就行,比如apache,装好apache以后。
将你本地代码库文件夹拷贝到apache安装目录下htpdocs/maven2,windows用户是C:/Documents and Settings/jeffrey/.m2/repository,linux下是 /home/Jeffrey/.m2/repository(注意.m2在linux下是隐藏文件夹)
启动apache服务器,在浏览器中输入http://localhost/maven2/repository,应该可以查看到repository的文件目录
编辑项目pom,指定本地的代码库服务器
在project中加入:
xml 代码
<repositories>
<repository>
<id>mylibsid>
<url>http://localhost/maven2/repositoryurl>
repository>
repositories>
可以加入多个repository,mvn会按照顺序检索,如果都没有找到,最后会去找官方的服务器
maven问题汇总
常用命令
maven日用三板斧
mvn package 打包(在每个模块的target下生成对应文件)
mvn install 打包,并安装到本地库,如果package失败,报告应用模块找不到,那就试试install
mvn eclipse:eclipse 生成eclipse项目文件
Maven/AntX命令对照表
AntX Maven
构建项目 antx reactor mvn install
发布项目 antx reactor -P release mvn install -Denv=release
生成eclipse antx eclipse mvn eclipse:eclipse
清空项目 antx clean mvn clean
更新二/三方库 svn up (库目录) mvn a2m:purge
指定配置文件 antx -u antx.properties mvn -DuserProp=antx.properties
Maven常用命令
命令 说明
mvn archetype:generate 创建 Maven 项目
mvn compile 编译源代码
mvn test-compile 编译测试代码
mvn test 运行应用程序中的单元测试
mvn eclipse:eclipse 生成 Eclipse 项目文件
mvn eclipse:clean 清除 Eclipse项目文件
mvn package 依据项目生成 jar 文件
mvn install 在本地 Repository 中安装 jar
mvn clean 清除目标目录中的生成结果
mvn site 生成项目相关信息的网站
Maven常用参数
参数 说明
mvn -U 强制更新snapshot类型的插件或依赖库(否则maven只会一天更新一次snapshot依赖)
mvn -o 运行在offline模式,不联网的时候适用
mvn -N 仅在当前项目模块执行命令,关闭reactor
mvn -pl [opentech:module_name] 在指定的模块上执行命令的,而非全部模块
mvn -ff 在递归执行命令过程中,一旦发生错误就直接退出(fail fast)
mvn -Dxxx=yyy 指定java全局属性
mvn -Pxxx 应用profile xxx
Maven插件常用参数
命令 说明
mvn -Dmaven.test.skip=true 如果命令包含了test phase,则忽略单元测试(用一次,rp值少10点,自己看着办)
mvn -DdownloadSources=true -Declipse.addVersionToProjectName=true eclipse:eclipse 生成eclipse项目文件,尝试从repository下载源代码,并且生成的项目名包含模块版本(注:如果用公共POM,上述的开关缺省已打开)
mvn dependency:tree -Dverbose 为当前所在模块及所有子模块生成详细的依赖图(包括被仲裁掉的)
Maven简单故障排除
命令 说明
mvn -Dsurefire.useFile=false 如果执行单元测试出错,用该命令可以在console输出失败的单元测试及相关信息
set MAVEN_OPTS=-Xms256m -Xmx512m
-XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=64m Maven内存不够
mvn -X maven log level设定为debug在运行
mvndebug 运行jpda允许remote debug
mvn --help 如果不清楚这个命令用法,请和我们联系,马上安排专人伺候~
如何查找maven插件的文档
maven所有插件都是maven编译的,在发布的时候,都会为每个插件的配置参数生成一个插件文档:比如我们自己的maven-car-plugin插件,文档在这里:http://repo.alibaba-inc.com/mvn/internal/snapshots/sites/maven-car-plugin/project-reports.html
定位这个文档是有模式可循的:maven generated site -> Project Reports -> Plugin Documentation
定位maven core/plugins的svn:
同上,maven generated site -> Project Information -> Source Repository 按照这个规则去找maven-car-plugin的svn信息吧。
如果要google某个插件的用法,比如dependency插件,请用关键词maven-dependency-plugin.
记得关键词模式是:maven-${pluginname}-plugin
如何查找某个二方库或者三方库jar的pom设置groupId和artifactId?
全文检索的方式查询maven库中是否存在某个jar包,二方库或者三方库:
http://repo.alibaba-inc.com/archiva/index.action
查到后点击可得到pom设置,如:
<dependency>
<groupId>com.alibaba.external</groupId>
<artifactId>ajax.dwr</artifactId>
<version>3.0.0.rc1</version>
</dependency>
淘宝maven库的查询: http://mvnrepo.taobao.ali.com:8081/nexus/index.html#welcome
我们现在不能用淘宝的maven库?setting.xml里有,但是未启用。
其他一些问题的解决方案
m2eclipse 更新index时间太长的解决办法?
A: 下载index.zip等文件到本地,放到tomcat下并运行tomcat,eclipse打开,设定索引url为http://repo.alibaba-inc.com/mvn/ 然后update index即可。
mvn test失败后只显示了失败个数,没看到异常信息
A: 在target/surefire-reports目录下有各测试方法失败的详细信息,查看命令:cat target/surefire-reports/*.txt
如何引用pom文件上的内容?
通过${project.xxx}引用当前pom文件的任意节点的内容,比如:
${project.packaging} 项目的打包类型,对应<project><packaging>jar</packaging></project>的内容。
另外,一些常用的目录变量:
${basedir} 项目根目录
${project.build.directory} 构建目录,缺省为target
${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes
如何在Maven中为同一个项目指定不同的antx properties文件?
maven-autoconf-plugin可以支持从命令行指定antx.properties。
mvn -DuserProp=/x/y/z/my.properties
That's it !
更多配置参数参见插件文档:
http://repo.alibaba-inc.com/mvn/internal/snapshots/sites/maven-autoconf-plugin/config-mojo.html
缺少依赖
有时 build 会因为找不到某些依赖而失败,如下面这段输出:
Missing:
----------
1) com.alibaba.external:jakarta.log4j:jar:1.2.16
Try downloading the file manually from the project website.
Then, install it using the command:
mvn install:install-file -DgroupId=com.alibaba.external -DartifactId=jakarta.log4j -Dversion=1.2.16 -Dpackaging=jar -Dfile=/path/to/file
Alternatively, if you host your own repository you can deploy the file there:
mvn deploy:deploy-file -DgroupId=com.alibaba.external -DartifactId=jakarta.log4j -Dversion=1.2.16 -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]
Path to dependency:
1) com.alibaba.dragoon:dragoon-common:jar:2.5.0-SNAPSHOT
2) com.alibaba.external:jakarta.log4j:jar:1.2.16
如果缺少的是二方库( groupId 为 com.alibaba.shared )或三方库( groupId 为 com.alibaba.external ),且确定缺少的依赖在二方库或三方库中是存在的,那出现这个问题很有可能是你的 pom 或 settings 没有配置正确。解决这个问题可以从两个方面入手,首先查看你使用的 settings 是否是 b2b 最新的 settings,最新的 settings 地址为http://svn.alibaba-inc.com/repos/ali_platform/maven/settings/settings.xml,其次检查你 pom 里面有没有配置 parent,或者运行以下命令,并把输出重定向到文件中:
mvn help:effective-pom -Doutput=output.txt
然后在文件中查找二方库的地址:http://repo.alibaba-inc.com:9091/shared 和三方库的地址:http://repo.alibaba-inc.com:9091/external。
注: 在顶级 pom 下运行的时候最好加上 -N 选项,指示 maven 不递归到当前项目的子模块中。
有的时候配置了正确的 settings,但没有设置 parent,就可能会引起一些三方库找不到,这是因为二方库的地址在settings 里面已经有了配置,而三方库的地址仅在 parent pom com.alibaba:b2b 中配置了,所以如果三方库找不到,那就要在 pom 里设置一个相应的 parent。
学习maven的各种问题的更多相关文章
- 几个学习Maven不错的网址
几个学习Maven不错的网址:---------------------------------------------------1.Maven官方网站 http://maven.apache.or ...
- 我的学习归纳方法(以学习Maven为例)
以我的个人角度来看待学习这件长久的事,希望对你有帮助,也希望你能提一下你的意见 本文初衷 把自己模板化 以此篇为引,与同行沟通心得,所以在此严重要求如果你有对应的心得还请能回复下,真心感谢!(鞠躬) ...
- 学习Maven之Maven Surefire Plugin(JUnit篇)
1.maven-surefire-plugin是个什么鬼? 如果你执行过mvn test或者执行其他maven命令时跑了测试用例,你就已经用过maven-surefire-plugin了.maven- ...
- 学习maven的使用,看到一篇很实用的入门教程(菜鸟级入门)
一.前言 早就知道maven 在java 项目的管理方面名声显赫,于是就想着学习掌握之,于是查阅了大量文档.发现这些文档的作者都是java 的大腕,大多都是站在掌握了一定maven 基 ...
- 学习maven,看思维导图就够了
一直在用 Mindjet MindManager和xmind 做思维导图.以前在用思维导图写读书笔记时,总是想要事无巨细地写清楚每个知识点,现在想来是事倍功半.思维导图应该是一个帮助我们梳理知识点.理 ...
- maven 学习---Maven Web应用
本教程将教你如何管理使用Maven版本控制系统管理一个基于Web项目.在这里,将学习如何创建/构建/部署和运行Web应用程序: 创建Web应用程序 要创建一个简单的java web应用程序,我们将使用 ...
- maven 学习---Maven安装配置
想要安装 Apache Maven 在Windows 系统上, 只需要下载 Maven 的 zip 文件,并将其解压到你想安装的目录,并配置 Windows 环境变量. 所需工具 : JDK 1.8 ...
- 学习Maven之Maven Clean Plugin
1.maven-clean-plugin是个什么鬼? maven-clean-plugin这个插件用maven的人都不陌生.我们在执行命令mvn clean时调用的就是这个插件. 这个插件的主要作用就 ...
- 学习Maven之Cobertura Maven Plugin
cobertura-maven-plugin是个什么鬼? cobertura-maven-plugin是一个校验单元测试用例覆盖率的工具,可以生成一个测试覆盖率报告,可以给单元测试用例编写提供参考. ...
- 学习Maven之Properties Maven Plugin
1.properties-maven-plugin是个什么鬼? 介绍前我们先看一个问题,比如我们有一个maven项目结构如下: 一般我们都把一些配置文件放到像src/main/resources/jd ...
随机推荐
- CSS vertical-align属性
之前也经常用到vertical-align进行垂直居中对齐,突然发现其中的一些属性值根本就没使用过,也不清楚效果,将今天的研究成果记录下. vertical-align 属性 下表是w3c上列举的属性 ...
- 字符型SQL注入
字符型SQL注入 很早就基于DVWA实现了字符型的SQL注入,但是一直感觉自己没有理解的特别清楚,这次又看了一下网上的一些讲解,试着总结一下.以下是我的一写浅薄见解,请大家批判着看. 基本原理 看 ...
- logback配置文件详解
一:根节点<configuration>包含的属性: scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true. scanPeriod: 设置监测配置文 ...
- OC中的私有变量和私有方法
在类的实现即.m文件中也可以声明成员变量,但是因为在其他文件中通常都只是包含头文件而不会包含实现文件,所以在.m文件中声明的成员变量是@private得.在 .m中定义的成员变量不能和它的头文件.h中 ...
- Viewpager结合fragment实现底部导航
具体实现如下: FindFragment.java package fbtt.com.fbtt.fragment; import android.os.Bundle; import android.s ...
- php的文件引用
最近研究公司代码时发现了set_include_path(dirname(__FILE__));这样一行代码,在网上查了些资料,才把这个方法的作用弄清楚. 首先,dirname(__FILE__)这个 ...
- linux 下 查看是32位还是64位系统 命令
文章引自:http://zhidao.baidu.com/question/583981849.html 方法1:getconf LONG_BIT 查看 如下例子所示: 32位Linux系统显示32, ...
- ZooKeeper监听机制
前言:Zookeeper的监听机制很多人都踩过坑,感觉实现了watcher 接口,后面节点的变化都会一一推送过来,然而并非如此. Watch机制官方声明:一个Watch事件是一个一次性的触发器,当被设 ...
- javaWeb基础核心之一Servlet
既然是做JAVA开发的,先从一些基本的整理起来,算是知识回顾,加深记忆. 第一篇想到那理到哪,可能有点乱,不是太会排版,见谅,估计可能也就我自己看的懂. servlet在百度百科上的定义是这样的: S ...
- 17、Map接口及其常用子类(Hashtable、HashMap、WeakHashMap)
17.Map接口 Map没有继承Collection接口,Map提供key到value的映射.一个Map中不能包含相同的key,每个key只能映射一个value.Map接口提供3种集合的视图,Map的 ...