Maven个人手册
一、Maven基本使用与设置
1、安装maven插件
1)、下载maven并解压到指定目录,到该目录下复制当前路径path
2)、在eclipse的dropins目录下编辑maven.link,将maven所在的path填写进去:
path=D:/Program Files/DevTools/apache-maven-3.3.9
然后启动eclipse,在Window-->Prefrence窗口看到Maven的选项说明maven插件安装成功。
2、使用maven自定义的repository仓库
1)、到maven软件包的conf目录下,编辑settings.xml,填写repository的路径:
2)、到eclipse中修改默认的maven repository目录
保存退出
3)、启用maven软件包里的settings.xml
然后Update Settings即可。
3、创建Maven工程
File -->New Project -->Maven Project -->Next就可以-->选择quickstart -->填写Group ID和Artifact ID,Finish
4、使用Maven打包
方式一:在工程上右击-->run --> maven clean -->maven install 会在工程所在路径的target目录下生成xx.jar包
方式二:在工程上右击-->Export -->Jar File -->设置要跑的Java程序、依赖和jar包的导出路径及文件名-->finish
二、maven常见问题
1、pom.xml报错:
同时打开pom.xml有类似如下提示:
解决:
方式一:在项目上右击--->Maven---->Update Project--->选择出现错误的项目,然后在下方选中强制更新选项,单击OK即可。
方式二:命令窗口执行:
mvn clean install -e -U
-e 详细异常,-U强制更新
三、Maven依赖常见问题
1、缺少依赖
现象:添加部分Maven依赖后,开发过程中代码正常编译,运行时提示缺少依赖
原因:这是因为由于各种原因,Maven没有下载全部所需要的对应依赖造成的
解决方案:按照提示添加相关依赖即可。
示例:在某个项目中,运行时,提示如下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: kafka/api/OffsetRequest
at storm.kafka.KafkaConfig.<init>(KafkaConfig.java:43)
at storm.kafka.SpoutConfig.<init>(SpoutConfig.java:32)
at cn.crxy.storm_project5.LogProcessTopology.main(LogProcessTopology.java:27)
Caused by: java.lang.ClassNotFoundException: kafka.api.OffsetRequest
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
根据标示的提示信息,可知缺少kafka依赖,添加即可。(在网址:mvnrepository.com上,搜索kafka依赖,添加)
2、依赖冲突(依赖包中子依赖重复)
现象:在开发过程中,代码编译正常,运行时提示在class path中出现两个类似的依赖包
分析:依赖a-1在A中出现,依赖a-2在B中出现(A和B为项目的依赖,a-1和a-2为对应的子依赖,它们功能相同,只是版本等有所差异),系统不知道引用哪个子依赖项,所以出现此错误。
解决方案:在依赖中过滤掉多余的子依赖即可
示例:某次运行代码时,提示如下错误:
Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path
java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.Log4jLoggerFactory
at org.apache.log4j.Logger.getLogger(Logger.java:39) ~[log4j-over-slf4j-1.6.6.jar:1.6.6]
解决:在依赖中进行过滤,示意:
<!-- 因为storm中有logback的实现,kafka中有log4j的实现,需要把kafka中的log4j过滤掉 -->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.11</artifactId>
<version>0.8.2.2</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion> <!--如果需要过滤多个,添加多个exclusion即可 -->
</exclusions>
</dependency>
3、依赖冲突(代码和运行环境中依赖重复)
现象:开发好的软件包在测试服务器上运行时,提示依赖包冲突
原因:默认打包的时候,所包含的依赖包中已经有依赖A,而线上跑的集群中也有对应的依赖A,二者冲突造成此错误
解决:设置自己开发的依赖包的作用范围(级别),使其在开发编译时有效,打包时无效
示例:
<!-- 这个依赖编译时需要,运行时就不需要了,因为storm集群里面已经包含 -->
<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-core</artifactId>
<version>0.9.3</version>
<scope>provided</scope>
</dependency>
4、一次性设置jdk的编译级别和运行级别为1.7(推荐)
在项目组开发过程中,开发工具eclipse默认的jdk编译和运行级别都是jdk1.5的,在开发过程中会造成很多问题,一个典型的例子时jdk1.5不支持注解,而在1.7版本可用。
因此需要强制指定编译和运行级别。一种推荐的解决方案为在pom.xml中指定:
<build>
<plugins>
<!-- compiler插件, 设定JDK版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source> <!-- 源代码使用的开发版本 -->
<target>1.7</target> <!-- 需要生成的目标class文件的编译版本 -->
<!-- 一般而言,target与source是保持一致的,但是,有时候为了让程序能在其他版本的jdk中运行(对于低版本目标jdk,源代码中需要没有使用低版本jdk中不支持的语法),会存在target不同于source的情况 -->
</configuration>
</plugin>
</plugins>
</build>
另外一种可采用的方案是在项目上右击,在Properties面板中上指定,这种方法在更新项目后,会重新恢复默认的1.5版本,所以不推荐。
四、开发工作中常用Maven依赖
1、HBase依赖(以1.15版本为例)
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase</artifactId>
<version>1.1.</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.1.</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-common</artifactId>
<version>1.1.</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.1.</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-protocol</artifactId>
<version>1.1.</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-hadoop2-compat</artifactId>
<version>1.1.</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-shell</artifactId>
<version>1.1.</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-examples</artifactId>
<version>1.1.</version>
</dependency>
注:在eclipse下载jar的过程中,不要随便关闭,如果项目编译有问题,发现是jar缺失,可用如下方法解决:
在命令行,进入到项目根目录(有pom.xml),执行mvn clean compile -X
2、Redis依赖 3.0
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.</version>
</dependency>
3、ES依赖 1.4.4
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>1.4.</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.1.</version>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.</version>
</dependency>
4、Storm依赖 0.9.3
<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-core</artifactId>
<version>0.9.</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
5、Spark 1.4.1
<!--spark -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.</artifactId>
<version>1.4.</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.6.</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-tools_2.</artifactId>
<version>1.1.-cdh5.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-assembly_2.</artifactId>
<version>1.5.-cdh5.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-repl_2.</artifactId>
<version>1.4.</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-catalyst_2.</artifactId>
<version>1.4.</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-network-common_2.</artifactId>
<version>1.4.</version>
</dependency> <!--spark on yarn -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-yarn_2.</artifactId>
<version>1.4.</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-network-yarn_2.</artifactId>
<version>1.4.</version>
</dependency> <!--spark-streaming -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.</artifactId>
<version>1.4.</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-flume_2.</artifactId>
<version>1.4.</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-flume-sink_2.</artifactId>
<version>1.4.</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-kafka_2.</artifactId>
<version>1.4.</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-kafka-assembly_2.</artifactId>
<version>1.4.</version>
</dependency> <!--spark-sql -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.</artifactId>
<version>1.4.</version>
<!-- <version>1.3.-cdh5.4.4</version> -->
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.</artifactId>
<version>1.4.</version>
<!-- <version>1.3.-cdh5.4.4</version> -->
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive-thriftserver_2.</artifactId>
<version>1.2.-cdh5.3.3</version>
</dependency> <!-- JSON PAESE -->
<dependency>
<groupId>com.typesafe.play</groupId>
<artifactId>play-json_2.</artifactId>
<version>2.4.-M1</version>
</dependency> <!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.</version>
</dependency> <!--spark dependency jar -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.6.</version>
</dependency> <!-- HBase -->
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.0.</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-common</artifactId>
<version>1.0.</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.0.</version>
</dependency>
6、Oracle依赖 11.2
参考:http://www.cnblogs.com/chinas/p/6250608.html
Maven个人手册的更多相关文章
- eclipse中集成svn maven开发手册---maven编译打包
使用eclipse中maven进行打包. 打好的包在相应的workspace下面会有一个release的文件夹,如图
- eclipse中集成svn maven开发手册---导入项目
一,导入项目 二,创建提分支 三,maven编译打包 四,合并主干 一,导入项目 右键,import,选择从svn检出项目 点击next,如图 如果是第一次导入,选择创建新的资源库,点击next,输入 ...
- maven操作手册
===Maven的安装=== http://blog.csdn.net/yang5726685/article/details/56486479 ===Maven的jar包仓库地址配置=== http ...
- eclipse中集成svn maven开发手册---合并主干
如图,代码提交分支之后 右键,项目,切换到主干版本 切换回主干版本后: 更新主干版本 合并 选择merge a range of revisions,点击next 录入要合并的分支版本的路径.此处的s ...
- eclipse中集成svn maven开发手册---创建提分支
开发时,需要拉取分支进行修改等操作 右键项目,选择team->分支/标记 输入创建分支地址 注意: 1,创建分支路径时,最后一层文件名称为项目的名称 2,点击浏览按钮可能会出现无法选择,且ecl ...
- eclipse的maven项目中找不到Maven Dependencies
菜菜的我又来了,笨鸟不一定要先飞,但一定要坚持 今天记录一个初级错误 比如我们在eclipse创建maven项目来运行我们的web项目 搭建完工程后发现javax-servlet包全部报错 到这里我还 ...
- 只需五分钟-用Maven快速搭建Spring Cloud微服务
Maven安装手册 1.准备安装包 安装包: apache-maven-3.5.4-bin.zip (最好JDK 1.7及以上版本) 集成包: eclipse-maven3-plugin.zip 2 ...
- 一个老鸟发的公司内部整理的 Android 学习路线图
基础工具部分: 中文手册,我猜测是Maven中文手册,可是我并没有找到这样的资源,欢迎知道的朋友告诉我: Android部分有 『第三方库集合』,我没能找到资源地址: 书籍我大多是给的豆瓣链接,如果觉 ...
- mybatis学习系列一
1引入dtd约束(6) Mybatis git地址:https://github.com/mybatis/mybatis-3/wiki/Maven 指导手册:http://www.mybatis.or ...
随机推荐
- C++STL - 类模板
类的成员变量,成员函数,成员类型,以及基类中如果包含参数化的类型,那么该类就是一个类模板 1.定义 template<typename 类型形参1, typename 类型形参2,...&g ...
- ANDROID中去掉ACTIONBAR或TABWIDGET的分隔线
在android中,有时需要对ActionBar或者TabWidget的分隔线进行定制,如取消,相关的属性设置为android:divider 以TabWidget为例,取消对应的函数: tabWid ...
- 学习Linux的编码风格
对于编码,每个码农或许都会有自己的一套风格,很多人可能对编码风格压根就不关心,因为最终编译器编译出来的目标代码并不会受影响.但是在开发一个大型项目时,花费时间成本最多的永远是开发者们之间的沟通与交流. ...
- FeWeb基础之JavaScript简介
FeWeb基础之JavaScript简介 1.JavaScript的基本介绍 JavaScript是一种基于对象和事件驱动并具有安全性能的脚本语言,它是通过嵌入或调入在标准的HTML语言中实现的.Ja ...
- (转)浅析Java中的访问权限控制
原文地址: http://www.cnblogs.com/dolphin0520/p/3734915.html 今天我们来一起了解一下Java语言中的访问权限控制.在讨论访问权限控制之前,先来讨论一下 ...
- Oracle闪回技术详解
概述: 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成).需要注意的是,闪回技术旨在快速 ...
- NYOJ 187
快速查找素数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数. 输入 给出一个正整数数N(N&l ...
- LinkedIn的即时消息:在一台机器上支持几十万条长连接
最近我们介绍了LinkedIn的即时通信,最后提到了分型指标和读回复.为了实现这些功能,我们需要有办法通过长连接来把数据从服务器端推送到手机或网页客户端,而不是许多当代应用所采取的标准的请求-响应模式 ...
- dwarf格式解析
debug_line中包含的是地址和源文件行之间的关系 我今天想搞清楚的是文件的C代码和汇编代码之间的关系: 对这块之前一直是迷迷糊糊的,发现这个问题已经严重影响到bug的定位了. 之前感觉C和汇编不 ...
- Python-09-线程、进程、协程、异步IO
0. 什么是线程(thread)? 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆 ...