Maven 的基本配置与使用
什么是Maven
Maven是基于项目对象模型(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的方式。(摘录百度百科)
http://baike.baidu.com/view/336103.htm
安装Maven
Window
#检查JDK
echo %JAVA_HOME%
C:\Program Files\Java\jdk1.8.0_05
java -version
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)
#环境变量
M2_HOME E:\Java\apache-maven-3.2.1
Path %M2_HOME%\bin
#检查配置
mvn -v
Apache Maven 3.2.1 (ea8b2b07643dbb1b84b6d16e1f08391b666bc1e9; 2014-02-15T01:37:5
2+08:00)
Maven home: E:\Java\apache-maven-3.2.1
Java version: 1.8.0_05, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_05\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"
Liunx
#导入环境变量
$ export M2_HOME=/opt/apache-maven
$ export PATH=$PATH:$M2_HOME/bin
#检查配置
mvn -v
#修改仓库位置
conf\目录下的setting.xml文件,设置成自己创建的仓库路径
<!--
localRepository | The path to the local repository maven will use to store artifacts. | Default: ${user.home}/.m2/repository <localRepository>/path/to/local/repo</localRepository> -->
#配置http代理
如果网络有特殊限制。通过http代理连接,在conf\目录下的setting.xml文件配置proxy
Maven坐标
Maven坐标为各种构件引入了秩序,任务一个构件都必须明确定义自己的坐标,而一组Maven坐标是通过一些元素
定义的,他们是 groupId,artifactId,version,packaging,classifier<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<packaging>jar</packaging>
<version>3.0.6.RELEASE</version>groupId: 定义当前Maven项目隶属的实际项目。
1:Maven项目和实际项目不一定是一对一的关系,比如SpringFramework这一实际项目,这是由于Maven中模块的概念,因为一个实际项目往往被划分成很多模块
2:groupId不应该对应项目隶属的组织或公司。原因很简单,一个组织下会有很多实际项目
3:groupId的表示方式与Java包名的表示方式类似,通常与域名反向一一对应
artifactId
定义实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目名称作为artifactId的前缀。
这样做的好处是方便寻找实际构件,在默认情况下,Maven生成的构件,其文件名会以artifactId作为
开头。如spring-core-3.0.6.RELEASE.jar
version定义Maven项目当前所处的版本,如3.0.6.RELEASE
packaging 定义Maven项目的打包方式。
1:打包方式通常与所生成构件的文件扩展名对应,如上例中的packaging为jar,最终的文件名为spring-core-3.0.6.RELEASE.jar
而使用war打包方式的Maven项目,最终生成的构件会有一个.war文件,不过这不是绝对的。
2:打包方式会影响构建的生命周期,比如jar打包和war打包使用不同的命令
3:当不定义packaging的时候,Maven会使用默认值jar
classifier
用来帮助定义构建输出的一些附属构件。附属构件与主构件对应,
如上例中的主构件是spring-core-3.0.6.RELEASE.jar,该项目可能还会通过使用一些插件生成如
spring-core-3.0.6.RELEASE-sources.jar,spring-core-3.0.6.RELEASE-doc.jar这样的附件构件,
其中包含了Java源代码和文档,这时候,javadoc和sources就是这两个附属构件的classifier.
这样附属也就拥有了自己唯一的坐标
上述5个元素中,groupId,artifactId,version是必须定义的,packaging是可可选的(默认为jar),而classifier是不能直接定义的。同时,项目构件的文件名是与坐标相对应的,一般的规则为artifactId-version[-classifier].packaging[-classifier]表示可选
创建Maven项目
#创建一个简单Maven项目
mvn archetype:generate
-DgroupId=com.mycompany.app
-DartifactId=my-app-simple
-DarchetypeArtifactId=maven-archetype-quickstart
-Dversion=1.0
#创建Maven的Web项目
mvn archetype:create
-DgroupId=packageName
-DartifactId=webappName
-DarchetypeArtifactId=maven-archetype-webapp
-Dversion=1.0
#创建项目(命令行中构建的选择不能换行)
mvn archetype:create -DgroupId=com.homeinns.web -DartifactId=homeinns-web -DarchetypeArtifactId=maven-archetype-webapp -Dversion=1.0
#构建成eclipse项目
cd homeinns-web
mvn eclipse:eclipse
mvn archetype:create 创建Maven项目
mvn compile 编译源代码mvn deploy 发布项目
mvn test-compile 编译测试源代码
mvn test 运行应用程序中的单元测试
mvn site 生成项目相关信息的网站
mvn dependency:tree 查看maven的依赖树结构
mvn clean 清除项目目录中的生成结果
mvn package 根据项目生成的jar
mvn install 在本地Repository中安装jar
mvn eclipse:eclipse 构建成eclipse工程
mvn eclipse:clean 清除eclipse结构
mvnjetty:run 启动jetty服务
mvntomcat:run 启动tomcat服务
mvn clean package -Dmaven.test.skip=true:清除以前的包后重新打包,跳过测试类
mvn dependency:copy-dependencies 导出项目依赖的jar包
mvn dependency:copy-dependencies -DoutputDirectory=lib 导出依赖的jar包到lib文件夹
导入eclipse工程
An internal error occurred during: "Updating Maven Project". Unsupported IClasspathEntry kind=4
http://stackoverflow.com/questions/10564684/how-to-fix-error-updating-maven-project-unsupported-iclasspathentry-kind-4
如果没有/src/main/java目录配置一下工程JDK目录
如果提示如下错误,设置下java的编译版本
Java compiler level does not match the version of the installed Java project facet.xxx Unknown Faceted Project Problem (Java Version Mismatch)
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin: 2.3.2 :compile ( default -compile) on project oecp: Compilation failure
因为eclipse默认是运行在JRE上面的,maven的一些功能要求使用JDK,所以要在eclipse中的配置文件eclipse.ini中加入
或者指定自己JDK
目录结构
src/main/java : java源文件存放位置
src/main/resource : resource资源位置
src/test/java : 测试代码源位置
对象模型(POM)
<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.homeinns.web</groupId>
<artifactId>homeinns-web</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>homeinns-web Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>homeinns-web</finalName>
</build>
</project>
junit依赖范围
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
注意:当依赖范围是test的时候,该依赖只会被加入到测试代码的classpath中,也就是说,对于项目主代码,
该依赖是没有任何作用的。JUnit是单元测试框架,只有在测试的时候才需要,因此使用该依赖范围
使用Jetty容器热部署
<?xml version="1.0" encoding="utf-8"?>
<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.homeinns.web</groupId>
<artifactId>homeinns-web</artifactId>
<packaging>war</packaging>
<version>1.0</version>
<name>homeinns-web 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>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-api-2.0</artifactId>
<version>6.1.14</version>
</dependency>
<dependency>
<groupId>tomcat</groupId>
<artifactId>jasper-compiler-jdt</artifactId>
<version>5.5.15</version>
</dependency>
<dependency>
<groupId>tomcat</groupId>
<artifactId>jasper-compiler</artifactId>
<version>5.5.15</version>
</dependency>
<dependency>
<groupId>tomcat</groupId>
<artifactId>jasper-runtime</artifactId>
<version>5.5.15</version>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-2.1</artifactId>
<version>6.1.14</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-api-2.1</artifactId>
</exclusion>
<exclusion>
<groupId>org.mortbay.jetty</groupId>
<artifactId>start</artifactId>
</exclusion>
<exclusion>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-annotations</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<finalName>homeinns-web</finalName>
<plugins>
<!-- jetty插件 -->
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.10</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<stopKey>foo</stopKey>
<stopPort>9999</stopPort>
</configuration>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<scanIntervalSeconds>0</scanIntervalSeconds>
<daemon>true</daemon>
</configuration>
</execution>
<execution>
<id>stop-jetty</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
#启动Jetty
mvn jetty:run
#停止服务
CTRL+C
http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin
Maven 中央仓库
http://search.maven.org/
http://mvnrepository.com/
阿里云 MAVEN
阿里云的 Maven 库:http://maven.aliyun.com
在本地库 .m2 的目录下 settings.xml 添加配置:
<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
https://maven.apache.org/xsd/settings-1.0.0.xsd"> <mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
Refer:
http://maven.apache.org/
http://www.yiibai.com/maven/
http://tangyanbo.iteye.com/blog/1503782
Building Java Projects with Maven
http://spring.io/guides/gs/mavenhttp://maven.aliyun.com/mvn/view
Maven 的基本配置与使用的更多相关文章
- [Java] Maven 安装和配置
1. 下载 Maven 在百度输入 Maven 搜索 ,找到它的官网(http://maven.apache.org/),点击进入下载页面. 下载页面地址: http://maven.apache.o ...
- maven安装和配置
一.下载maven maven下载页 里面有一些版本区别,binary比较小,适合直接在项目中使用,source带了源代码,windows系统下载zip后缀的 apache-maven-3.3.9-b ...
- maven - 安装与配置
最近在了解maven的相关东西,在网上查了一些资料,现在简单整理一下. 一.maven 安装 1.先检查JDK ,Maven是一个java工具,所以请确保jdk环境已经正确安装在你的机器上. 2.点击 ...
- 【maven】之配置开发,测试,正式环境pom.xml文件
在进行web程序开发,如果项目组没有使用自动化发布工具(jenkins + maven + svn + tomcat ),我们一般会使用maven的热部署来完成发布,在部署的过程中我们开发,测试,生产 ...
- Maven安装与配置
下载: 1.从官网http://maven.apache.org中下载,下载下来的是一个压缩包,解压即可.因为Maven本身也是用Java实现的.2.Maven的目录结构 /bin; maven的 ...
- maven 环境的配置 JAVA_HOME not found in your envirnment
maven 的环境配置在配置maven前 先做好java的环境配置现在假定java已经配置好了.在环境变量中添加;maven的解压路径\bin 例如:D:\soft\java\apache-maven ...
- MyEclipse下Maven的安装配置
Maven常用命令: •mvn archetype:generate :创建 Maven 项目 •mvn compile :编译源代码 •mvn test-compile :编译测试代码 •mvn t ...
- 学习笔记-[Maven实战]-第二章:Maven安装和配置
在windows上安装Maven 1.检查JDK安装:在CMD下运行以下命令来检查JAVA安装情况: 命令: C:\Documents and Settings\Administrator>ec ...
- Maven 的安装配置
Maven 的安装配置 一.在安装 Maven 之前,先确保JDK1.7及以上版本并且配置好环境变量. 二.下载maven的bin,在apache官方网站可以下载. 1.首先去官网下载 Maven:h ...
- Maven配置jar(war)包自动打包上传Maven服务器的配置
Maven配置jar(war)包自动打包上传Maven服务器的配置 创建jar(war)包工程 创建一个maven工程 在工程中穿件一个测试类 配置pom.xml <distributionMa ...
随机推荐
- 诡异的 ERROR 1045 (28000): Access denied for user 错误
问题描述: 用户已建,权限已赋予.long long ago这个用户是可以正常访问的,但是今天它就不能访问了.报错如下: ERROR 1045 (28000): Access denied for u ...
- AIX 批量更改密码
使用 chpasswd 可以使用 chpasswd 方便地更改单个或多个账户密码.这意味着不需要像平时一样在命令行上重复输入密码.尽管可以以交互方式使用 chpasswd,但是我建议以非交互方式使用它 ...
- 判断页面是app打开还是浏览器打开。cookie
有个需求需要对页面判断不同的打开方式来最里面的链接进行不同调整, 这样就要分四种情况,app,浏览器X安卓系统,苹果系统,起初是对页面url地址带有的参数(安卓)跟用户代理(苹果)返回值判断navig ...
- spring注解开发
applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xm ...
- JavaScript常用事件参考
onabort 图像加载被中断 onblur 元素失去焦点 onchange 用户改变域的内容 onclick 鼠标点击某个对象 ondblclick 鼠标双击某个对象 onerror 当加载文档 ...
- POJ3020 Antenna Placement
Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9586 Accepted: 4736 ...
- 二分图匹配-HK算法
先把代码贴上,其他南京回来再补了.. #include <cstdio> #include <cstdlib> #include <cstring> #includ ...
- whereis+whatis+man
使用Linux过程中无论是使用shell命令.程序开发或者用户文档都需要使用到强大的男人man命令. 使用方法也十分简单,以查看ls命令的使用方法为例: man ls man的搜索路径通常包括以下两个 ...
- Hadoop MapReduce Task Log 无法查看syslog问题
现象: 由于多个map task共用一个JVM,所以只输出了一组log文件 datanode01:/data/hadoop-x.x.x/logs/userlogs$ ls -R .: attempt_ ...
- CentOS使用vsftpd开启FTP服务以及配置用户
1.安装服务 #yum install vsftpd 2.配置 #vi /etc/vsftpd/vsftpd.conf # 禁止匿名访问 anonymous_enable=NO # 允许本地用户登录F ...