1 什么是Maven
如果您会Ant,那maven算Ant加强版吧
如果不会,简单来说maven就是帮忙打打包,管理jar包的(当然)
2 Maven如何安装?m2eclipse呢?配置呢?
安装不用多说,请注意区分Maven和m2eclipse,后者只是前者的一个IDE插件,其余内容google吧
配置建议看官网,全面+权威,本文后有部分参考资料
3 用Maven管Jar好用么?
相信我,用点时间试试Maven吧,好用的.
Maven对jar包,最有意义的特点就是对jar的依赖有传递性
如上图,包很多吧,但是请对比下pom文件(在"什么是pom?"的示例中)看见没,只用第二层是自己手动配置的,结合m2eclipse或是再加上nexus私服之类的,这绝对用比自己复制好用吧
如果你还要控制下jar的版本呢?划分模块?等等的呢?
4 怎么确定我要的是那个jar包?
4.1 这里就要说下maven坐标轴
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>${spring.version}</version>
</dependency>
groupId 这个相当于包名
artifactId 这个相当于类名
version 版本号
以上几个足够唯一的jar了
还有在pom里的可选参数:
Packaging 这个就打包方式,一般有jar,war等
Classifier sources,javadoc要源码?还是文档?
5 什么是pom?
也就xml配置文档,说明下你的项目结构,依赖项目(denpdency,也就要那些jar包)
<?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>org.heypig</groupId>
<artifactId>mystruts2</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>myStruts2Demo</name>
<url>http://www.myComp.com</url>
<properties>
<spring.version>2.5.6.SEC01</spring.version>
<struts2.version>2.1.6</struts2.version>
</properties>
<dependencies>
<!--spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Struts 2 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-sitemesh-plugin</artifactId>
<version>${struts2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>${struts2.version}</version>
</dependency>
<!-- Servlet & Jsp -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<!-- Jakarta Commons -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.1.1</version>
</dependency>
<!-- Dwr -->
<dependency>
<groupId>uk.ltd.getahead</groupId>
<artifactId>dwr</artifactId>
<version>1.1-beta-3</version>
</dependency>
<!-- hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.6.ga</version>
</dependency>
<dependency>
<groupId>javax.ejb</groupId>
<artifactId>ejb-api</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.4.0.GA</version>
</dependency>
<!-- commons -->
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>commons-dbcp-all</artifactId>
<version>1.3</version>
</dependency>
<!-- Ds Driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
</dependencies>
<build>
<finalName>mystruts2</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
6 管理版本也要一个一个的配吗?太麻烦了吧?
可以参看下pom的配置,设个变量就ok了
7 什么是Maven的仓库(repository)?
简单说,放jar的地方
当然,也没那么简单,仓库嘛,肯定有自己的编排目录,也还有些其他都东西
8 Maven插件(plugins)是什么?什么是目标(goals)?
Maven中的插件这个概念把我搞晕了很久才明白.
A.Maven插件,如果是说elcipse的插件,基本等同m2eclipse(很多菜鸟级人物如鄙人最初会Maven插件理解成这个);
B.Maven插件,是指针对maven本身的扩充.
比如,在<Maven 权威指南>中有:
[quote]mvn archetype:create -DgroupId=org.sonatype.mavenbook.ch03[/quote]
"mvn" 可以看作及是Maven的运行环境
"archetype" 就是一个插件的名字
"create" 就是一个目标goal
"-D"开头就是参数键值对
对比win下的语句
[quote]net start mysql[/quote]
"archetype" 类似于net
"create" 类似于start
mvn也就是开个头,说明下我这是mvn环境,不是你的shell
就这么简单,我菜鸟理解了好久
9 我用m2eclipse的时候,代码提示老死,为什么?
我刚遇到这问题,如果你的本地仓库的部分jar出问题了,就会在eclipse(我的是3.5)的error log出看到
Invalid ZIP archive: E:\dev\maven\heypig-maven- repository\org\springframework\spring- beans\2.5.3\spring-beans-2.5.3.jar
把本地仓库的jar删了,然后m2eclipse的update dependencies就可以了.
10 Maven私服什么?要他干嘛
maven多数时候是再干这件事情:从远程仓库的jar下到本地仓库保管
如果你是团队工作,都要去远程下,WAN的网速总比不过LAN吧,你就需要一个私服了,大家就可以直接从你这里下了,而且如果是你自己的jar,别人那肯定不会有吧,传到自己的私服上去,大家下就ok
maven私服就是一个web服务器,主要功能如下
1.代理下载远程仓库的jar(当然,不至于傻到一开始就把整个maven center都下给你,安装配置nexus的时候大家都提醒要re-index就是这个道理,下载个索引目录给你,以后用到的时候再下载),
2.查找jar,pom,achetype(给maven插件 mvn achetype:create的时候用的"模型(模板)")等,nexus的还可以根据classname来找jar,可以代替掉findjar.com.
3.管理第三方jar,也就是远程仓库里没的,你自个做的
推荐是用nexus吧,都是soynatype公司(Maven背后的公司)的
11 不好意思,我nexus私服的密码忘记了,怎么办
如果你架私服的时候配了SMTP的话,请自行邮箱找回
如果没有,最简单的是security.xml删掉,重启即可
如果不想删,打开security.xml,找到users下的user,看id找到自己的用户名,对应的password改成f865b53623b121fd34ee5426c792e5c33af8c227,然后用密码"admin123"(不带引号哈)登录即可(我还不知道这个是什么加密算法,路过大侠赐教下)
12 就这些了?
开玩笑,Maven厉害的多,还有项目周期管理,划分模块等等
13 参考资料
juvenshun大牛(Maven权威指南译者)的JE博客
http://juvenshun.iteye.com/
m2eclipse 安装及使用 http://lin23871.iteye.com/blog/356939
如果您会Ant,那maven算Ant加强版吧
如果不会,简单来说maven就是帮忙打打包,管理jar包的(当然)
2 Maven如何安装?m2eclipse呢?配置呢?
安装不用多说,请注意区分Maven和m2eclipse,后者只是前者的一个IDE插件,其余内容google吧
配置建议看官网,全面+权威,本文后有部分参考资料
3 用Maven管Jar好用么?
相信我,用点时间试试Maven吧,好用的.
Maven对jar包,最有意义的特点就是对jar的依赖有传递性
如上图,包很多吧,但是请对比下pom文件(在"什么是pom?"的示例中)看见没,只用第二层是自己手动配置的,结合m2eclipse或是再加上nexus私服之类的,这绝对用比自己复制好用吧
如果你还要控制下jar的版本呢?划分模块?等等的呢?
4 怎么确定我要的是那个jar包?
4.1 这里就要说下maven坐标轴
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>${spring.version}</version>
</dependency>
groupId 这个相当于包名
artifactId 这个相当于类名
version 版本号
以上几个足够唯一的jar了
还有在pom里的可选参数:
Packaging 这个就打包方式,一般有jar,war等
Classifier sources,javadoc要源码?还是文档?
5 什么是pom?
也就xml配置文档,说明下你的项目结构,依赖项目(denpdency,也就要那些jar包)
<?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>org.heypig</groupId>
<artifactId>mystruts2</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>myStruts2Demo</name>
<url>http://www.myComp.com</url>
<properties>
<spring.version>2.5.6.SEC01</spring.version>
<struts2.version>2.1.6</struts2.version>
</properties>
<dependencies>
<!--spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Struts 2 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-sitemesh-plugin</artifactId>
<version>${struts2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>${struts2.version}</version>
</dependency>
<!-- Servlet & Jsp -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<!-- Jakarta Commons -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.1.1</version>
</dependency>
<!-- Dwr -->
<dependency>
<groupId>uk.ltd.getahead</groupId>
<artifactId>dwr</artifactId>
<version>1.1-beta-3</version>
</dependency>
<!-- hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.6.ga</version>
</dependency>
<dependency>
<groupId>javax.ejb</groupId>
<artifactId>ejb-api</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.4.0.GA</version>
</dependency>
<!-- commons -->
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>commons-dbcp-all</artifactId>
<version>1.3</version>
</dependency>
<!-- Ds Driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
</dependencies>
<build>
<finalName>mystruts2</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
6 管理版本也要一个一个的配吗?太麻烦了吧?
可以参看下pom的配置,设个变量就ok了
7 什么是Maven的仓库(repository)?
简单说,放jar的地方
当然,也没那么简单,仓库嘛,肯定有自己的编排目录,也还有些其他都东西
8 Maven插件(plugins)是什么?什么是目标(goals)?
Maven中的插件这个概念把我搞晕了很久才明白.
A.Maven插件,如果是说elcipse的插件,基本等同m2eclipse(很多菜鸟级人物如鄙人最初会Maven插件理解成这个);
B.Maven插件,是指针对maven本身的扩充.
比如,在<Maven 权威指南>中有:
[quote]mvn archetype:create -DgroupId=org.sonatype.mavenbook.ch03[/quote]
"mvn" 可以看作及是Maven的运行环境
"archetype" 就是一个插件的名字
"create" 就是一个目标goal
"-D"开头就是参数键值对
对比win下的语句
[quote]net start mysql[/quote]
"archetype" 类似于net
"create" 类似于start
mvn也就是开个头,说明下我这是mvn环境,不是你的shell
就这么简单,我菜鸟理解了好久
9 我用m2eclipse的时候,代码提示老死,为什么?
我刚遇到这问题,如果你的本地仓库的部分jar出问题了,就会在eclipse(我的是3.5)的error log出看到
Invalid ZIP archive: E:\dev\maven\heypig-maven- repository\org\springframework\spring- beans\2.5.3\spring-beans-2.5.3.jar
把本地仓库的jar删了,然后m2eclipse的update dependencies就可以了.
10 Maven私服什么?要他干嘛
maven多数时候是再干这件事情:从远程仓库的jar下到本地仓库保管
如果你是团队工作,都要去远程下,WAN的网速总比不过LAN吧,你就需要一个私服了,大家就可以直接从你这里下了,而且如果是你自己的jar,别人那肯定不会有吧,传到自己的私服上去,大家下就ok
maven私服就是一个web服务器,主要功能如下
1.代理下载远程仓库的jar(当然,不至于傻到一开始就把整个maven center都下给你,安装配置nexus的时候大家都提醒要re-index就是这个道理,下载个索引目录给你,以后用到的时候再下载),
2.查找jar,pom,achetype(给maven插件 mvn achetype:create的时候用的"模型(模板)")等,nexus的还可以根据classname来找jar,可以代替掉findjar.com.
3.管理第三方jar,也就是远程仓库里没的,你自个做的
推荐是用nexus吧,都是soynatype公司(Maven背后的公司)的
11 不好意思,我nexus私服的密码忘记了,怎么办
如果你架私服的时候配了SMTP的话,请自行邮箱找回
如果没有,最简单的是security.xml删掉,重启即可
如果不想删,打开security.xml,找到users下的user,看id找到自己的用户名,对应的password改成f865b53623b121fd34ee5426c792e5c33af8c227,然后用密码"admin123"(不带引号哈)登录即可(我还不知道这个是什么加密算法,路过大侠赐教下)
12 就这些了?
开玩笑,Maven厉害的多,还有项目周期管理,划分模块等等
13 参考资料
juvenshun大牛(Maven权威指南译者)的JE博客
http://juvenshun.iteye.com/
m2eclipse 安装及使用 http://lin23871.iteye.com/blog/356939