Maven配置和使用一
Maven配置和使用(一)
Maven配置和使用
Maven简介
如果我要是进行归类的,也会把Maven规划为SCM软件的一种,它也属于一种项目的管理工具,但是与传统的SVN等工具不同的是,Maven主要是进行开发包的管理。
现在的软件项目的开发绝对不可能自己从头写到尾,因为在这之中需要引入大量的第三方开发工具包,而我们对于这些开发包的引用,最初的做法:下载下来*.jar文件,而后在需要的地方拷贝到项目的WEB-INF/lib目录之中就可以使用了,但是这种方式很多时候并不方便,如果说现在开发包的版本很多。
所以为了解决这样的问题,专门由Apache提供了一个开发包的工具管理—–Maven
Maven除了开发包管理之外还可具备项目的编译、测试等功能。
Maven在实际使用中–主要是开发包的管理
下面首先来观察一个简单的开发包管理操作:
此时最终会形成一个cn.mldn.em的总的开发包。随后会开始进行项目的构建,但是这个的构建过程取决于网络问题。
在整个的Maven之中,对于所有的开发包管理实际上都是依靠了一个pom.xml文件完成的,这个文件可以实现开发包的版本切换,当然也可以进行一些连接的配置,或者是项目子模块的配置。
如果现在需要进行开发包的管理,那么可以登陆一个Maven仓库:
范例:更换Junit版本
实际上Maven会把所有的开发包放在指定的目录之中:C:/User/用户名/.m2/repository
这个路径在后期是可以指定的
总结:
1.Maven适合于做开发包的管理
2.如果所有的开发者都通过网络下载开发包,那么这个速度实在是不敢恭维
3.eclipse如果要建立Maven项目,JDK版本是有差异的。
- 在windows中配置maven
如果要想进行Maven的使用,那么必须登陆:maven.apache.org上取得Maven开发包。
下载首页:
外国的官网项目代码一般都有相关的相关文档手册
本次使用的开发包版本为:3.5.4版本,但是需要记住的是从Maven2.x开始,Maven分为两种版本:Maven1、Maven2。现在使用的都是Maven2的版本。
配置的话:Configure文档
下载版本:
linux下用的tar.gz包,也有windows下的zip包
相关文档说明:
现在是在windows下进行配置:所以此次使用的版本为:apache-maven-3.5.4-bin.zip,将其进行解压缩。
1.Maven本身需要JDK的配置支持,所以首先一定要在系统环境之中配置JAVA_HOME(JDK安装目录)
2.将Maven的开发工具包的命令设置到Path属性之中:
–Maven的命令路径:E:\Maven\apache-maven-3.5.4-bin\apache-maven-3.5.4\bin
3.测试Maven的命令是否已经配置成功,随意打开一个命令行窗口,输入:”mvn -v”:
如果报错:
经查,此问题是由于JDK版本过低导致,最新的MAVEN 3.3.3 必须由JDK1.7以上支持,
所以更改JavaHome为Jdk1.7以上即可。
表示Maven已经配置完成。(描述整个Maven当前的环境信息)
这样并不意味着配置全部完成。
4.如果要想进行Maven的操作,默认情况下使用的是都是远程的国外的仓库进行连接,那么这个速度实在是太慢了,所以为了让开发包的下载速度变快,建议将现在的仓库变为国内仓库(不用过墙):
如果要想修改为国内仓库,可以使用oschina的提供的Maven仓库,仓库地址:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>localMaven</id>
<mirrorOf>*</mirrorOf>
<name>MyMaven</name>
<url>http://maven.oschina.net/content/groups/public/</url>
</mirror>
</mirrors>
</settings>
随后修改Maven开发包中的”conf/settings.xml”文件:
E:\Maven\apache-maven-3.5.4-bin\apache-maven-3.5.4\conf\settings.xml
把下图的内容修改:
表示配置好了国内仓库
注意这个国内仓库 已经不能用了:
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
或者:
配置本地仓库路径地址:
<localRepository>E:\Maven\repository</localRepository>
这样再进行开发包下载的时候速度就会得到很大的提升,如果你不配置,那么整个程序的执行速度就会非常慢,(因为伟大的防火墙在阻挠)
5.随后利用Maven进行一次项目的开发编写操作,本次先使用记事本的方式完成,目的是希望可以输出”hello world”!
在E盘上建立一个javawork目录,所有的信息都保存在此目录之中:
进入到javawork目录之中(cd javawork),随后需要建立一个文件,在我们的maven里面所有的java源程序都要求保存在src目录下(src/main/java/包名称)
E:\javawork>mkdir src\main\java\cn\mldn
在这个 src\main\java\cn\mldn目录下新建一个Hello.java的文件
package cn.mldn
public class Hello{
public static void main(String args[]){
System.out.println(“Hello World!”);
}
}
如果要想编译,还需要在E:\javawork目录下存在有一个pom.xml文件:这个文件直接复制pom.xml文件
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.mldn</groupId>
<artifactId>em</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>em</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
在此文件之中有以下的几个重要的配置信息:
<modelVersion>4.0.0</modelVersion>
这个表示POM模块版本信息(通常都是4.0.0)
<groupId>cn.mldn</groupId>
描述的是项目所属的组织名称,现在是cn.mldn
<artifactId>em</artifactId>
描述的是项目的名称,最后会与groupId结合作为包名称
<version>0.0.1-SNAPSHOT</version>
描述项目的版本号
<packaging>jar</packaging>
最终项目的发布形式,一般都是jar或者war;(war包指的是web的应用文件)
6.对项目进行打包编译:(项目打包编译必须要有pom.xml文件的支持,在路径下必须存在此文件)
cd javawork
mvn compile
编译时会从远程下载jar包,一次执行,多次使用
7.这个时候已经完成了代码的编译;
此时会在“e:\javawork”目录下生成一个target的子目录,这个子目录保存的就是所有编译后的程序文件 Hello.class
8.将生成的*.class文件打包成一个jar包的形式出现(还是在pom.xml所在的目录):
mvn package
也会从网络上下载需要jar包,一次下载,多次使用
于此同时,本地仓库的位置下的jar包会逐渐增大(几个G很正常):
由于之前配置了setting.xml下的本地仓库的位置:
E:\Maven\repository
所以
表示打成了jar包(可运行)
此时的jar文件保存在了“e:\javawork\target”目录下;此时的jar宝名称为:em-0.0.1-SNAPSHOT.jar
这个名称是与pom.xml中配置的有关系 版本号0.0.1-SNAPSHOT name em有关
9.直接执行jar文件(在javawork目录下运行)
java -cp target/em-0.0.1-SNAPSHOT.jar cn.mldn.Hello
这样就完成了整个的Maven基础的操作开发,所以现在可以发现,Maven可以负责开发包的管理,可以负责项目的打包生成。通过Maven管理的项目软件,非常适合于现在的开源环境,因为对于项目的打包会非常的容易处理。
很多包都是以em-0.0.1-SNAPSHOT.jar 的形式出现。现在几乎所有的项目都是用Maven进行开发包的管理和控制,以及打包。
所有的开发团队要求用Maven进行开发编写
maven还可以写测试
重点:—对于开发包进行有效管理
在Linux下配置Maven
本次在Linux下的Maven配置和之前在windows下的配置区别不大:
1.需要准备出Linux下的Maven开发包:
apache-maven-3.5.4-bin.tar.gz,将开发包通过FTP上传到Linux之中
2.上传之后开发包会保存在“/srv/ftp”目录之中,随后将其解压缩到“/usr/local”目录下
前提:需要在此Linux系统之中准备好相应的JDK开发环境(JAVA_HOME)
tar xzvf /srv/ftp/apache-maven-3.5.4-bin.tar.gz -C /usr/local
3.为了方便配置建议将maven开发包的目录进行更名,
mv apache-maven-3.5.4/ maven
4.在环境配置文件之中,配置Maven的相关信息
M2_HOME:是Maven2版本之后标记
vim /etc/profile 修改系统环境变量属性
在里面追加如下的内容:
export M2_HOME = /usr/local/maven
export PATH =
P
A
T
H
:
P A T H : JAVA_HOME/bin:$M2_HOME/bin:
5.使用source命令,让配置立即生效:
source /etc/profile
6.随后继续使用“mvn -v”的命令来测当前的Maven是否工作正常
会显示Maven的版本信息以及jdk版本信息
7.下面需要进行仓库信息的配置,修改/usr/local/maven/conf/settings.xml文件
执行:vim /usr/local/maven/conf/settings.xm
找mirrors对应项,配置为国内本地仓库
8.保存退出之后下载在“/usr/local/”目录下创建javawork目录:而后在javawork目录里面需要有/src/main/java/cn/mldn/
建立相应的文件目录:
mkdir -p /usr/local/javawork//src/main/java/cn/mldn/
在/usr/local/javawork//src/main/java/cn/mldn/目录下创建Hello.java的文件:
vim Hello.java
将pom.xml文件拷贝到项目之中
通过ftp上传之后,随后拷贝到/usr/local/javawork/目录里边
此时pom.xml与src目录保存在同级别:
cp /srv/ftp/pom.xml /usr/local/javawork
9.对程序进行编译处理:
mvn compile
此时如果连不上一些仓库,可以修改为国内仓库
也可能是因为DNS没有配置
vim /etc/resolv.conf
追加:
nameserver 114.114.114.114
先测试 ping
或者选择重启网卡
/etc/init.d/networking restart
之后继续执行 mvn compile
10.编译之后一定会在“/usr/local/javawork/target”目录下胜场class文件,而后将这些文件进行打包处理。
mvn package
11.生成*.jar文件之后就可以进行程序的直接执行:
java -cp target/em-0.0.1-SNAPSHOT.jar cn.mldn.Hello
此时就完成了在Linux下的Maven配置,基本的就成和windows相似。
关于静态IP:
1.Maven这种配置工具在各个平台下(Linux、Windows、Unix)
的使用都是类似的
2.在Linux中静态IP的配置
需要打开一个静态IP的配置文件
vim /etc/network/interfaces (描述整个Linux的静态配置)
在这个文件中如果是自动的IP地址获取,则信息如下:
主要是DHCP
如果要想进行手工的IP配置,则需要将动态IP注释掉,而后增加如下内容:
eno16777736 :网卡名字 static:表示静态
adress: IP地址
netmask :子网掩码
gateway :网关
当配置文件完成之后,还需要进行DNS解析的文件配置:
vim /etc/resolv.conf
打开之后增加DNS地址信息:
nameserver 114.114.114.114
重新启动网卡
/etc/init.d/networking restart
如果你配置的是新的静态IP地址,那么你的SSH需要重新进行连接
强烈建议:如果不是必须,如果你的linux不是作为公共服务器连接,不要去配置静态IP
个人使用Linux 建议大家虚拟机网络中使用NAT模式
但是在局域网内,如果你要是多台主机连接一台linux服务器,则设置 桥接模式,个人不需要用桥接模式。
- *搭建Nexus私服
在一个我们的项目的团队之中,一定会有多台主机需要通过Maven取得相关的开发包,那么这个时候如果所有的主机都通过Maven的服务器进行开发包的下载,基本上每台电脑上缓存(1G-2G),那么这个时候网络根本就受不了,而且这些包都是重复下载的,没有任何意义,正因为如此,在团队的项目开发之中,会使用Nexus工具搭建一个私服,所有的开发者通过这个私服进行下载,如果现在需要的一个开发包在私服上不存在,那么就会自动通过一个Maven的中央仓库进行下载,并且将这个开发包保存在Nexus服务器上, 这样当其他人需要此开发包的时候就不再需要通过网络下载开发包,而是直接使用Nexus服务器上的开发包即可。
Nexus基本结构:
这个工具是免费的(Nexus),可以直接通过“ ”网站上下载:
OOS免费开源版本:
本次使用的是“nexus-2.14.4-03-bundle.tar.gz”开发版本,这个版本就是一个war文件,上传到linux下即可(不一定要在Linux下配置),各个平台都可以配置,
因为这个地方需要下载包,而且下载包默认都是在C盘,系统受不了。
建议最好有单独的服务器运行私服Nexus
前提:你的Linux系统里面已经配置好了JDK以及JAVA_HOME
1.将nexus开发包进行上传;
2.随后将文件解压缩到“/usr/local/mynexus”目录之中
先建立“/usr/local/mynexus”文件夹:
mkdir /usr/local/mynexus
将上传的压缩文件进行解压缩控制:
tar xzvf /srv/ftp/nexus-2.14.4-03-bundle.tar.gz -C /usr/local/mynexus
cd /usr/local/mynexus
解压缩后可以发现会有两个子文件夹出现,主要使用的是nexus-2.14.4-03,另外一个是“sonatype-work”保存的是所有的配置文件的信息。
3.进入到/usr/local/mynexus/nexus-2.14.4-03目录下
cd /usr/local/mynexus/nexus-2.14.4-03
而后准备启动nexus的项目
nexus自动集成了jetty工具包,这个就属于小型的webContainer
,它可以自动启动一个web服务
进入到bin目录下
cd /usr/local/mynexus/nexus-2.14.4-03/bin
编辑“nexus”文件
vim /usr/local/mynexus/nexus-2.14.4-03/bin/nexus
里边有个RUN_AS_USER,修改为root
需要修改运行的用户(没用):RUN_AS_USER = root
启动nexus服务:bin目录下执行
cd /usr/local/mynexus/nexus-2.14.4-03/bin
./nexus start
4.现在相当与内部启动了一个小型的WEB服务器,那么这个服务器可以直接通过IP地址找到
连接地址: 地址:8081/nexus/
就可以进入到控制台:不要随意修改
5.完成之后进行登陆,用户名为admin,密码为admin123
登陆成功:
Public Repositories
最关注的是Central
6.将所有的proxy中的下载配置打开
选择repair index,否则可能导致无法下载:
以后的仓库地址:
7.虽然这个时候配置好了maven私服,但是这个私服要想使用还需要在配置文件里面进行引用:
第一种模式,修改每一个项目的pom.xml文件:
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Central Repository</name>
<url>http://192.168.28.253:8081/nexus/context/groups/public/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Central Repository</name>
<url>http://192.168.28.253:8081/nexus/context/groups/public/</url>
</pluginRepository>
</pluginRepositories>
表示所有的下载都通过私服下载,如果私服没有,则通过网络下载
这个配置只针对一个配置文件有效,多个项目的时候采用第二种模式
第二种模式:在settings.xml文件中配置一个公共的私服下载:
先配置连接服务器:
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
配置连接镜像:
<mirror>
<id>nexus-releases</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.28.253:8081/nexus/context/groups/public/</url>
</mirror>
<mirror>
<id>nexus-snapshots</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.28.253:8081/nexus/context/groups/public/public-snapshots</url>
</mirror>
设置核心配置文件:
<profiles>
<profile>
<id>env-dev</id>
<repositories>
<repository>
<id>Public</id>
<name>Public Repositories</name>
<url>http://192.168.28.253:8081/nexus/content/groups/public/</url>
<layout>default</layout>
<snapshotPolicy>always</snapshotPolicy>
</repository>
</repositories>
</profile>
<profiles>
启动配置文件:
<activeProfiles>
<activeProfile>env-dev</activeProfile>
</activeProfiles>
这样就表示所有的开发包将通过私服nexus进行下载:
按照之前的javawork项目,在pom.xml新增开发包:servlet包、
jstl包等
证明通过私服(在linux远程服务器上)去网络下载,再次下载时只需要通过私服下载,无须通过网络。
查看私服服务器上是否有对应jar包
此处是有内容的,表示私服已经开始工作。
二次下载速度得到很大的提升。
Maven和私服Nexus一定是联系紧密的。
一个团队里面一定要有一个专门的nexus私服存在,为所有的开发者提供方便。而且私服还是去标准的中央仓库进行下载,也许速度慢,但是由于就下载一次,所以无所谓。
- Eclipse+Maven
私服仓库:
在开发之中对于开发包的管理一直是一件头疼的事情,而我们最初的时候可以使用Eclipse进行开发包的管理的管理操作,并且基本上eclipse都能够保证开发包的正确(很多时候错误的话也让人很头疼)。于是有了Maven之后,现在就可以抛开这种智能化的开发工具,直接使用原生的Eclipse J2EE版工具进行开发。
同时项目之中存在nexus私服,这样也有利于整个项目团队的开发包的管理。
1.如果要想在eclipse之中使用Maven,必须保证已经准备好了Maven相关的开发包,同时已经配置好了settings.xml文件,这个文件里面定义有私服的链接地址。
eclipse首选项 —Maven
添加新的Maven配置,安装自己的maven开发工具包,表示已经可以使用。
2.而后还需要将之前开发里面配置的settings.xml文件的路径设置到eclipse之中。
User-Settings
3.建立一个maven项目,但是要求是基于webapps结构定义的
速度会比较慢,整个项目的建立可能无法一次性成功,如果不行就多建立几次,重新启动eclipse。
此时组织名称为cn.mldn,而项目名称为crm,所以最终的包名称就是cn.mldn.crm。
如果此时发现无法创建的话,有可能是你的网络问题,也有可能是你的环境问题,总之,Maven的处理操作有很多不确定性。
4.但是需要注意的是,此时的Maven的项目默认是基于jdk1.5(j2SE5.0)的,需要将其变更为jdk1.7的环境。
更改完成之后:
报错,原因可能是没有servlet包,所以需要在本项目的pom.xml中添加servlet包,即可
随后更改完级别之后
5.除了更改整个项目的JDK使用库之外,还需要将编译的级别变变更为 jdk1.7。
除此之外:Facets Project也需要调整为JDK1.7
6.还需要修改整个项目之中的整体配置项:
先更新java的版本为1.7
随后取消动态的web配置,先应用,先将其修改为3.1,再应用,在将其选中;
7.随后还要求随意建立一个web项目,目的是拷贝一些文件出来,
(WEB-INF下的web.xml)
将web.xml文件拷贝到新项目之中
8.此时配置完成,随后就可以将其发布到tomcat之中进行使用了。
新建index.jsp
启动tomcat并可以访问得到
总结:
这种配置的处理操作有一些复杂,特别是已经习惯于使用MyEclipse的开发人员,但是这个在很多的开发之中都会使用。
所以Eclipse+Maven这样的开发必须掌握熟练。
包含私服Nexus的使用过程。