`
eddysheng
  • 浏览: 111989 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用maven2管理spring2.5项目(基于Jpetstore Demo)

阅读更多

目的:spring好久没有系统的学习了,借这个机会重新学习一下spring的思想同时换一种构建的思路。

 

maven2是一款更时髦的软件构建工具,功能类似于ant,但是它约定优于配置的理念、简洁的项目对象模型、解决包依赖的优势和其他良好的特性使其越来越流行。

 

默认情况下,maven2的资源包依赖于远程的互联网资源库以及本地的私有资源库,而在实际的开发中,大多数采用remote库--〉proxy库--〉local库三层结构,这样不但提高了构建的效率,也为团队开发提高了便利性。

 

因此我的demo会从以下几个方面展开:

1。maven2环境搭建

2。jpetstore结构整理

3。pom文件

 

前置约束:

     maven2版本:2.2.0

     nexus 版本:1.3.6

     spring版本:2.5.6

 

一。maven2环境搭建

 

1。maven2.2.0下载安装

 

       首先从apache网站上下载maven2,下载地址为http://www.apache.org/dyn/closer.cgi/maven/binaries/apache-maven-2.2.0-bin.zip 。下载完毕后将其解压缩至C:\tools\apache-maven-2.2.0\下面。

 

        然后设置环境变量M2_HOME,指向C:\tools\apache-maven-2.2.0\,同时在path环境变量中追加%M2_HOME%/bin;

        最后打开一个dos窗口,输入mvn -version,显示类似如下:

C:\Documents and Settings\shenge>mvn -version
        Apache Maven 2.2.0 (r788681; 2009-06-26 21:04:01+0800)

        Java version: 1.5.0_10

        Java home: C:\tools\jdk15010\jre

        Default locale: zh_CN, platform encoding: GBK

        OS name: "windows xp" version: "5.1" arch: "x86" Family: "windows"


        即表示安装成功。

 

       很多公司都需要通过代理才能访问www,因此maven2要下载互联网资源包,需要设置代理。在maven2的全局配置文件C:\tools\apache-maven-2.2.0\conf\settings.xml设置

 

<proxies>
    <!-- proxy Specification for one proxy, to be used in connecting to the network.-->
    <proxy>
      <id>optional</id>
      <active>true</active>
      <protocol>http</protocol>
      <username></username>
      <password></password>
      <host>proxy.host.com</host>
      <port>port</port>
      <nonProxyHosts>localhost|127.0.0.1</nonProxyHosts>
    </proxy>   
  </proxies>
 

 

        settings.xml分为全局设置和用户设置,在maven2安装目录下的就是全局设置,也可以将此文件拷贝到用户目录下面的.m2下面,即为用户设 置。在windows开发环境下,只用一个已经足够。在这个文件中同时可以设计镜像...,将在后面demo过程中进行部分介绍。

 

2。nexus1.3.6下载安装

        首先从sonatype下载nexus,下载地址为http://nexus.sonatype.org/downloads/nexus-webapp-1.3.6-bundle.zip ,下载完毕后解压缩到目录C:\tools\nexus1.3.6\下面。

 

        然后是启动nexus,nexus自带jetty容器,因此直接运行C:\tools\nexus1.3.6\bin\jsw\windows-x86-32\Nexus.bat即可。如下输出:

C:\tools\nexus1.3.6\bin\jsw\windows-x86-32>nexus
jvm 1    | 2009-07-28 14:05:28 INFO  - o.s.n.Nexus:default           - Creating
default proxied release repository template...
jvm 1    | 2009-07-28 14:05:28 INFO  - o.s.n.Nexus:default           - Creating
default proxied snapshot repository template...
jvm 1    | 2009-07-28 14:05:28 INFO  - o.s.n.Nexus:default           - Creating
default virtual repository template...
jvm 1    | 2009-07-28 14:05:28 INFO  - o.s.n.Nexus:default           - Nexus Wor
k Directory : C:\tools\nexus1.3.6\bin\jsw\windows-x86-32\..\..\..\..\sonatype-wo
rk\nexus
jvm 1    | 2009-07-28 14:05:28 INFO  - o.s.n.Nexus:default           - Started N
exus (version 1.3.6 OSS)
jvm 1    | 2009-07-28 14:05:29 INFO  - o.s.j.w.PlexusConfi~          - SecurityM
anager with role='org.sonatype.jsecurity.realms.PlexusSecurity' and roleHint='we
b' found in Plexus.
jvm 1    | 2
009-07-28 14:05:29 INFO  - org.mortbay.log               - Started S
electChannelConnector@0.0.0.0:8081

        访问http://localhost:8081/nexus,可以出现nexus界面,即代表启动成功。

 

        接下来,登录,管理员用户名密码默认为admin/admin123,登录后即可以进行proxy库的设置。

 

        最后,设置proxy库以及设置maven2使其从nexus检索资源包。在此,我让maven2检索所有的资源包都从nexus public repositories组获取。为了达到这个目的,需要在settings.xml中设置如下:

 

<settings>
  <mirrors>
    <mirror>
      <!--This sends everything else to /public -->
      <id>nexus</id>
      <mirrorOf>*</mirrorOf>
      <url>http://localhost:8081/nexus/content/groups/public</url>
    </mirror>
  </mirrors>
  <profiles>
    <profile>
      <id>nexus</id>
      <!--Enable snapshots for the built in central repo to direct -->
      <!--all requests to nexus via the mirror -->
      <repositories>
        <repository>
          <id>central</id>
          <url>http://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </repository>
      </repositories>
     <pluginRepositories>
        <pluginRepository>
          <id>central</id>
          <url>http://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
  <activeProfiles>
    <!--make the profile active all the time -->
    <activeProfile>nexus</activeProfile>
  </activeProfiles>
</settings>
 

   此时,maven2查找资源包,无论是自己查找还是在pom中另外定义了其他资源库位置,都会到这个组里面进行查找。这就导致,如果在pom中定义了其他的资 源库位置令资源包查找不到,解决的办法有两个,一个是为mirrorOf指定值,此时maven2会直接根据pom指定的资源包位置进行下载;一个是通过 nexus进行管理,将pom中指定的资源库通过nexus管理界面添加到public repositories组中。

   当然,更标准的做法是所有的第三方jar都从一个中央资源库获取,本项目生成的包可以发布到另一个release的资源库位置。

 

        注:通过nexus的wrapper.exe可以轻松的将nexus在windows环境下面包装成windows服务。

 

二。Jpetstore结构整理

 

        maven2的开发环境准备好了,下面开始整理spring2.5.6自带的Jpetstore例子的目录结构以及依赖包的整理。maven2对于开发的目录结构的理念是约定优于配置,因此它的结构基本上固定的。

 

       1。目录结构整理。

            先看一下Jpetstore的原先结构和maven2改造后的目录结构的对比:

 

        还有一步要在此特别说明一下,src下面的sqlmap相关vo影射xml文件需要连同目录结构一起放到main/resources/下面。

        其实,本身spring自带的jpetstore目录就已经安排的非常好了,所以迁移到maven2也是非常方便。

 

        2。依赖包整理。

 

        Jpetstore依赖包列表如下:

包名称 包版本 groupID artifactID version
aspectjweaver.jar 1.6.2 org.aspectj aspectjweaver 1.6.2
axis.jar 1.4 org.apache axis 1.4
commons-beanutils.jar 1.6 org.apache.commons beanutils 1.6
commons-collections.jar 3.2 org.apache.commons colleactions 3.2
commons-dbcp.jar 1.2.2 org.apache.commons dbcp 1.2.2
commons-digester.jar 1.6 org.apache.commons digester 1.6
commons-discovery.jar 0.2 org.apache.commons discovery 0.2
commons-logging.jar 1.1.1 org.apache.commons logging 1.1.1
commons-pool.jar 1.3 org.apache.commons pool 1.3
commons-validator.jar 1.1.4 org.apache.commons validator 1.1.4
hessian-3.1.3.jar 3.1.3 com.caucho hessian 3.1.3
hsqldb.jar private-2005/07/12-01:24:00
org.hsqldb hsqldb 1.0.1(自定)
ibatis-2.3.4.726.jar 2.3.4 build# 726 com.ibatis ibatis 2.3.4
jaxrpc.jar created-by:1.4.2_05-b04 javax.xml jaxrpc 1.4.2
jstl.jar 1.1.2 javax.servlet jstl 1.1.2
saaj-api.jar created-by:1.4.2_11-b06 javax.xml soap 1.4.2
spring.jar 2.5.6.SEC01 org.springframework core 2.5.6
spring-webmvc.jar 2.5.6.SEC01 org.springframework web 2.5.6
standard.jar 1.1.2 org.apache.taglibs standard 1.1.2
struts.jar 1.2.9 org.apache struts 1.2.9
wsdl4j.jar 1.5.1 javax.wsdl wsdl4j 1.5.1
jpetstore.jar org.springframework.samples jpetstore 1.0.0.1(自定)
servlet-api.jar 2.4 javax.servlet servlet-api 2.4

 

       接下来就是在pom文件中增加对这些包的依赖。其实要改造一个已经存在的项目,要改造这些依赖包是一项繁琐的工作,为了确保项目的依赖包没有弄错版本,我的建议是暂时先将这些包手工安装到nexus代理库中,以保证下载的库是我们正在使用的。

 

       因为这个demo里面使用的只是public repositories组资源库,所以可以通过如下步骤来添加我们自己的依赖包进nexus库。以上传hessian-3.1.3.jar为例:

       在nexus 3rd party库中upload 我们的hessian-3.1.3.jar,GAV Definition选择GAV Parameters,Group填com.caucho,Artifact填hessian,Version填3.1.3,Packaging选择jar;然后在选择构建上传部分选择我们本地的jar文件上传即可。

       其他的依赖包可以做相似的处理。

做这些的前提是3rd party资源库必须包含在public repositories组中。

 

但是jpetstore.jar是个例外,这个资源包是在项目的构建过程中产生的,同时又在构建war的时候依赖于这个jar包,所以这个jar是不需要预先安装到nexus中,而是在maven2的构建过程中自动安装的????。

 

 上面的目录结构对比图中,maven2目录结构我是通过如下操作来生成的:

mvn archetype:create -DgroupId=com.springframework.samples -DartifactId=jpetstore -DarchetypeArtifactId=maven-archetype-webapp

同时根据maven2的目录约定增加了一些目录,然后将相应的原先jpetstore目录下的文件拷贝到新的maven2目录结构下面。

 

三。pom文件

 

这一部分我们主要围绕maven2的核心pom文件来看一下maven2的处理过程。

 

先看一下通过上面的命令生成出来的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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.springframework.samples</groupId>
  <artifactId>jpetstore</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>jpetstore 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>
  </dependencies>
  <build>
    <finalName>jpetstore</finalName>
  </build>
</project>

 

   首先,为这个pom增加jpetstore所需的包依赖。

 

<dependencies>
  	<dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.6.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache</groupId>
      <artifactId>axis</artifactId>
      <version>1.4</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>beanutils</artifactId>
      <version>1.6</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>colleactions</artifactId>
      <version>3.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>dbcp</artifactId>
      <version>1.2.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>digester</artifactId>
      <version>1.6</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>discovery</artifactId>
      <version>0.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>logging</artifactId>
      <version>1.1.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>pool</artifactId>
      <version>1.3</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>validator</artifactId>
      <version>1.1.4</version>
    </dependency>
    
    <dependency>
      <groupId>com.caucho</groupId>
      <artifactId>hessian</artifactId>
      <version>3.1.3</version>
    </dependency>
    <dependency>
      <groupId>org.hsqldb</groupId>
      <artifactId>hsqldb</artifactId>
      <version>1.0.1</version>
    </dependency>
    <dependency>
      <groupId>com.ibatis</groupId>
      <artifactId>ibatis</artifactId>
      <version>2.3.4</version>
    </dependency>
    <dependency>
      <groupId>javax.xml</groupId>
      <artifactId>jaxrpc</artifactId>
      <version>1.4.2</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.1.2</version>
    </dependency>
    <dependency>
      <groupId>javax.xml</groupId>
      <artifactId>soap</artifactId>
      <version>1.4.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
    <dependency>
      <groupId>javax.wsdl</groupId>
      <artifactId>wsdl4j</artifactId>
      <version>1.5.1</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.4</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache</groupId>
      <artifactId>struts</artifactId>
      <version>1.2.9</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>core</artifactId>
      <version>2.5.6</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>web</artifactId>
      <version>2.5.6</version>
    </dependency>
  </dependencies>

 

   除了自身生成的jpetstore.jar,其他的依赖都已经建好。

 

   其实,到此处,执行mvn package已经可以生成jpetstore.war了。只是现在编译后的class文件没有预先打包到jpetstore.jar文件中。

 

   现在生成的war还不能放到容器中运行,需要修改一下jdbc.txt以及构建合适的数据库。

 

   同时可以执行mvn install将war包安装到local库中,也可以执行mvn deploy安装到proxy库中,最酷的一点可以通过mvn site生成站点。当然现在的这个pom还缺少很多元素,以后可以慢慢补充。

 

   如何通过先发布jpetstore.jar,然后构建我们的war???暂时我也没找到及决方案,先放这儿吧。

 

Maven2还有很多其他好玩的东西,在接下来的时间,我会慢慢基于jpetstore项目进行一项项的研究,最终的目标是利用maven2+teamcity+svn整合一个良好的可运转的持续集成环境。

 

maven2已经提供很多插件plugin,可以参考http://maven.apache.org/plugins/index.html

 

  • 大小: 8.9 KB
2
1
分享到:
评论

相关推荐

    spring2.5 mvc 完整项目

    1. **项目初始化**:首先,我们需要一个基础的Maven或Gradle项目结构,包含必要的配置文件如pom.xml或build.gradle,以管理项目依赖。 2. **配置Spring MVC**:在web.xml中配置Spring DispatcherServlet,这是...

    maven库含strut2.1.6spring2.5等常用JAR包

    maven库含strut2.1.6spring2.5等常用JAR包提供给下载库慢,或不能联机到互联网的用户使用

    struts2.1+spring2.5+hibernate3.3整合之第一步(spring2.5+hibernate3.3)

    1. 配置环境:确保项目中引入了Struts2、Spring和Hibernate的相应库,这通常通过Maven或Gradle等构建工具完成。 2. 配置Spring:创建Spring的配置文件(如`applicationContext.xml`),定义Bean并设置其依赖。例如...

    使用Maven管理Spring框架Demo

    本示例"使用Maven管理Spring框架Demo"将深入探讨如何利用Maven来构建一个基于Spring的应用程序。 首先,我们需要理解Maven的核心概念:项目对象模型(Project Object Model,POM)。POM是Maven项目的基础,它包含了...

    struts2+Spring2.5 项目简单实例

    在这个“Struts2+Spring2.5项目简单实例”中,我们可以学习到如何将这两个框架整合起来,构建一个简单的注册系统。 1. **Struts2框架**:Struts2是基于拦截器的MVC框架,它提供了一种处理HTTP请求并将其映射到特定...

    spring2.5源码编译

    确保你已经安装了Java Development Kit (JDK) 1.5或以上版本,因为Spring 2.5是基于这个版本的Java语言构建的。同时,你还需要一个集成开发环境(IDE),如Eclipse或IntelliJ IDEA,它们都支持Maven项目,这对于编译...

    paranamer-maven-plugin-2.5.zip

    【标题】"paranamer-maven-plugin-2.5.zip" 是一个Maven插件的压缩包,主要用于Paranamer库的构建过程。Paranamer是一个Java库,它能够自动推测方法参数的名字,这对于那些使用Java字节码库或者反射API的开发者来说...

    cxf+Spring2.5

    【描述】"CXF2.5.0+Spring2.5 集成DEMO" 提供了一个实际的演示项目,展示了如何在Spring 2.5上下文中配置和使用CXF 2.5.0版本。这个DEMO可能包括了创建服务提供者、客户端以及相关的配置文件,帮助开发者理解如何在...

    Spring2.5搭建

    1. **添加Spring库**:在项目中引入Spring 2.5的JAR包或者使用Maven或Gradle等构建工具添加依赖。 2. **创建配置文件**:根据选择的Bean实例化方式,创建相应的配置文件,如XML或Java配置类。 3. **启动Spring容器...

    Maven2.0.11_SpringMVC2.5_Tiles2.0.5

    《Maven2.0.11_SpringMVC2.5_Tiles2.0.5:...Maven管理项目依赖,Spring MVC处理业务逻辑,而Tiles则负责页面布局,形成了一套完整的工作流程。理解并掌握这些技术,对于提升个人或团队的开发能力具有显著的促进作用。

    java教程之手把手教你用eclipse新建基于maven构建的spring boot项目.zip

    在本Java教程中,我们将深入探讨如何使用Eclipse IDE创建一个基于Maven构建的Spring Boot项目。这个过程涉及几个关键步骤,包括环境配置、Eclipse的设置、Maven的使用以及Spring Boot项目的初始化。 首先,我们需要...

    CXF2+Spring2.5开发WebService实例

    在本文中,我们将深入探讨如何使用Apache CXF 2与Spring 2.5框架来开发Web服务实例。Apache CXF是一个流行的开源项目,它提供了一种简单且强大的方式来实现和消费SOAP和RESTful Web服务。Spring框架则以其模块化、...

    spring2.5整合ehcache2.0使用

    在本文中,我们将深入探讨如何将Spring 2.5与Ehcache 2.0进行集成,以便在我们的应用程序中实现高效、可扩展的缓存管理。Ehcache是一款广泛使用的开源Java缓存解决方案,而Spring框架则为它提供了一个方便的集成层,...

    spring2.5 中文参考手册

    7. **Maven和Gradle集成**:尽管2.5版本的Spring是在Maven尚未广泛流行的时代发布的,但它已经开始支持构建工具的集成,帮助开发者更方便地管理和构建项目。 8. **Spring Web Services**:Spring 2.5版本也包含了对...

    maven管理的Spring多线程任务demo

    本示例"maven管理的Spring多线程任务demo"着重展示了如何在Spring框架中利用Maven进行项目构建,并实现多线程任务处理。在SSM(Spring、SpringMVC、MyBatis)框架背景下,如果你已经有所了解,那么这个例子将帮助你...

    简单的Spring Boot 基于 Maven 的 Demo

    在本Demo中,我们将探讨如何使用Maven构建基于Spring Boot的应用。 **1. Maven简介** Maven 是一个Java项目管理工具,它能够管理项目的构建、报告和文档等生命周期。Maven通过使用一个项目对象模型(Project Object...

    Spring2.5架构图

    8. **Maven集成**:Spring 2.5 开始支持 Maven,开发者可以通过 Maven 的依赖管理和构建功能来更高效地管理项目。 9. **国际化和本地化**:Spring 2.5 提供了强大的国际化和本地化支持,通过 `...

    Spring之Spring2.5集成Struts2.2

    还需要在项目中添加Spring和Struts2的依赖库,通常通过Maven或Gradle来管理。 2. **配置Struts2**:在Web应用的web.xml中,需要配置Struts2的核心过滤器`org.apache.struts2.dispatcher.FilterDispatcher`或者更...

    Spring in Action 使用Maven 构建Spring 工程

    《Spring in Action》一书是Spring框架的实践指南,它深入介绍了如何使用Maven构建Spring工程。Maven是一个流行的项目管理和综合工具,它通过提供一套标准化的构建过程,简化了Java项目的构建、依赖管理和部署。在...

    struts2+hibernate3.3+spring2.5整合

    在Eclipse环境下,开发者通常会使用Maven或者Gradle构建工具来管理项目依赖,通过添加相应的库依赖,可以轻松集成这三个框架。同时,Eclipse的插件如Maven Integration for WTP可以帮助开发者配置Web项目,方便运行...

Global site tag (gtag.js) - Google Analytics