Maven2不完全非权威指南(初级入门FAQ)

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 权威指南>中有:
  
引用
mvn archetype:create -DgroupId=org.sonatype.mavenbook.ch03

  "mvn"   可以看作及是Maven的运行环境
  "archetype"  就是一个插件的名字
  "create"  就是一个目标goal
  "-D"开头就是参数键值对
  对比win下的语句
引用
net start mysql

   "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






猜你喜欢

转载自zhudengchao.iteye.com/blog/434818