学习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 ...
随机推荐
- 蓝桥杯-凑算式-java
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...
- hibernate的映射关系之一对多
关系:事物之间相互作用.相互联系的状态.范围最大. 联系:在关系数据库中表示实体与实体之间的联系,1:1,1:n,m:n. 关联:表示对象之间的关系,既有数量性,又有方向性:动词:将对象之间通过某种方 ...
- C#基础知识-流程控制的应用(四)
流程控制我们在编程中运用到的地方非常的多,在上篇中仅仅只是简单的介绍每一种的使用,并没有运用到实例中,很难去理解它真正的作用.下面我们将实际的运用流程控制的代码写一些实例相关的程序,加深对流程控制的理 ...
- 分针网—每日分享: 怎么轻松学习JavaScript
js给初学者的印象总是那么的"杂而乱",相信很多初学者都在找轻松学习js的途径. 我试着总结自己学习多年js的经验,希望能给后来的学习者探索出一条"轻松学习js之路& ...
- PHP 无限级分类(递归)
网上有很多,这是我自己做测试用的$arr = array( array('id'=>1,'name'=>'电脑','pid'=>0), array('id'=>2,'name' ...
- 思考题:用Use Case获取需求的方法是否有什么缺陷,还有什么地方需要改进?(提示:是否对所有的应用领域都适用?使用的方便性?.......)
思考题: 用Use Case获取需求的方法是否有什么缺陷,还有什么地方需要改进?(提示:是否对所有的应用领域都适用?使用的方便性?.......) 简答: 一.用例解释: 在软件工程中,用例是一种在开 ...
- linux 下 查看是32位还是64位系统 命令
文章引自:http://zhidao.baidu.com/question/583981849.html 方法1:getconf LONG_BIT 查看 如下例子所示: 32位Linux系统显示32, ...
- 每天一道Java题[2]
问题 可以直接根据hashCode()方法产生的值判断两个对象是否相等吗? 解答 不能!根据Wikipedia(https://en.wikipedia.org/wiki/Java_hashCode( ...
- JDBC事务详解
在JDBC的数据库操作中,事务是由一个或者多个操作组成的一个不可分割的工作单元.JDBC的事务处理包含三个方面:事务的自动提交模式(Auto-commit mode).事务隔离级别(Transacti ...
- 域名系统DNS和FTP
域名系统概述 域名系统DNS(Domain Name System)是英特网使用的命名系统,用于把便于人们使用机器名字转化为IP地址. 为什么机器在处理IP数据报时要使用IP地址而不使用域名呢?IP地 ...