- 浏览: 111989 次
- 性别:
- 来自: 北京
最新评论
-
bo_hai:
请问:这样配置可以解决事务回滚的问题吗?
基于spring和ibatis的多数据源切换方案 -
rockydang:
多谢分享。
第一个配置文件中有一块配置错了,估计是手误啊
...
基于spring和ibatis的多数据源切换方案 -
chao121:
[*]啊顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶121 ...
征求方案-关于多个excel,大数据量同时导入 -
jitabc:
效果很不错。
为spring2.5中的jpetstore增加perf4j监控 -
徐风子:
<p>原题来自:http://projecteul ...
一道软件面试题
目的: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
发表评论
-
ANT通过sshexec启动weblogic一直不能退出的解决方案
2009-11-24 16:44 3351通常我们通过sshexec来启动weblogic(其他服务器也 ... -
基于cactus和StrutsTestCase容器内测试struts1.2应用
2009-09-01 10:01 2000背景 我们 ... -
测试配置为连接数据源单独的jar
2009-08-31 09:46 1078问题描述 以前我们做的项目基于未来 ... -
软件测试周期中各种类型的概念汇总
2009-08-19 16:03 1514之前做持续集成环境时 ... -
maven2使用技巧集合(收集)
2009-07-28 22:45 14411.打包时,不在META-INF中生成maven目录 ... -
teamcity 5.0 EAP 发布了!
2009-07-24 11:25 1548teamcity的维护更新太快了,几周时间就经历了三个版本了, ... -
基于teamcity的持续集成实践(当前不足)
2009-07-24 11:15 1521持续集成到现在基本上是一个可持续运行的环境了,当然还需要完善。 ... -
基于teamcity的持续集成实践(单元测试)
2009-07-23 17:23 1217单元测试,是一种直接面向生产代码的测试,是一种白盒测试。 ... -
基于teamcity的持续集成实践(集成测试)
2009-07-23 15:48 1215我在此所说的集成测试其实就是项目对外的接口测试,包括http接 ... -
基于teamcity的持续集成实践(findbugs)
2009-07-23 14:20 1218FindBugs 是一个静态分析工具,它检查类或者 JAR 文 ... -
基于teamcity的持续集成实践(emma)
2009-07-23 10:35 1653emma是一个统计代码测试覆盖率的工具,teamcity默认集 ... -
基于teamcity的持续集成实践(ant脚本2)
2009-07-23 10:31 1793上一篇,说到了ant脚本如何分类以及何组织的,现在让我们看一下 ... -
基于teamcity的持续集成实践(ant脚本1)
2009-07-22 23:12 1342使用ant来进行构建,最重要的就是脚本的组织,下面我们将con ... -
基于teamcity的持续集成实践(配置)
2009-07-22 14:43 3556本章节仅覆盖svn上的一个简单项目,集成测试覆盖率、代码质量检 ... -
基于teamcity的持续集成实践(安装)
2009-07-21 23:02 2135准备的基础环境是 1。操作系统hp-unix,teamcit ... -
基于teamcity的持续集成实践(简单介绍)
2009-07-21 16:11 2503持续集成Continuous Integration,一句话概 ...
相关推荐
1. **项目初始化**:首先,我们需要一个基础的Maven或Gradle项目结构,包含必要的配置文件如pom.xml或build.gradle,以管理项目依赖。 2. **配置Spring MVC**:在web.xml中配置Spring DispatcherServlet,这是...
maven库含strut2.1.6spring2.5等常用JAR包提供给下载库慢,或不能联机到互联网的用户使用
1. 配置环境:确保项目中引入了Struts2、Spring和Hibernate的相应库,这通常通过Maven或Gradle等构建工具完成。 2. 配置Spring:创建Spring的配置文件(如`applicationContext.xml`),定义Bean并设置其依赖。例如...
本示例"使用Maven管理Spring框架Demo"将深入探讨如何利用Maven来构建一个基于Spring的应用程序。 首先,我们需要理解Maven的核心概念:项目对象模型(Project Object Model,POM)。POM是Maven项目的基础,它包含了...
在这个“Struts2+Spring2.5项目简单实例”中,我们可以学习到如何将这两个框架整合起来,构建一个简单的注册系统。 1. **Struts2框架**:Struts2是基于拦截器的MVC框架,它提供了一种处理HTTP请求并将其映射到特定...
确保你已经安装了Java Development Kit (JDK) 1.5或以上版本,因为Spring 2.5是基于这个版本的Java语言构建的。同时,你还需要一个集成开发环境(IDE),如Eclipse或IntelliJ IDEA,它们都支持Maven项目,这对于编译...
【标题】"paranamer-maven-plugin-2.5.zip" 是一个Maven插件的压缩包,主要用于Paranamer库的构建过程。Paranamer是一个Java库,它能够自动推测方法参数的名字,这对于那些使用Java字节码库或者反射API的开发者来说...
【描述】"CXF2.5.0+Spring2.5 集成DEMO" 提供了一个实际的演示项目,展示了如何在Spring 2.5上下文中配置和使用CXF 2.5.0版本。这个DEMO可能包括了创建服务提供者、客户端以及相关的配置文件,帮助开发者理解如何在...
1. **添加Spring库**:在项目中引入Spring 2.5的JAR包或者使用Maven或Gradle等构建工具添加依赖。 2. **创建配置文件**:根据选择的Bean实例化方式,创建相应的配置文件,如XML或Java配置类。 3. **启动Spring容器...
《Maven2.0.11_SpringMVC2.5_Tiles2.0.5:...Maven管理项目依赖,Spring MVC处理业务逻辑,而Tiles则负责页面布局,形成了一套完整的工作流程。理解并掌握这些技术,对于提升个人或团队的开发能力具有显著的促进作用。
在本Java教程中,我们将深入探讨如何使用Eclipse IDE创建一个基于Maven构建的Spring Boot项目。这个过程涉及几个关键步骤,包括环境配置、Eclipse的设置、Maven的使用以及Spring Boot项目的初始化。 首先,我们需要...
在本文中,我们将深入探讨如何使用Apache CXF 2与Spring 2.5框架来开发Web服务实例。Apache CXF是一个流行的开源项目,它提供了一种简单且强大的方式来实现和消费SOAP和RESTful Web服务。Spring框架则以其模块化、...
在本文中,我们将深入探讨如何将Spring 2.5与Ehcache 2.0进行集成,以便在我们的应用程序中实现高效、可扩展的缓存管理。Ehcache是一款广泛使用的开源Java缓存解决方案,而Spring框架则为它提供了一个方便的集成层,...
7. **Maven和Gradle集成**:尽管2.5版本的Spring是在Maven尚未广泛流行的时代发布的,但它已经开始支持构建工具的集成,帮助开发者更方便地管理和构建项目。 8. **Spring Web Services**:Spring 2.5版本也包含了对...
本示例"maven管理的Spring多线程任务demo"着重展示了如何在Spring框架中利用Maven进行项目构建,并实现多线程任务处理。在SSM(Spring、SpringMVC、MyBatis)框架背景下,如果你已经有所了解,那么这个例子将帮助你...
在本Demo中,我们将探讨如何使用Maven构建基于Spring Boot的应用。 **1. Maven简介** Maven 是一个Java项目管理工具,它能够管理项目的构建、报告和文档等生命周期。Maven通过使用一个项目对象模型(Project Object...
8. **Maven集成**:Spring 2.5 开始支持 Maven,开发者可以通过 Maven 的依赖管理和构建功能来更高效地管理项目。 9. **国际化和本地化**:Spring 2.5 提供了强大的国际化和本地化支持,通过 `...
还需要在项目中添加Spring和Struts2的依赖库,通常通过Maven或Gradle来管理。 2. **配置Struts2**:在Web应用的web.xml中,需要配置Struts2的核心过滤器`org.apache.struts2.dispatcher.FilterDispatcher`或者更...
《Spring in Action》一书是Spring框架的实践指南,它深入介绍了如何使用Maven构建Spring工程。Maven是一个流行的项目管理和综合工具,它通过提供一套标准化的构建过程,简化了Java项目的构建、依赖管理和部署。在...
在Eclipse环境下,开发者通常会使用Maven或者Gradle构建工具来管理项目依赖,通过添加相应的库依赖,可以轻松集成这三个框架。同时,Eclipse的插件如Maven Integration for WTP可以帮助开发者配置Web项目,方便运行...