maven入门探讨
java项目最恶心的一点莫过于需要使用大量的jar。每次引用jar的时候都要自己手动去各地寻找,然后导入到项目的指定文件夹当中最后还要添加Path。
这无疑是一项工作量巨大的工作,同时如果控制不当就会提前...就会把项目的结构弄得一团糟还容易造成遗漏。同时项目的所有依赖列表也不是特别直观。
所以maven就是一个这样的管理工具,它一定程度上的将java的项目规范化,并对依赖进行统一管理。
1.windows下maven的安装:
[1]安装maven首先要确保已经安装了jdk,配置环境变量(有系统变量JAVA_HOME),并保证其版本可以使用。(Maven的版本越新,所需要的jdk版本也越高,如果不能正常安装和使用,那么请安装更高版本的jdk)
·下载地址:http://maven.apache.org/download.cgi
[2]maven寻找java的安装目录是在系统变量里边寻找JAVA_HOME,同理,要让别的工具能找到maven的安装目录,一般需要添加添加 M2_HOME 和 MAVEN_HOME并将其指向你的 Maven 文件夹。(不一定必要,如果其他工具未识别maven那么需要检查。此外maven有时候会用 m2 的命名规范。)
[3]为了方便命令行使用和一些其他工具的集成,也需要将bin目录添加到系统path中。
[4]在命令运行mvn -version 来测试是否安装成功。
2.设置代理服务器
因为maven需要连接互联网通过HTTP协议来下载响应的依赖包。所以如果公司存在防火墙那么就会阻止maven下载依赖包。为了使它工作我们需要在maven的配置文件中设置代理服务器。
参考:
http://www.yiibai.com/maven/enable-proxy-setting-in-maven.html
3.资源库:
使用Maven来管理项目首先就要为所有的依赖包提供来源。除了maven的中央资源库外,有的时候还需要本地资源库的使用。
3-1.本地资源库:
当一个maven项目创建后,所有的下载好的依赖包会默认的存储在一个位置。(这个默认地址可以通过修改setting.xml来更改)
默认地址:
Unix/Mac OS X – ~/.m2
Windows – C:\Users\{your-username}\.m2
3-2.中央资源库
当你建立一个Maven的项目,Maven会检查你的 pom.xml 文件,以确定哪些依赖下载。首先,Maven将从本地资源库获得Maven的本地资源库依赖资源,如果没有找到,然后把它会从默认的 Maven中央存储库 – http://repo1.maven.org/maven2/ 查找下载
3-3.远程仓库
资源寻找顺序:
本地资源库->中央资源库->远程仓库
配置远程仓库:
jar包
<dependency> <groupId>org.jvnet.localizer</groupId> <artifactId>localizer</artifactId> <version>1.8</version> </dependency>
jar所依赖的远程地址
<repositories> <repository> <id>java.net</id> <url>https://maven.java.net/content/repositories/public/</url> </repository> <repository> <id>java.net</id> <url>https://maven.java.net/content/repositories/public/</url> </repository> </repositories>
注:一般的资源都能在远程的中央存储库当中找到,有的包在中央存储库遗失了。主要有上述两个远程仓库来补充。
3-4.依赖机制
自动下载和更新所必需的依赖库。
(测试范例:log4j日志)
【传统方式】
[1] 访问 http://logging.apache.org/log4j/
[2] 下载 Log4 j的 jar 库
[3] 复制 jar 到项目类路径
[4] 手动将其包含到项目的依赖
[5] 所有的管理需要一切由自己做
如果有 Log4j 版本升级,则需要重复上述步骤一次
【maven:管理使用】
[1]直接声明到pom文件即可
<dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency> </dependencies>
(如果版本号被忽略,则为自动升级,关于log4j的入门使用,请参考另一篇文章。)
3-5.自定义
有的时候项目会用到一些三方的包,这些包在中央库和远程仓库可能都没有,这个时候就需要自己创建本地依赖仓库将需要的jar手动的导入到相关的本地仓库中。
一般对于公司而言,公司最好自己建一个本地个人仓库,将自己所开发的或者所需要的三方包存储在上边,需要的时候直接获取坐标即可(参考http://www.cnblogs.com/friends-wf/p/3804377.html by wf110)。如果你只是想本地调试、学习或者没有网络,那么可以试试下面的方法。
[1]直接在pom.xml文件中设置坐标(这个坐标要不和网上中央资源库的坐标冲突,否则就会下载远程库了),比如
<dependency> <groupId>com.rock.code</groupId> <artifactId>rocktools-1.0</artifactId> <version>1</version> </dependency>
[2]上述的坐标在资源库肯定下载不到的,所以铁定报错了。不过不要紧,通过错误信息我们可以看到,他会提示你在xx/xx/xx/xx/xx文件夹下缺少xx文件。这好办,自己按照错误提示把jar塞进去就可以了。(本地资源库位于c:users/{username}/.m2/...)
上例错误信息:The container 'Maven Dependencies' references non existing library 'C:\Users\yf\.m2\repository\com\rock\code\rocktools-1.0\1\rocktools-1.0-1.jar'
[3]塞进去的时候,修改一下jar的名字,改成xxx-{version}.jar的格式(和上述报错信息吻合即可,比如本例,只要保证jar的名字是rocktools-1.0-1.jar,放到"C:\Users\yf\.m2\repository\com\rock\code\rocktools-1.0\1\"文件夹下即可)。
[4]右键项目 Maven->update project...
4.创建maven项目
[1]cd到想要创建项目的目录,然后执行mvn archetype:generate
创建过程中可能比较慢,需要耐心等待。此外不要键入一些七七八八的东西,会被压到命令行的队列中的- -~
开始创建项目的时候输出是这个样子的:(需要键入的地方已用【】内标出)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 864: 【1.一般使用默认的代码,直接回车】
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6: 【2.使用最新版本,直接回车】Define value for property 'groupId': : rockderia【3.键入包名】
Define value for property 'artifactId': : testrock【4.键入项目名】
Define value for property 'version': 1.0-SNAPSHOT: :【5.版本号 默认。直接回车】
Define value for property 'package': rockderiaone: :【6.项目打包后jar的名称】
Confirm properties configuration:
groupId: rockderiaone
artifactId: com.rock
version: 1.0-SNAPSHOT
package: rockderiaone
Y: :【7.键入回车确认】
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: F:\maven_projects
[INFO] Parameter: package, Value: rockderiaone
[INFO] Parameter: groupId, Value: rockderiaone
[INFO] Parameter: artifactId, Value: com.rock
[INFO] Parameter: packageName, Value: rockderiaone
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: F:\maven_projects\com.rock
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:47 min
[INFO] Finished at: 2016-09-26T16:40:39+08:00
[INFO] Final Memory: 14M/222M
[INFO] ------------------------------------------------------------------------
看到BUILD SUCCESS 说明项目创建成功。
[2]上述的maven项目可以直接用eclipse导入,前提是eclipse安装了maven插件。方法是file->import->Maven->Existing Maven Projects
一般而言对于一个新的maven项目首先就要处理的就是更新一下pom.xml文件。新的maven项目只有下述一个依赖,这个junit的版本一般是落后的可以更改版本号来测试更新。此外还可以自己添加对应的依赖坐标。比如拿经常会用到的org.apache.log4j来做测试即:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency>
注:原始的依赖有一个scope属性,如果设置为test的话可能会导致在main文件夹中的文件执行的时候无法找到对应的jar而报错。建议先不写这个scope。更多请参考http://blog.darkmi.com/2011/03/15/1653.html by darkmi
[3]jdk版本配置。
一般新导入的新项目都会获得一个J2EE-SE5什么的警告。貌似是说编译器没找到相应版本的jre。maven默认的jdk版本貌似的1.5?天啦噜。不过不要紧,只要在pom.xml追加一些配置就可以更改相应的jdk版本。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build>
同时,右键点击项目选择:Build Path-> configura build path -> Java Compiler 选择将版本也换成上述已配置的版本(1.8)即可。
注:如果设置完坐标出现“Failed to read artifact descriptor for xxx:jar ”的错误。这可能是在下载过程中文件出现了错误。
解决办法:从本地的maven库中删除相关的jar包,右键项目 Maven->update project... 并勾选“Force Update Of Snapshots/Releases"
然后点击“OK”。这样就会重新下载这个jar包。
maven入门探讨的更多相关文章
- Maven入门详解
什么是Maven Maven,鼎鼎大名,在今天之前,我对于它一直是处于一种"只闻其名不见其人"的状态.之所以说"只闻其名",是因为Maven太有名了,它是Apa ...
- Maven 入门 (2)—— 创建Maven项目
http://blog.csdn.net/kakashi8841/article/details/17427043 读这篇文章之前请先确保你成功安装了maven,如果你还没安装成功,请先看:Maven ...
- Maven 入门 (1)—— 安装
Maven 入门 (1)—— 安装 http://blog.csdn.net/kakashi8841/article/details/17371837 1.下载maven安装包 http://mave ...
- Maven入门示例(3):自动部署至外部Tomcat
Maven入门示例(3):自动部署至外部Tomcat 博客分类: maven 2012原创 Maven入门示例(3):自动部署至外部Tomcat 上一篇,介绍了如何创建Maven项目以及如何在内 ...
- maven 入门
Apache Maven 入门篇 ( 上 ) 作者:George Ma 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法.这 ...
- Apache Maven 入门篇 ( 上 )
作者:George Ma 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法. 这个入门篇分上下两篇.本文着重动手,用 mav ...
- Maven入门系列(二)--设置中央仓库的方法
原文地址:http://www.codeweblog.com/maven入门系列-二-设置中央仓库的方法/ Maven仓库放在我的文档里好吗?当然不好,重装一次电脑,意味着一切jar都要重新下载和发布 ...
- [转]Apache Maven 入门篇 ( 上 )
原文地址:Apache Maven 入门篇 ( 上 ) 作者:George Ma 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这 ...
- [转]Apache Maven 入门篇(下)
原文地址: Apache Maven 入门篇(下) 作者:George Ma 第一篇文章大概的介绍了一下Apache Maven以及它的下载和安装,并且运行了一个简单的示例.那么在对maven有了一点 ...
随机推荐
- RAC One Node转换为RAC
1.查看状态 [oracle@rone1 ~]$ srvctl config database -d rone Database unique name: rone Database name: ro ...
- 20145320 《Java程序设计》第6周学习总结
20145320 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入/输出 流(Stream)是对「输入输出」的抽象,注意「输入输出」是相对程序而言的 10.1 Input ...
- 注解的基本盘点 -- 《Java编程思想》
注解(元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在之后的某一个时刻非常方便地使用这些数据. ---<Java编程思想> 其实注解可以理解为一个工具类,只要使用了这个工 ...
- 翻译:Lisp Style Tips for the Beginner - Heinrich Taube
原文:Lisp Style Tips for the Beginner 本篇文章是一篇非正式的摘要,旨在帮助新手写出高效.易读的Lisp代码. 1 赋值 1.1 避免使用eval.赋值是Lisp内 ...
- 小Q系列之 最佳裁判
这个题需要注意一些数据条件 尤其是一些输入数据条件 #include<algorithm> #include<stdio.h> #include<math.h> u ...
- SpringMVC访问静态资源的三种方式(转)
本文转自:http://www.iigrowing.cn/springmvc_fang_wen_jing_tai_zi_yuan_de_san_zhong_fang_shi.html 如何你的Disp ...
- Scala-Trait:混入与多态
Scala 的 Trait 结合了抽象类与接口的能力,通过混入来获得灵活的多态能力. 代码如下所示: FileAbility 提供了读取文件.处理文件的能力, 其中继承一个空实现的 Trait:Lin ...
- 图论$\cdot$最短路问题
Dijkstra单源最短路径算法 Dijkstra可以计算出发点到每个点的最短路,及单源最短路径(SSSP).这一特点使得Dijkstra常常用来进行其他算法的预处理.用Dijkstra算法计算最短路 ...
- [问题2014S04] 复旦高等代数II(13级)每周一题(第四教学周)
[问题2014S04] 设 \(A\in M_n(\mathbb{C})\) 为可对角化的 \(n\) 阶复方阵, \(f(x)\in\mathbb{C}[x]\) 为复系数多项式, 证明: \[B ...
- Hibernate配置文件
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hi ...