配置pom.xml依赖包时在这里找包的描述:
http://search.maven.org/#browse
以java为根目录。
mvn archtype:generate -DgroupId=zttc.itat.maven -DartifactId=maven-ch03 -Dversion=1.0.0
配置maven/bin/.conf, 更改m2文件路径, 改为maven/repos
preferences->maven-installation,替换默认mvn
替换默认usersettings.xml
new maven project-->quickstart, 另一外常用的是webapp.
添加dependency:
www.mvnrepository.com
preference->editor->content assistant->auto activation: auto activation for java: .@
preference->editor->content assistant->auto activation: auto activation for java: #
右键工程->run as->build->clean install
几个不错的java类、jar包及其依赖查找网站:
http://search.maven.org/
http://mvnrepository.com/
http://mvnbrowser.com/
http://www.sonatype.org/
http://www.findjar.com/index.x
http://www.jarvana.com/jarvana/ (强烈推荐,界面不错,而且信息非常详细,是目前发现的最好的!!!可是我怎么打不开呢……)
国内仓库:http://maven.oschina.net/help.html
http://maven.oschina.net/content/groups/public/
http://maven.oschina.net/home.html
http://www.findmaven.net/
maven坐标和依赖,包含任何一个信赖、插件和构建,如log4j.jar, maven-compiler-plugin,account-email.jar.
先查找本地仓库再查找远程仓库,
局域网创建私服,节省时间
除了*仓库,私服,还有其它公开仓库:http://download.java.net/maven/2/, http:/repository.jboss.com/maven2
仓库路径配置文件:~/.m2/setting.xml,此文件默认不存在需要从$M2_HOME/conf/setting.xml复制过来。
install把构建出来的jar包复制到本地仓库目录。
*仓库:
<repositories>
<repository>
<id>central</id>
<name>Maven Repository Switchboard</name>
<layout>default</layout>
<url>http://repo1.maven.org/maven2</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
*仓库可能无法满足需求,需要配置另外一远程仓库
<repositories>
<repository>
<id>jboss</id>
<name>JBoss Repository</name>
<url>http://repository.jboss.com/maven2/</url>
<releases>
<updatePolicy>daily</updatePolicy><!-- never,always,interval n -->
<enabled>true</enabled>
<checksumPolicy>warn</checksumPolicy><!-- fail,ignore -->
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<layout>default</layout>
</repository>
</repositories>
列举几个常用的maven repository,分享一下,也防止长时间不用忘了:
<repositories>
<repository>
<id>jboss-cache</id>
<name>jboss-cache</name>
<url>http://repository.jboss.org/maven2</url>
</repository>
<repository>
<id>mvnsearch</id>
<name>mvnsearch Maven Repository</name>
<url>http://www.mvnsearch.org/maven2</url>
</repository>
<repository>
<id>ibiblio</id>
<name>ibiblio Maven Repository</name>
<url>http://www.ibiblio.org/maven2</url>
</repository>
<repository>
<id>mirrors.ibiblio</id>
<name>mirrors.ibiblio Maven Repository</name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2</url>
</repository>
<repository>
<id>repo.springsource.org</id>
<name>repo.springsource.org-releases</name>
<url>http://repo.springsource.org/libs-milestone-local</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
在记两个搜索jar包的maven依赖的常用地址:
http://search.maven.org/
http://mvnrepository.com/
私服主要作用是部署第三方构件,包含企业内部生成的构件以及无法从外部仓库直接获取的构件。
maven对项目编译,测试,打包,还可以将生成构建部署到仓库中。
distributionManagement有发布和快照两个版本,分别有id,name,url三项,对应远程唯一仓库:
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
mvn clean deploy在配置完成后构建输出部署到远程仓库。
SNAPSHOT版本带有时间戳,maven每天检查一次时间戳来更新,强制更新用mvn clean install-U。
镜像结合私服:
<mirrors>
<mirror>
<id>internal-repository</id>
<name>Internal Repository Manager</name>
<url>http://192.168.1.1/maven2/</url>
<mirrofOf>*</mirrorOf>
</mirror>
</mirrors>
仓库搜索服务:
sonatype nexus是最流行仓库管理软件:https://repository.sonatype.org/,支持关键字、类名搜索,坐标搜索,检验和搜索功能。。、
jarvana.com/ 支持关键字、类名搜索、构件下载,依赖声明片段
http://mvnbrowser.com/
http://mvnrepository.com/
国内连接maven官方的仓库更新依赖库,网速一般很慢,收集一些国内快速的maven仓库镜像以备用。
====================国内OSChina提供的镜像,非常不错===================
<mirror>
<id>CN</id>
<name>OSChina Central</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
========================================================
==================其他maven仓库镜像==========================
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
<mirror>
<id>net-cn</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://maven.net.cn/content/groups/public/</url>
</mirror>
<mirror>
<id>ui</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://uk.maven.org/maven2/</url>
</mirror>
<mirror>
<id>ibiblio</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
</mirror>
<mirror>
<id>jboss-public-repository-group</id>
<mirrorOf>central</mirrorOf>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
</mirror>
其它:
出现莫名问题,删除~/.m2/目录下对应子目录。
不同操作系统.m2目录内容一样,此文件夹可相互拷贝.
在主目录下,批量clean各代码包:dir=`pwd`; for i in `find $dir -name "pom.xml"`;do pom_path=${i%pom*};cd $pom_path; echo "current path is::::::::::::::::::::::::::::::::::::"$pom_path;mvn eclipse:eclipse;cd $dir;done
批量文件汇总: dir=`pwd`; for i in `find $dir -type d`;do cd $i; l=`echo $i|awk -F "/" '{print $5}'`;echo $i;cat *.csv|sort|uniq > $dir/g_${l}_all.csv;cd $dir;done
四、Maven仓库
Maven通过项目定义的坐标来管理这些依赖,而这些依赖的物理文件是通过Maven的仓库来统一管理的。
对于一个依赖坐标,它会按照如下方式反映到Maven的仓库中。
1、将groupId转化为路径:将groupId中的包名分隔符(.)转换成路径分隔符(/)。对于上面的例子就是 org.apache.struts -> org/apache/struts/
2、将artifactId转化为路径:在groupId转化的路径基础上连接artifactId。生成路径为: org/apache/struts/struts2-core/
3、将verion转化为路径:在artifactId转化的路径基础上连接version。生成路径为: org/apache/struts/struts2-core/2.3.8/
4、根据artifactId和version生成依赖包文件名:上例就是 struts2-core-2.3.8
5、根据依赖的打包方式确定文件的扩展名。对于上例它的扩展名就是.jar
这样根据路径和文件名就找到了这个物理文件在仓库中的位置:org/apache/struts/struts2-core/2.3.8/struts2-core-2.3.8.jar
Maven的仓库分为本地仓库和远程仓库。
本地仓库:是Maven在我们本机设置的仓库目录,默认目录为当前用户目录下的.m2/repository.
远程仓库包括*仓库、私服、其他公共仓库。
*仓库是Maven提供的远程仓库,地址是:http://repo.maven.apache.org/maven2
私服是我们为了节省带宽和时间,提升效率,在局域网架设的私有Maven仓库。
Maven在根据依赖坐标查找依赖时,首先会从本地仓库查找该依赖包,当本地仓库中没有这个依赖包时,Maven会从*仓库查找依赖,并下载到本地仓库。最后,在我们项目的classpath中引用本地仓库的依赖包路径。
五、聚合与继承
一个项目通常存在多个模块,每个模块都是作为一个独立的工程存在。通过Maven配置文件可以把多个模块聚合在一起进行编译发布,并且它的聚合非常简单只需要使用元素添加模块就可以完成聚合。我们参考struts2的pom.xml文件来看一下聚合的配置方式:
4.0.0
org.apache.struts
struts2-parent
2.3.8
org.apache.struts
struts2-apps
pom
Webapps
blank
mailreader
portlet
showcase
rest-showcase
另外,在这个项目的个各模块间通常是存在引用关系,并且每个模块会引用一些相同的依赖,Maven也提供了继承的机制来管理这些共同的依赖。你可以编写一 个pom.xml文件作为父级pom配置,各个模块在自己的pom.xml中继承父级pom文件,就像上面的示例那样,使用元素标识继承的父级pom文 件。
父级pom文件的编写:
1、父级pom文件的packaging必须是pom,它需要作为pom文件发布以便子pom继承
2、在父级pom可以使用配置依赖管理。在下的依赖声明不会引入实际依赖,但是可以让子模块继承依赖配置。例如,在子模块中我们只标识依赖的groupId和artifactId,它就可以根据父类的依赖管理获取这个依赖的version及exclussions等配置。
3、在父级pom中可以使用配置插件管理。作用和类似,只不过一个管理依赖一个管理插件。
子模块pom文件的编写:
1、需要使用元素标识继承的父pom
2、可以使用标识父级pom的物理路径,子模块会直接从指定的路径加载父级pom文件,未指定该元素时,子模块将根据父级pom的坐标从Maven仓库查找
3、子模块pom可以继承父级pom中除artifactId之外的大部分配置,因此子模块的groupId、version以及依赖的version都可以省略。
使用 OSC Maven 仓库: maven.oschina.net
1 安装
1.1 下载 Maven
下载 Maven 程序包,下载地址:http://maven.apache.org/download.cgi
1.2 安装 Maven
解压已下载的 Maven 程序包,到本地磁盘(如:D:\SDK\Maven)。
1.3 配置环境变量
设置以下环境变量:
M2_HOME = D:\SDK\Maven
PATH = ...;%M2_HOME%\bin
1.4 测试安装
可使用 mvn -version 命令查看已安装的 Maven 版本号。
2 基础配置
修改 Maven 配置文件(setting.xml),可修改全局配置或用户配置:
全局配置:%M2_HOME%\conf\settings.xml
用户配置:用户目录\.m2\settings.xml
2.1 配置 OSC Maven 镜像
<mirrors>
...
<mirror>
<id>osc</id>
<mirrorOf>*</mirrorOf>
<url>http://maven.oschina.net/content/groups/public/</url>
</mirror>
...
</mirrors>
2.2 配置 OSC Maven 仓库
<profiles>
...
<profile>
<id>osc</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>osc</id>
<url>http://maven.oschina.net/content/groups/public/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>osc</id>
<url>http://maven.oschina.net/content/groups/public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
...
</profiles>
3 高级配置
注意:以下高级配置可根据实际情况有选择性地使用。
3.1 配置本地仓库路径
若需要指定 Maven 本地仓库的路径时,可进行如下配置:
<localRepository>D:/Repository/Maven</localRepository>
需要根据实际情况进行配置。
3.2 配置 HTTP 代理
对于有些公司而言,需要配置 HTTP 代理才能上外网,可进行如下配置:
<proxies>
...
<proxy>
<active>true</active>
<protocol>http</protocol>
<host>xxx.xxx.xxx.xxx</host>
<port>xxxx</port>
</proxy>
...
</proxies>
需要根据实际情况进行配置。
3.3 配置 Maven 用户
若需要使用 mvn deploy 命令,将自己的 jar 包上传到 OSC Maven 仓库时,可进行如下配置:
<servers>
...
<server>
<id>osc</id>
<username>xxx</username>
<password>xxx</password>
</server>
...
</servers>
提示:需要联系 OSC Maven 仓库管理员(廖凯)获取用户名与密码。
此外,需要在 pom.xml 中添加以下配置:
...
<distributionManagement>
<repository>
<id>osc</id>
<url>http://maven.oschina.net/content/repositories/thirdparty/</url>
</repository>
<snapshotRepository>
<id>osc</id>
<url>http://maven.oschina.net/content/repositories/osc_snapshots/</url>
</snapshotRepository>
</distributionManagement>
...
4. 理解 pom.xml
当您打开自动生成的 pom.xml,或许会感觉到可读性不太好,有必要做一下格式化,经过整理后是这样的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
< project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
< modelVersion >4.0.0</ modelVersion >
< groupId >com.smart</ groupId >
< artifactId >smart-demo</ artifactId >
< version >1.0</ version >
< packaging >war</ packaging >
< name >smart-demo Maven Webapp</ name >
< url >http://maven.apache.org</ url >
< dependencies >
< dependency >
< groupId >junit</ groupId >
< artifactId >junit</ artifactId >
< version >3.8.1</ version >
< scope >test</ scope >
</ dependency >
</ dependencies >
< build >
< finalName >smart-demo</ finalName >
</ build >
</ project >
|
从上往下简要说明一下:
modelVersion:这个是 POM 的版本号,现在都是 4.0.0 的,必须得有,但不需要修改。
groupId、artifactId、version:分别表示 Maven 项目的组织名、构件名、版本号,它们三个合起来就是 Maven 坐标,根据这个坐标可以在 Maven 仓库中对应唯一的 Maven 构件。
packaging:表示该项目的打包方式,war 表示打包为 war 文件,默认为 jar,表示打包为 jar 文件。
name、url:表示该项目的名称与 URL 地址,意义不大,可以省略。
dependencies:定义该项目的依赖关系,其中每一个 dependency 对应一个 Maven 项目,可见 Maven 坐标再次出现,还多了一个 scope,表示作用域(下面会描述)。
build:表示与构建相关的配置,这里的 finalName 表示最终构建后的名称 smart-demo.war,这里的 finalName 还可以使用另一种方式来定义(下面会描述)。
如果用树形图来表达 pom.xml,那么会更加清晰:
可见,除了项目的基本信息(Maven 坐标、打包方式等)以外,每个 pom.xml 都应该包括:
Lifecycle(生命周期)
Plugins(插件)
Dependencies(依赖)
Lifecycle 是项目构建的生命周期,它包括 9 个 Phase(阶段)。
大家知道,Maven 是一个核心加上多个插件的架构,而这些插件提供了一系列非常重要的功能,这些插件会在许多阶段里发挥重要作用。
阶段 | 插件 | 作用 |
clean | clean | 清理自动生成的文件,也就是 target 目录 |
validate | 由 Maven 核心负责 | 验证 Maven 描述文件是否有效 |
compile | compiler、resources | 编译 Java 源码 |
test | compiler、surefire、resources | 运行测试代码 |
package | war | 项目打包,就是生成构件包,也就是打 war 包 |
verify | 由 Maven 核心负责 | 验证构件包是否有效 |
install | install | 将构件包安装到本地仓库 |
site | site | 生成项目站点,就是一堆静态网页文件,包括 JavaDoc |
deploy | deploy | 将构件包部署到远程仓库 |
以上表格中所出现的插件名称实际上是插件的别名(或称为前缀),比如:compiler 实际上是 org.apache.maven.plugins:maven-compiler-plugin:2.3.2,这个才是 Maven 插件的完全名称。
每个插件又包括了一些列的 Goal(目标),以 compiler 插件为例,它包括以下目标:
compiler:help:用于显示 compiler 插件的使用帮助。
compiler:compile:用于编译 main 目录下的 Java 代码。
compiler:testCompile:用于编译 test 目录下的 Java 代码。
可见,插件目标才是具体干活的人,一个插件包括了一个多个目标,一个阶段可由零个或多个插件来提供支持。
我们可以在 pom.xml 中定义一些列的项目依赖(构件包),每个构件包都会有一个 Scope(作用域),它表示该构件包在什么时候起作用,包括以下五种:
compile:默认作用域,在编译、测试、运行时有效
test:对于测试时有效
runtime:对于测试、运行时有效
provided:对于编译、测试时有效,但在运行时无效
system:与 provided 类似,但依赖于系统资源
可用一张矩阵表格来表示:
作用域 | 编译时有效 | 测试时有效 | 运行时有效 | 示例 |
compile | √ | √ | √ | smart-framework.jar |
test | √ | junit.jar | ||
runtime | √ | √ | mysql-connector-java.jar | |
provided | √ | √ | servlet-api.jar | |
system | √ | √ | JDK 的 rt.jar |
pom.xml 大致解释一下:
我们可使用 properties 来定义一些配置属性,例如:project.build.sourceEncoding(项目构建源码编码方式),可设置为 UTF-8,可防止中文乱码。也可定义相关构件包版本号,例如:smart.version,便于日后统一升级。
建议使用最新版本的 JUnit,通过 Archetype 自动生成的 JUnit 太老了(3.8.1),可改为最新版(4.11)。
因为没必要使用 MySQL 客户端的 API,它仅仅在运行时有效,所以我们将 MySQL 构件包的作用域设置为 runtime。
因为我们只想在代码中使用 Servlet API,而不想将它所对应的 jar 包放入 WEB-INF 的 lib 目录下,所以我们可设置 Servlet 构件包的作用域为 provided。
为了保证在 JDK 1.6 运行,我们可配置 maven-compiler-plugin 插件,设置输入源码为 1.6,编译输出的字节码也为 1.6。
如果想跳过测试,可配置 maven-surefire-plugin 插件,将 skipTests 设置为 true。
如果想配置生成的 war 包为 artifactId,可修改 maven-war-plugin 插件,将 warName 修改为 ${project.artifactId},这样就无需再配置 finalName 了。
如果想通过 Maven 将应用部署到 Tomcat 中,可使用 tomcat7-maven-plugin 插件,可使用 mvn tomcat7:run-war 命令来运行 war 包。
5. 使用 Maven 命令
前面我们已经使用了几个 Maven 命令,例如:mvn archetype:generate,mvn tomcat7:run-war 等。其实,可使用两种不同的方式来执行 Maven 命令:
方式一:mvn <插件>:<目标> [参数]
- mvn source:jar 生成源码包
- mvn javadoc:jar 生成帮助文档
方式二:mvn <阶段>
现在我们接触到的都是第一种方式,而第二种方式才是我们日常中使用最频繁的,例如:
mvn clean:清空输出目录(即 target 目录),清理上一次构建生成的文件
mvn compile:编译为class文件,编译项目的主源码,一般来说,是对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中,不生成jar包。
mvn package:生成构件包(一般为 jar 包或 war 包),接受编译好的代码,打包成可发布的格式,如JAR。
mvn install:将构件包安装到本地仓库,供本地其他Maven项目使用。
mvn deploy:将构件包部署到远程仓库,供其他开发人员和Maven项目使用。
validate: 验证项目是否正确,所有必须的信息是否可用。
test: 使用单元测试框架对编译后的源码进行测试 , 测试代码不会被打包或部署。
integration-test: process and deploy the package if necessary into an environment where integration tests can be run
verify: run any checks to verify the package is valid and meets quality criteria
site: 生成项目站点文档,清理项目(clean the project),拷贝依赖(copy dependencies)和打包项目(package the project,即执行所有阶段来打包, 注意的是,阶段(phase)和目标(goal)可以顺序执行。此阶段根据项目的POM文件生成了一个site。你可以发现在target/site目录下生成了文档。
- mvn clean dependency:copy-dependencies package:阶段实际上被映射到底层的目标。每个阶段执行的具体目标依赖于项目的包装类型。例如,如果项目类型是一个JAR的话,package 执行 jar:jar ,而如果项目类型是 WAR 的话,执行的是 war:war。
项目对象模型(Project Object Model),通常称为POM文件。
POM
pom.xml文件是一个Maven项目的核心配置文件。它是包含了大部分你期望如何build一个项目所需信息的一个配置文件。POM比较庞大而且比较复杂,但是即使没有完全理解,我们也能够有效地使用它。该项目的POM如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
< project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" >
< modelVersion >4.0.0</ modelVersion >
< groupId >com.oschina.test</ groupId >
< artifactId >my-maven-test</ artifactId >
< packaging >jar</ packaging >
< version >1.0-SNAPSHOT</ version >
< name >my-maven-test</ name >
< url >http://maven.apache.org</ url >
< dependencies >
< dependency >
< groupId >junit</ groupId >
< artifactId >junit</ artifactId >
< version >3.8.1</ version >
< scope >test</ scope >
</ dependency >
</ dependencies >
</ project >
|
What did I just do?
你执行了Maven的目标(goal) archetype:generate,并添加了一系列的参数。前缀archetype是包含了目标的插件。如果你熟悉Ant ,你可以设想这类似于Ant中的任务(task)。这个目标创建了一个基于原型(archetype)的简单项目。我只想说,一个插件是一系列拥有共同目的(general common purpose)的目标的集合。例如,jboss-maven-plugin插件,其目的是“处理各种JBoss项目(deal with various jboss items)” 。
Build the Project
1
|
mvn package |
命令行中将打印编译时的各种信息,输出了“BUILD SUCCESS”时表示项目编译成功了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
[WARNING] [WARNING] Some problems were encountered while building the effective settings
[WARNING] Unrecognised tag: 'activeProfile' (position: START_TAG seen ...< /activeProfiles >\n -->\n <activeProfile>... @278:18) @ /usr/local/apache-maven-3 .1.1 /conf/settings .xml, line 278, column 18
[WARNING] Unrecognised tag: 'activeProfile' (position: START_TAG seen ...< /activeProfiles >\n -->\n <activeProfile>... @278:18) @ /Users/flanliulf/ .m2 /settings .xml, line 278, column 18
[WARNING] [INFO] Scanning for projects...
[INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building my-maven- test 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------ Downloading: http: //repo .maven.apache.org /maven2/org/apache/maven/plugins/maven-resources-plugin/2 .6 /maven-resources-plugin-2 .6.pom
Downloaded: http: //repo .maven.apache.org /maven2/org/apache/maven/plugins/maven-resources-plugin/2 .6 /maven-resources-plugin-2 .6.pom (8 KB at 1.0 KB /sec )
。。。(省略) Downloaded: http: //repo .maven.apache.org /maven2/org/apache/maven/surefire/surefire-junit3/2 .12.4 /surefire-junit3-2 .12.4.jar (26 KB at 13.9 KB /sec )
------------------------------------------------------- T E S T S
------------------------------------------------------- Running com.oschina. test .AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ my-maven- test ---
Downloading: http: //repo .maven.apache.org /maven2/org/apache/maven/maven-archiver/2 .5 /maven-archiver-2 .5.pom
Downloaded: http: //repo .maven.apache.org /maven2/org/apache/maven/maven-archiver/2 .5 /maven-archiver-2 .5.pom (5 KB at 3.5 KB /sec )
。。。(省略) Downloaded: http: //repo .maven.apache.org /maven2/org/codehaus/plexus/plexus-archiver/2 .1 /plexus-archiver-2 .1.jar (181 KB at 32.7 KB /sec )
[INFO] Building jar: /Users/flanliulf/maven-proj/my-maven-test/target/my-maven-test-1 .0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time : 1:42.914s
[INFO] Finished at: Thu Jan 23 15:41:20 CST 2014 [INFO] Final Memory: 11M /81M
[INFO] ------------------------------------------------------------------------ |
不同于执行的第一个命令(archetype:generate),你可能会注意到第二个是简单的一个字 - package。这不是一个目标(goal),这是一个阶段(phase)。 一个阶段是一个构建的生命周期(build lifecycle)中的一步,一个构建的生命周期,可以看做是一系列阶段的有序集合。当指定了一个阶段时, Maven将顺序执行每个阶段。例如,如果我们执行编译(compile)阶段,实际被执行的各个阶段如下:
1
2
3
4
5
6
|
1.validate 2.generate-sources 3.process-sources 4.generate-resources 5.process-resources 6.compile |
你可以使用下面的命令来测试刚刚编辑和打包的jar:
1
|
java - cp target /my-maven-test-1 .0-SNAPSHOT.jar com.oschina. test .App
|
将会得到如下输出:
1
|
Hello World! |
maven私服搭建:
http://blog.csdn.net/shenshen123jun/article/details/9084293
http://blog.csdn.net/dhmpgt/article/details/9998321
http://www.sonatype.org/nexus/