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}\.m23-2.中央资源库
当你建立一个Maven的项目,Maven会检查你的 pom.xml 文件,以确定哪些依赖下载。首先,Maven将从本地资源库获得Maven的本地资源库依赖资源,如果没有找到,然后把它会从默认的 Maven中央存储库 – http://repo1.maven.org/maven2/ 查找下载3-3.远程仓库
资源寻找顺序: 本地资源库->中央资源库->远程仓库 配置远程仓库:jar包
org.jvnet.localizer localizer 1.8
jar所依赖的远程地址
java.net https://maven.java.net/content/repositories/public/ java.net https://maven.java.net/content/repositories/public/
3-4.依赖机制
自动下载和更新所必需的依赖库。(测试范例:log4j日志)
【传统方式】[1] 访问 http://logging.apache.org/log4j/ [2] 下载 Log4 j的 jar 库 [3] 复制 jar 到项目类路径 [4] 手动将其包含到项目的依赖 [5] 所有的管理需要一切由自己做如果有 Log4j 版本升级,则需要重复上述步骤一次【maven:管理使用】
[1]直接声明到pom文件即可log4j log4j 1.2.14
(如果版本号被忽略,则为自动升级,关于log4j的入门使用,请参考另一篇文章。)
3-5.自定义
有的时候项目会用到一些三方的包,这些包在中央库和远程仓库可能都没有,这个时候就需要自己创建本地依赖仓库将需要的jar手动的导入到相关的本地仓库中。一般对于公司而言,公司最好自己建一个本地个人仓库,将自己所开发的或者所需要的三方包存储在上边,需要的时候直接获取坐标即可(参考http://www.cnblogs.com/friends-wf/p/3804377.html by wf110)。如果你只是想本地调试、学习或者没有网络,那么可以试试下面的方法。[1]直接在pom.xml文件中设置坐标(这个坐标要不和网上中央资源库的坐标冲突,否则就会下载远程库了),比如com.rock.code rocktools-1.0 1
[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-12: 1.0-alpha-23: 1.0-alpha-34: 1.0-alpha-45: 1.06: 1.1Choose 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: rockderiaoneartifactId: com.rockversion: 1.0-SNAPSHOTpackage: 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来做测试即:
junit junit 3.8.1 test log4j log4j 1.2.14
注:原始的依赖有一个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版本。org.apache.maven.plugins maven-compiler-plugin
同时,右键点击项目选择: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包。