`
seawavecau
  • 浏览: 754431 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Maven2 的简单用法

阅读更多

1.Maven的安装
1.1Windows 2000/xp下的安装
1.      解压缩maven-2.0.2-bin.zip到你希望安装Maven 2.0.2的所在目录。这里假设你选择了C:\ProgramFiles\Apache Software Foundation\maven-2.0.2.
2.      将C:\Program Files\Apache Software Foundation\maven-2.0.2\bin目录加入到你的%path%环境变量中。
3.      同时,确认JAVA_HOME是否正确设置成功。
4.      运行 mvn --version 确认是否安装成功。
显示Maven version: 2.0.2 则表示安装成功。
1.2基于Unxibased的操作系统(LinuxSolaris and Mac OS X
1.      解压缩发布包到你希望安装Maven 2.0.2的所在目录。这里假设你选择了/usr/local/maven-
2.      将/usr/local/maven-2.0.2/bin目录加入到你的path环境变量中,例如:PATH=/usr/local/maven-2.0.2y/bin: $PATH
3.      同时,确认JAVA_HOME是否正确设置成功。
4.      运行 mvn --version 确认是否安装成功。
显示Maven version: 2.0.2 则表示安装成功。
 
2.Maven2.0的一些优点:
--标准的项目布局和项目结构生成器
--多项目支持(只对开发环境相同的项目)
--在开发者需要的时候及时地下载新的插件和功能部件(主要的好处)
--标准的依赖管理机制
--生成最新项目信息的网站
--集成了源代码控制软件:CVS和Subversion
 
2.1项目标准化(提供预定义的目录模板
      Maven一个重要特性是定义了项目的标准模板,官方说法是最佳实践。好的目录结构可以使开发人员更容易理解项目,为以后的维护工作也打下良好的基础。Maven2根据业界公认的最佳目录结构,为开发者提供了缺省的标准目录模板。Maven2的标准目录结构如下:
使用目录模板,可以使pom.xml更简洁。因为Maven2已经根据缺省目录,预定义了相关的动作,而无需人工的干预。以resources目录为例:
  • src/main/resources,负责管理项目主体的资源。在使用Maven2执行compile之后,这个目录中的所有文件及子目录,会复制到target/classes目录中,为以后的打包提供了方便。
  • src/test/resources,负责管理项目测试的资源。在使用Maven2执行test-compile之后,这个目录中的所有文件及子目录,会复制到target/test-classes目录中,为后续的测试做好了准备。
 
      可以通过命令mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app创建一个单一的maven项目。创建好的项目,具有了特定的项目结构。这个项目结构是参考业界的最佳实践而成,为后面使用统一的maven命令打下了基础,如测试mvn test、打包mvn package(在打包时需要指定web.xml,规范的结构可以不用指定等,无需写一行脚本,就可以方便的实现众多功能。Maven还提供其它一些类型模板,可以通过添加-DarchetypeArtifactId=type}创建,如-DarchetypeArtifactId=maven-archetype-site,生成site类型的项目。
   有了这个标准,项目间能方便的进行交流,你也很容易了解其它使用maven项目的结构。对于企业来说,引入maven就自然引入了规范,这可比费时费力的写文档,定规范有效的多了。
 
2.2文档和报告
使用mvn site可以快速生成项目站点,apache很多开源项目站点都采用maven生成,会出现built by maven字样的图标。
maven提供的针对如junitcheckstylepmd等的插件,能够方便的进行测试和检查并能直接生成报告。使用都很简单,如mvn surefire-report:report 就能自动进行junit测试,并生成junit报告,mvn pmd:pmd生成pmd报告。具体使用可以在http://maven.apache.org/plugins/index.html找到。
2.3类库管理
Maven一个很重要的特色就是类库管理。通过在pom.xml中定义jar包版本和依赖,能够方便的管理jar文件。以下是一个简单的jar定义片断:
<dependency>                                                                      
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate</artifactId>
      <version>3.1</version>
      <type>jar</type>
      <scope>runtime</scope>
 </dependency>
这个片断告诉我们依赖的jargroupIdorg.hibernateartifactIdhibernate版本为3.1scoperuntime。在实际项目中会将M2_REPO(maven本地仓库地址)/ org/hibernate / hibernate /3.1/ hibernate -3.1.jar放入classpath
同时maven会通过pom.xml管理jar包间的依赖。比如上面的hibernate-3.1.jar同级目录肯定会有一个hibernate -3.1.pom,在这个pom文件中指定了这个jar对其它一些jar的依赖。而这个pom文件是远程仓库提供,无需进行修改,执行maven相关命令就会自动根据相关依赖去下载jar包。这样只需定义对hibernate的依赖而无需关心相关jar,在构建项目上方便了很多。
因为pom文件对jar的管理,也产生了一个很吸引人的特性:项目文件很小。以往一个web项目中,jar文件都要放入WEB-INF/lib下,并放入cvs(svn)中,很容易就达到几十M。而通过maven,只需一个pom.xml,在执行mvn eclipse:eclipse时再去远程仓库下载,项目文件一般只需几百K
<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:
compile,缺省值,适用于所有阶段,会随着项目一起发布。
provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
2.4发布管理
使用maven可以方便的进行项目发表管理。在项目开发到一定阶段,可以使用mvn package打包,它会自动先运行mvn test,跑所有的testcase,只有全部通过才能正确打包。生成的war包(如果项目的packagingwar)在target目录下。这个war包与使用ant脚本生成一样,但无需一行脚本,这也是maven对比ant的优势之一。使用mvn install将编译和打包好的文件发布到distributionManager指定的远程repository。使用mvn deploy可以自动管理项目版本。
3.常用的命令
您可以在Maven安装目录下的conf目录中,或者项目自身中修改Maven远程存储库的选择。POM是“项目对象模型”的缩写。
创建完项目后,我们可以往项目里添加代码并使用Maven的所有全新技巧。注意以下命令必须在pom.xml文件所在的目录中运行。
--mvn test:运行应用程序中的单元测试
--mvn package:依据项目生成jar文件
--mvn
install,把包安装在本地的repository中,可以被其他工程作为依赖来使用
--mvn site:生成项目相关信息的网站
--mvn clean:清除目标目录中的生成结果
--mvn eclipse:eclipse:生成Eclipse项目文件
--mvn deploy,在整合或者发布环境下执行,将最终版本的包拷贝到远程repository,使得其他的开发者或者工程可以共享。
可以通过对目标及相位的组合使得一个命令完成多个功能,比如:
 mvn clean dependency:copy-dependencies package
关于常用命令的详解,见参考资料。
4.第一个例子
参见《Maven入门--概念与实例
 
D:\maven\demo>mvn archetype:create -DgroupId=ce.demo.mvn -DartifactId=app
该工程的groupId是ce.demo.mvn,那么该工程的源文件将放在Java包ce.demo.mvn中。artifactId是app,那么该工程根目录的名称将为app。
D:\maven\demo>mvn archetype:create -DgroupId=ce.demo.mvn -DartifactId=webapp -DarchetypeArtifactId=maven-archetype-webapp
此命令与创建app的命令的不同之处是,多设置了一个属性archetypeArtifacttId,该属性的值为maven-archetype-webapp。即告诉Maven,将要创建的工程是一个Web应用工程。创建app工程时没有使用该属性值,是由于archetype默认创建的是应用程序工程。详细的解释及命令参数见http://maven.apache.org/plugins/
不用担心如何从WEB-INF/lib目录中得到依赖项,在依赖属性值被设置成compile的情况下,Maven会自动包含依赖项。也可以将以下代码添加到pom.xml文件中来改变war文件的名称:
<build>
    <finalName>PromoteC</finalName>
 </build>
              将本地的存储库放在一台web服务器上也同样是个便利之举,这样整个开发团队就能从此获益,每个人都没有必要去管理自己的存储库了。改变Maven的存储库路径只需简单地编辑其安装目录下conf文件夹下面的settings.xml文件即可。(详情见私服的架设)
5.文档编制
对于如何创建和编制文档,maven有一个简单的示例命令:
mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-site
执行了以上命令后,我们将得到一个目录结构:
你现在可以看到一个$basedir/src/site目录,以及它包含的一些站点描述文件(site.xml,site_fr_xml),和各种maven支持的文档格式相对应的目录和示例文档都已经产生。
以上的创建只是示例,我们自己创建时就没有命令行使用了,只能按照上面的目录结构创建我们需要的文档mvn site并在文档中写入我们工程的信息。 创建完成后,运行
关于文档编制的详细说明,见参考资料。
6.依赖管理
一个简单的例子。比如我们要添加一个log4j到我们的工程中。首先.需要了解log4j的groupId, artifactId, and version信息。可在google上搜索“site:www.ibiblio.org maven2 log4j”。这样在搜索结果里可以找到/maven2/log4j/log4j (or /pub/packages/maven2/log4j/log4j)这样的目录,在这个目录中有一个文件叫做maven-metadata.xml。根据这个文件可以知道groupId为log4j,artifactId为log4j,version当然要用最新的。scope我们设置为compile。这样我们使用mvn compile 编译工程时,会看到mvn下载了log4j到我们的本地仓库。
 
7.配置存储库
要求项目的每个开发者必须在conf目录中配置存储库是不方便的,所以Maven可以同时查看多个存储库并且将它们全部配置在pom.xml文件中。让我们看看一个例子,它展示了如何在应用程序用使用多个存储库。在以下从pom.xml文件摘录的片断中,我们设置了两个存储库来让Maven寻找依赖项。Ibiblio一直是默认的存储库,我们又添加了Planet Mirror作为后援存储库。我们也可以让团队使用的本地web服务器作为第二个存储库。
 
<repositories>
    <repository>
      <id>Ibiblio</id>
      <name>Ibiblio</name>
      <url>http://www.ibiblio.org/maven/</url>           //此处按实际地址写,也有可能是//http://mirrors.ibiblio.org/pub/mirrors/maven2/org,看出错报告调整。对于找不到的jar包要写出他的真实路径。
    </repository>
    <repository>
      <id>PlanetMirror</id>
      <name>Planet Mirror</name>
      <url>http://public.planetmirror.com/pub/maven/</url>
    </repository>
</repositories>
 
当下载某些jar包时,会自动把相关依赖的包都下载下来。
如下面所示,会自动下载对应文件夹中pom.xml文件上所要求的包。
<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jpa</artifactId>
      <version>2.0</version>
      <scope>test</scope>               //scopecompile时,在执行mvn package时,会将该包拷贝到target\{projectName}\WEB-INF\lib\目录下
    </dependency>
若在下载过程中出现java.net.SocketException: Connection reset错误估计是该连接存在但是下载不了。换别的网址或换个版本下载吧。若出现Failed to resolve artifact则估计是根本就不存在该连接。查看一下实际下载的地址是否存在。
Maven是基于中央仓库的编译,即把编译所需要的资源放在一个中央仓库里,如jar,tld,pom,等。当编译的时候,maven会自动在仓库中找到相应的包,如果本地仓库没有,则从设定好的远程仓库中下载到本地。这一切都是自动的,而ant需要自己定义了。这个好处导致的结果就是,用maven编译的项目在发布的时候只需要发布源码,小得很,而ant的发布则要把所有的包一起发布,显然maven又胜了一筹。
      编译时,出错的测试代码,只能显示到如下程度:
Running jp.co.benic.usp.webapp.action.USPJ320ActionTest
Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 0.266 sec <<< FAILURE!
Running jp.co.benic.usp.webapp.action.USPJ510ActionTest
Tests run: 4, Failures: 0, Errors: 4, Skipped: 0, Time elapsed: 0.515 sec <<< FAILURE!
若想看完整的错误信息,需要到target\surefire-reports目录下,看相关的错误日志文件。
              对于在下载jar时,不想下载他所自带的依赖的某些包,可以用<dependency>
<exclusions>
                    
<exclusion>
                        
<groupId>dom4j</groupId>
                        
<artifactId>dom4j</artifactId>
                    
</exclusion>                    
                
</exclusions>
</dependency>将指定的包过滤掉。
缺点:编译的过程没有日志输出。(手动设置?)
8.私服的架设
自己建个私服是不错的主意。其实也简单,随便拿台http服务器,把${user.home}/.m2/ 目录传上去就行了
    
pom文件中,把私服的http url写在官网的前面。   
 <repositories>
        
<repository>
            
<id>springside</id>
            
<url>http://www.springside.org.cn/maven2</url>
        
</repository>
        
<repository>
            
<id>maven</id>
            
<name>slowly office site</name>
            
<url>http://repo1.maven.org/maven2</url>
        
</repository>
    
</repositories>
9.如何部署jar到自己的远程repository
(但因为目前只支持scp这种远程拷贝方法,而不知道如何在windows中使用scp,顾此处没有实现)
pom.xml中添加如下内容
 
<distributionManagement>
    <repository>
      <id>mycompany-repository</id>
      <name>MyCompany Repository</name>
      <url>scp://repository.mycompany.com/repository/maven2</url>
    </repository>
 </distributionManagement>
 
 
同样在用户的settings.xml中也要定义服务器
 
<settings>
 <servers>
    <server>
      <id>mycompany-repository</id>
      <username>jvanzyl</username>
      <!-- Default value is ~/.ssh/id_dsa -->
      <privateKey>/path/to/identity</privateKey> (default is ~/.ssh/id_dsa)
      <passphrase>my_key_passphrase</passphrase>
    </server>
 </servers>
</settings>
deploy的介绍。deploy:deploy-file从远程仓库安装一个资源;deploy:deploy部署一个资源到远库。程仓
http://maven.apache.org/plugins/index.html   介绍maven的有效的插件及每个命令都是用来做什么的。
10.如何使用Maven2打包你的Web应用程序?
解决方法
      pom.xml的设置
             打包类型设置为war
             <packaging>war</packaging>
             如果项目的layout不是Maven2默认的可通过修改plugin的配置进行设置例如WebRoot路径的设置如下
             <build>
                 <!-- war包名称 -->
                 <finalName>mywebapp</finalName>
                 <plugins>
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-war-plugin</artifactId>
                         <configuration>
                             <!-- 设置WebContent目录为Web目录 -->
                             <warSourceDirectory>WebContent</warSourceDirectory>
                         </configuration>
                     </plugin>
                 </plugins>
             </build>
 
打包命令行mvn clean:clean package
 
使用maven2打包时,可以过滤掉不想被打包的文件或文件夹。只要在pom.xml文件中做如下设置即可
<build>
    <filters>
      <filter>src/main/filters/filter.properties</filter>
    </filters>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
 </build>
11.Maven和eclipse工具的合作
当有了以上的工程目录,无论是webapp工程,还是app,我们都希望在集成开发环境中开发。Maven如何和IDE集成。现在我们就来进行讲解。
11.1首先要让eclipse知道Maven 2的repository(仓库)的路径
因此要设置一个M2_REPO的变量为classpath。
可以使用命令行的方式来设置:
mvn -Declipse.workspace=<path-to-eclipse-workspace> eclipse:add-maven-repo
还可以在eclipse中定义一个新的classpath变量通过在eclipse的菜单上选择Window> Preferences. 选择Java > Build Path > Classpath Variables page.
11.2生成eclipse的工程文件。
使用命令行
mvn eclipse:eclipse
这样通过在eclipse的菜单上选择File >Import >Existing Projects into Workspace,就可以将工程导入eclipse中。
 
通过以上2个步骤,我们就可以利用eclipse来进行开发工作了。
11.3Eclipse插件mavenide
同时在eclipse中我们可以下载一个maven的插件,用来辅助eclipse进行maven工程的开发工作。这个插件名称叫做mavenide。
这个插件可使用以下更新站点:http://m2eclipse.codehaus.org/
并且非常方便的是,这里还提供了一个flash的演示来介绍如何安装此插件,这个flash演示的观看地址在:
要正常使用此插件请注意以下问题:
eclipse使用3.1或以上版本。
Mavenide的插件为0.0.5不要安装错误了。
通过笔者在安装好此插件的一些使用后,看到了此插件的以下一些特性。
1.可以方便的添加依赖。
2.在编辑完pom.xml<sp>

分享到:
评论

相关推荐

    maven插件及其使用方法

    在本文中,我们将深入探讨Maven插件的使用方法以及如何在实际开发中有效地利用它们。 首先,了解Maven的生命周期至关重要。Maven生命周期包括清理(clean)、初始化(initialize)、构建(compile)、测试(test)...

    maven2详细教程

    【Maven 2 详细教程】是一份专为开发者准备的指南,旨在详细介绍Apache Maven 2的使用方法和核心概念。Maven 2是一个强大的构建工具,尤其在处理大型、多模块的Java项目时,能够简化构建过程和依赖管理。在现代软件...

    基于Maven Struts2 简单应用开发

    总结来说,"基于Maven Struts2简单应用开发"涉及到的技术点包括Maven的项目管理、Struts2的MVC架构、Action和Interceptor的使用、配置文件的编写以及视图的展示。通过这些知识点的掌握,开发者可以快速构建一个功能...

    springmvc与maven的简单例子

    2. **Maven的使用**: - 创建`pom.xml`文件,这是Maven的项目对象模型,用于声明项目依赖、构建设置等信息。 - Maven的依赖管理:在`pom.xml`中添加Spring MVC和其它所需的库依赖,如Spring核心、Servlet API、...

    eclipse+maven+struts2简单例子

    这个“eclipse+maven+struts2简单例子”着重展示了如何结合这三个工具创建一个基础的Java Web项目。接下来,我们将深入探讨这些知识点。 首先,Eclipse是一款流行的Java集成开发环境(IDE),提供了丰富的功能来...

    maven指令的使用方法

    ### Maven指令的使用方法 #### 一、Maven简介与安装 Maven 是一款非常流行的自动化构建工具,它主要用于 Java 项目的构建、依赖管理和项目信息管理。Maven 的设计哲学是约定优于配置,通过一系列内置的生命周期和...

    maven简单例子

    综上所述,"maven简单例子"和"maven 部署示例"涵盖了Maven的基础用法,包括项目结构、依赖管理、构建生命周期、插件使用以及部署流程。通过"my-app-simple"项目,我们可以亲手实践这些概念,加深对Maven的理解和应用...

    maven2完全使用手册

    《Maven2完全使用手册》 Maven2是一款强大的Java项目管理和综合工具,它通过提供一套标准化的构建过程,大大...通过理解其核心概念和使用方法,开发者可以更高效地管理项目,专注于代码编写,而不是繁琐的构建过程。

    使用springmvc+maven做简单的网页增删改查

    以上就是使用Spring MVC和Maven搭建一个简单Web应用的基本步骤。通过这个项目,你可以学习到如何整合Spring MVC与Maven,理解MVC模式,以及如何处理数据库操作和Web请求。同时,这只是一个基础起点,实际项目可能...

    Apache Maven 2 Effective Implementation

    ### Apache Maven 2 有效实施知识点详解 ...通过深入学习《Apache Maven 2 Effective Implementation》这本书,读者不仅可以掌握 Maven 的基本使用方法,还能了解到如何利用 Maven 来提高团队的开发效率和项目质量。

    Maven构建struts2最简单例子

    在这个"使用Maven构建Struts2最简单例子"中,我们将探讨如何结合这两个工具来创建一个基础的J2EE应用。 首先,让我们深入了解Maven。Maven使用一个称为POM(Project Object Model)的XML文件来定义项目的配置信息,...

    使用Idea14.1.4和maven创建java web项目

    ### 使用Idea14.1.4和Maven创建Java Web项目 ...这个过程不仅让我们了解了IDEA和Maven的基本用法,也为今后的开发打下了坚实的基础。在实际开发过程中,还可以根据具体需求进一步完善项目结构和功能模块。

    简单的maven+SSM小项目

    【SSM框架基础】 ...通过这个简单的maven+SSM小项目,初学者可以学习如何搭建SSM环境,理解各框架之间的协作,以及Maven如何管理项目依赖。同时,MyEclipse提供了一个友好的开发平台,使整个开发过程更加高效。

    mavenSSH+Ajax2

    Maven SSH 和 Ajax 2 是在开发高效、现代化Web应用程序时经常使用的两个关键技术。Maven SSH 提供了一种基于Maven构建工具的SSH(Spring Security)集成解决方案,而Ajax 2则代表了Asynchronous JavaScript and XML...

    Maven2 配置指南(java 项目管理之路)

    - **目的**:通过一个简单的示例项目来了解Maven的基本使用方法。 - **步骤**: - 下载示例项目。 - 创建项目。 - 构建项目。 - 分析POM文件。 2. **核心概念** - **Maven插件与目标**:插件提供了执行特定...

    dubbo+zookeeper(maven)简单实现源码

    1. **Dubbo**:由阿里巴巴开发的高性能Java RPC框架,它使得服务调用就像本地方法调用一样简单。Dubbo提供了服务注册与发现、远程调用、负载均衡、容错处理、监控等功能,是微服务架构中的关键组件。在本项目中,...

Global site tag (gtag.js) - Google Analytics