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有了一点 ...
随机推荐
- XSS检测工具 X5S/fiddler
x5s http://xss.codeplex.com/ 5s是fiddler的插件, 协助XSS脚本攻击的穿刺性测试. 需要手动驱动. 安全编码,unicode字符变形,ut-8编码. 5s is ...
- Struts2(一):怎么创建对应版本的struts.xml
1.eclisep导航菜单:windows->preferences->Xml->Xml Catalog; 2.在Xml Catalog右侧,添加一个新的XML Catalog: 3 ...
- YII2.0--------这篇文章记录我学习YII2.0的过程吧,也可以让更多的人少走弯路
1.情况:今天我从github上下载了一个项目,本以为直接丢到根目录运行就行了,但是不行. 解决办法:首先安装git,安装步骤这里不讲了,稍微讲一下配置环境变量.
- 谨慎使用多线程中的fork
// Upon successful completion, pthread_atfork() shall return a value of zero; otherwise, an error nu ...
- 分列:将excel单元格的内容拆分为两列
提要:处理excel数据时有时需要把单元格的内容拆分为两列,可能方便外部软件的链接,可能使数据显示更明晰等等,有人说直接剪切加粘贴不就可以了吗,但是有时数据过多,这样处理很不效率,网上搜索的方法说插入 ...
- install sublime for linux
Download Your Free eBooks NOW - 10 Free Linux eBooks for Administrators Python API, that available f ...
- 【final】站立会议---11.28
名称:nice! 组长:李权 成员:韩媛媛 刘芳芳 宫丽君 于淼 项目名称:约跑app 时间:11月28日 12:30 内容: 新任务的分配 1.李权分配任务 2.韩媛媛写站立会议 3.刘芳芳修改BU ...
- @synthesize vs. @dynamic
@synthesize will generate getter and setter methods and corresponding instance variable for your pro ...
- JavaScript高级应用(二)(转)
1.组件是否安装 //组件是否安装 isComponentInstalled("{6B053A4B-A7EC-4D3D-4567-B8FF8A1A5739}", "com ...
- 分布式算法系列——一致性Hash算法
摘自:http://www.blogjava.net/hello-yun/archive/2012/10/10/389289.html