maven 是基于项目对象模型(Project Object Model, POM),通过一小段描述信息来管理项目的构建,报告,文档的软件项目管理工具。

目前,绝大多数开发人员都把 Ant 当作 java编程项目的标准构建工具。但是,Ant 的项目管理工具(作为 make的替代工具)不能满足绝大多数开发人员的需要。通过检查 Ant 构建文件,很难发现项目的相关性信息和其它元信息(如开发人员/拥有者、版本或站点主页)。

Maven 除了以程序构建能力为特色之外,还提供 Ant 所缺少的高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目,而使用 Ant 则需要十几行。事实上,由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目现在使用 Maven,而且公司项目采用 Maven 的比例在持续增长。

Maven这个单词来自于意第绪语,意为知识的积累,最早在Jakata Turbine项目中它开始被用来试图简化构建过程。当时有很多项目,它们的Ant build文件仅有细微的差别,而JAR文件都由CVS来维护。于是Maven创始者开始了Maven这个项目,该项目的清晰定义包括,一种很方便的发布项目信息的方式,以及一种在多个项目中共享JAR的方式。


Maven 和 Ant 有什么不同呢?

Ant 为 Java 技术开发项目提供跨平台构建任务

Maven 本身描述项目的高级方面,它从 Ant 借用了绝大多数构建任务


要先装好jdk

官网:http://maven.apache.org/index.html


安装过程:

[root@MiWiFi-R1CM-srv ~]# cd /usr/local/src/
[root@MiWiFi-R1CM-srv apache-maven]# tar zxf apache-maven-3.0.5-bin.tar.gz -C /usr/local/
[root@MiWiFi-R1CM-srv apache-maven]# mv /usr/local/apache-maven-3.0.5 /usr/local/apache-maven


配置环境变量:

echo -e '#!/bin/bash\nexport MAVEN_HOME=/usr/local/apache-maven\nexport PATH=$PATH:$MAVEN_HOME/bin'  >/etc/profile.d/maven.sh

[root@MiWiFi-R1CM-srv apache-maven]# source /etc/profile.d/maven.sh


验证:

[root@MiWiFi-R1CM-srv apache-maven]# mvn -v

出现下面提示代表安装成功

Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 21:51:28+0800)

Maven home: /usr/local/apache-maven

Java version: 1.8.0_60, vendor: Oracle Corporation

Java home: /usr/local/src/jdk1.8.0_60/jre

Default locale: en_US, platform encoding: UTF-8

OS name: "linux", version: "2.6.32-431.el6.x86_64", arch: "amd64", family: "unix"


maven的配置文件:

setting.xml 配置文件,在安装目录(/usr/local/apache-maven/conf/settings.xml)和本地目录(/home/homer/.m2/settings.xml)都有,区别:

1) 安装目录(conf/settings.xml),是对本机器上所有用户有效(同一台机器可以有多个用户,均有效),全局设置

2) 当前目录(.m2/settings.xml),仅对当前用户有效,局部设置

maven还有一个配置文件pom.xml,是在java项目的根目录下,仅对当前项目有效,局部设置


更多关于maven的使用:

http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-1-406235-zhs.html



前边简单介绍了Maven,Maven默认提供的中央仓库是在远程网络服务Appache提供的,这对于我们开发时不合理的。如果我们没网了或者什么情况,我们怎么办?也就是说我们队中央仓库的依赖性太大。而Nexus私服则可以解决我们这个问题。先看下这张图应该大家就非才明白了:

这样就相当于在我们本地的局域网搭建了一个类似中央仓库的服务器,我们开始将中央仓库的一些资料下载到私服务器上,然后平时我们的maven项目就是直接访问局域网内的私服即可,既节省了网络带宽也会加速项目搭建的进程,这样对我们开发来说,对公司来说都是非常好的选择。


搭建Nexus:

要先装好jdk

下载地址:http://www.sonatype.org/nexus/archived_version?id=38

[root@MiWiFi-R1CM-srv src]# wget  
[root@MiWiFi-R1CM-srv src]# tar -zxf nexus-2.9.0-bundle.tar.gz -C /usr/local/
[root@MiWiFi-R1CM-srv src]# mv /usr/local/nexus-2.9.0-bundle /usr/local/nexus


配置nexus(根据需要配置nexus监听的端口号):

sed -i 's/application-port=8081/application-port=8088/g' nexus/conf/nexus.properties


启动方法一、

配置环境变量(RUN_AS_USER=root)表示使用root运行nexus:

[root@MiWiFi-R1CM-srv ~]# echo -e '#!/bin/bash\nexport NEXUS_HOME=/usr/local/nexus\nexport PATH=$PATH:$NEXUS_HOME/bin\nexport RUN_AS_USER=root' >/etc/profile.d/nexus.sh
[root@MiWiFi-R1CM-srv ~]# source /etc/profile.d/nexus.sh
[root@MiWiFi-R1CM-srv local]# /usr/local/nexus/bin/nexus start
[root@MiWiFi-R1CM-srv local]# netstat -tlunp |grep 8088


tcp        0      0 0.0.0.0:8088                0.0.0.0:*                   LISTEN      2671/java


启动方法二(service)、

step1(拷贝启动脚本)

[root@MiWiFi-R1CM-srv local]# cd /usr/local/nexus/
[root@MiWiFi-R1CM-srv nexus]# cp bin/jsw/linux-x86-64/nexus /etc/init.d/

step2(修改脚本)

[root@MiWiFi-R1CM-srv nexus]# vim /etc/init.d/nexus

新增六行参数

# chkconfig: 2345 66 39
# description: running&stop nexus service.
RUN_AS_USER=root
NEXUS_HOME=/opt/pht/nexus-2.5.1-01
PLATFORM=linux-x86-64
PLATFORM_DIR="${NEXUS_HOME}/bin/jsw/${PLATFORM}"


修改三行参数

WRAPPER_CMD="${PLATFORM_DIR}/wrapper"
WRAPPER_CONF="${PLATFORM_DIR}/../conf/wrapper.conf"
PIDDIR="${NEXUS_HOME}"


编辑warpper配置文件

[root@MiWiFi-R1CM-srv nexus]# vim /usr/local/nexus/bin/jsw/linux-x86-64/../conf/wrapper.conf

修改一行参数:

修改前:

wrapper.java.command=java

修改后(你的jdk安装目录):

wrapper.java.command=/usr/jdk1.7.0_67/bin/java

step3(增加执行权限)

[root@MiWiFi-R1CM-srv nexus]# chmod +x /etc/init.d/nexus

step4(交给chkconfig管理)

[root@MiWiFi-R1CM-srv nexus]# chkconfig --add nexus

step5(启动)

[root@MiWiFi-R1CM-srv nexus]# service nexus start

step6(排错)

[root@MiWiFi-R1CM-srv nexus]#  ps -ef |grep nexus
root     12762 34939  0 10:08 pts/2    00:00:00 grep nexus

nexus进程刚开始会出现,过一会就没有了,继续查看连接状态

[root@MiWiFi-R1CM-srv nexus]# netstat -tlun |grep 7777
[root@MiWiFi-R1CM-srv nexus]#

没有连接,查看wrapper日志文件


启动报错解决:

wrapper  | --> Wrapper Started as Daemon
wrapper  | Launching a JVM...
wrapper  | Unable to start JVM: No such file or directory (2)
wrapper  | JVM exited while loading the application.
wrapper  | Reloading Wrapper configuration...
wrapper  | Launching a JVM...
wrapper  | Unable to start JVM: No such file or directory (2)
wrapper  | JVM exited while loading the application.
jvm 2    | wrapper  | Unable to start JVM: No such file or directory (2)
wrapper  | Reloading Wrapper configuration...
wrapper  | Launching a JVM...
wrapper  | Unable to start JVM: No such file or directory (2)
wrapper  | JVM exited while loading the application.
jvm 3    | wrapper  | Unable to start JVM: No such file or directory (2)
wrapper  | Reloading Wrapper configuration...
wrapper  | Launching a JVM...
wrapper  | Unable to start JVM: No such file or directory (2)
wrapper  | JVM exited while loading the application.
jvm 4    | wrapper  | Unable to start JVM: No such file or directory (2)
wrapper  | Reloading Wrapper configuration...
wrapper  | Launching a JVM...
wrapper  | Unable to start JVM: No such file or directory (2)
wrapper  | JVM exited while loading the application.
jvm 5    | wrapper  | Unable to start JVM: No such file or directory (2)
wrapper  | There were 5 failed launches in a row, each lasting less than 300 seconds.  Giving up.
wrapper  |   There may be a configuration problem: please check the logs.
wrapper  | <-- Wrapper Stopped


wrapper配置文件中没有指定jdk的安装路径,修改之。

wrapper.java.command=/usr/jdk1.7.0_67/bin/


继续报错:

wrapper  | --> Wrapper Started as Daemon
wrapper  | Launching a JVM...
wrapper  | Unable to start JVM: Permission denied (13)
wrapper  | JVM exited while loading the application.
wrapper  | Reloading Wrapper configuration...
wrapper  | Launching a JVM...
wrapper  | Unable to start JVM: Permission denied (13)
wrapper  | JVM exited while loading the application.
jvm 2    | wrapper  | Unable to start JVM: Permission denied (13)
wrapper  | Reloading Wrapper configuration...
wrapper  | Launching a JVM...
wrapper  | Unable to start JVM: Permission denied (13)
wrapper  | JVM exited while loading the application.
jvm 3    | wrapper  | Unable to start JVM: Permission denied (13)
wrapper  | Reloading Wrapper configuration...
wrapper  | Launching a JVM...
wrapper  | Unable to start JVM: Permission denied (13)
wrapper  | JVM exited while loading the application.
jvm 4    | wrapper  | Unable to start JVM: Permission denied (13)
wrapper  | Reloading Wrapper configuration...
wrapper  | Launching a JVM...
wrapper  | Unable to start JVM: Permission denied (13)
wrapper  | JVM exited while loading the application.
jvm 5    | wrapper  | Unable to start JVM: Permission denied (13)
wrapper  | There were 5 failed launches in a row, each lasting less than 300 seconds.  Giving up.
wrapper  |   There may be a configuration problem: please check the logs.
wrapper  | <-- Wrapper Stopped

wrapper配置文件中指定java绝对路径,而不是jdk的bin路径。。。修改之。

wrapper.java.command=/usr/jdk1.7.0_67/bin/java


这次ok了。

访问nexus:

http://192.168.31.123:8088/nexus/