Marven笔记贴
本篇只是作为自学Marven的笔记贴,基本上都是网上的各种资料的汇总,方便自己和需要的人,不用一个个去找浪费时间了。
- 什么是Marven
You want to start with a project, say a J2ee or Spring MVC and you are lost what is the minimum set of Jars, how should I create the folder structure, Should it be a WAR, EAR, What are the “Best Practices” for a particular kind of project ..and many others.
Maven can be described as “Project Management Tool” which helps in cleaning, building, dependency resolution, integration, running test cases among many other activities related to project lifecycle management.
All of these tasks can be carried out by good old ANT scripts as well, but it
involves manual steps to write script for all of these activities. For example,
listing all the dependencies , then downloading them and maintaining a
repository, if a version changes manage it manually — Maven provides many of
the task as “off the shelf” plugin.
- Marven快速入门
非常全的blog
http://tangyanbo.iteye.com/category/220107
两个简单的例子
http://www.cnblogs.com/fnng/archive/2011/12/02/2272610.html
http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-1-406235-zhs.html
- Marven文档官网
https://maven.apache.org/index.html
- 官方how-to
https://maven.apache.org/guides/getting-started/index.html#What_is_Maven
- What is Maven?
- How can Maven benefit my development process?
- How do I setup Maven?
- How do I make my first Maven project?
- How do I compile my application sources?
- How do I compile my test sources and run my unit tests?
- How do I create a JAR and install it in my local repository?
- How do I use plug-ins?
- How do I add resources to my JAR?
- How do I filter resource files?
- How do I use external dependencies?
- How do I deploy my jar in my remote repository?
- How do I create documentation?
- How do I build other types of projects?
- How do I build more than one project at once?
- 官方pom configuration guide
https://maven.apache.org/pom.html
- 核心概念
a) Two Key Concepts
POM.xml: –This is heart of maven, all dependencies definition go here and
it’s instrumental in controlling the lifecycle activities of the project.
Archetype: It could be understood as “off the prototype”, for example for generating a simple Web project what should be the project structure, what are the required dependencies or for generating a spring MVC project what are the required details – Some one have already defined all these, just use the appropriate archetype and project setup will be done “automagically”. Typical step
- Use archetype to indicate what type of project to use
- It will generate standard project folders
- It will generate POM.xml
Use maven predefined command to download the dependencies. Nonetheless to
say, one need to be connected to the net for getting the jars.
There are “off the shelf” archetypes defined, I will explain below how to get
some of them in eclipse.
关于archetype的用法,在http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-1-406235-zhs.html的例子中有说到。
b) How dependencies are resolved?
Heart of Maven is POM.xml file. All the dependencies are defined here.
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
First these dependencies are looked into the local repository, pointed by M2_REPO vaiable. To see the value of this variable go to windows->preferences->Java->BuildPath. If the needed JAR is not found in the local repository, then Maven site is contacted to download needed JAR.
c) Local repository vs Remote repository
A repository in Maven is used to hold build artifacts and dependencies of varying types.
There are strictly only two types of repositories: local and remote. The local repository refers to a copy on your own installation that is a cache of the remote downloads, and also contains the temporary build artifacts that you have not yet released.
Remote repositories refer to any other type of repository, accessed by a variety of protocols such as file:// and http://. These repositories might be a truly remote repository set up by a third party to provide their artifacts for downloading (for example, repo.maven.apache.org anduk.maven.org house Maven's central repository). Other "remote" repositories may be internal repositories set up on a file or HTTP server within your company, used to share private artifacts between development teams and for releases.
The local and remote repositories are structured the same way so that scripts can easily be run on either side, or they can be synced for offline used. In general use, the layout of the repositories is completely transparent to the Maven user, however.
通常我们是从center repository里面去取出jar文件的。如果有必要我们可以使用就近的mirror,具体的做法在这里http://maven.apache.org/guides/mini/guide-mirror-settings.html。
但是对于直接的企业应用,通常来说会搭建一个internal repository。这个操作可以通过repository manager来实现,好处有如下几点。
Proxying speeds up builds throughout your organization by installing a local cache for all artifacts from the Central Maven repository.
a repository manager provides an organization with control over what is downloaded by Maven. You can include or exclude specific artifacts from the public repository, and having this level of control over what is downloaded from the central Maven repository is a prerequisite for organizations which need strict control over what dependencies are used throughout an organization.
a repository manager also provides something essential to full adoption of Maven. Unless you expect every member of your organization to download and build every single internal project, you will want to provide a mechanism for developers and departments to share both SNAPSHOT and releases for internal project artifacts. Over time, this central deployment point for internal projects becomes the fabric for collaboration between different development teams.
d) 项目开发中的maven
根据我的了解,maven开发的过程基本上是这样的:
- 使用maven命令行mvn工具(或者eclipse插件)创建maven项目的基本框架
- 使用svn将整个生成的框架都check in(特别要的是pom.xml)
- 其他工程师从svn中check out之后,eclipse的maven插件会自动下载需要的jar包放置到local repository中。
e) Maven 生命周期
maven 能支持不同的生命周期,但是最常用的是默认的Maven生命周期 (default Maven lifecycle )。如果你没有对它进行任何的插件配置或者定制的话,那么命令 mvn package 会依次执行默认生命周期中直到包括 package 阶段前的所有阶段的插件目标(其中冒号前的是插件名,后面的是target/goal(s)):
- process-resources 阶段:resources:resources
- compile 阶段:compiler:compile
- process-classes 阶段:(默认无目标)
- process-test-resources 阶段:resources:testResources
- test-compile 阶段:compiler:testCompile
- test 阶段:surefire:test
- prepare-package 阶段:(默认无目标)
- package 阶段:jar:jar
f) 自建jar加入maven repository
两者都可以在官方how-to里面找到
- deploying jars to an external repository
- mvn install
http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-2-405568-zhs.html也有一个例子
g) maven中snapshot快照库和release发布库的区别和作用
讲到底就是一句话,
如果是snapshot版本,一定会去到remote repository的SNAPSHOT仓库中去找指定公共库的指定版本的最新SNAPSHOT。
如果是非snapshot版本(release版本),先到local repository里面去找指定公共库的指定版本,没有的话,再去remote repository里面找此库。
http://www.mzone.cc/article/277.html
参考资料:
http://tangyanbo.iteye.com/category/220107
http://www.mzone.cc/article/277.html
https://maven.apache.org/pom.html
http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-1-406235-zhs.html
http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-2-405568-zhs.html
https://maven.apache.org/guides/getting-started/index.html#How_do_I_deploy_my_jar_in_my_remote_repository
https://maven.apache.org/guides/getting-started/index.html#How_do_I_make_my_first_Maven_project
https://maven.apache.org/guides/introduction/introduction-to-archetypes.html
http://chandanpandey.com/2012/11/01/maven-basic-concept-set-up-in-eclipse-and-first-project/
------------------------------------------------------------------------
email : aicrosoft1104@126.com
吃遍天下。