上篇跟大家聊了聊maven的简单使用,之前也写了一篇搭建基于SSI(struts2,spring,ibatis)的javaEE开发环境的文章,但是那篇只是给初学者搭建一个简单的SSI应用的框架,其实我们发现问题了,jar越来越多,管理起来越来越混乱,在实际工作中,面向企业的开发中一个项目将会有更多的jar,更多的是一个团对对外做一个service,然后将service打包成jar,供其他团队使用。
开始的时候可以通过聊天工具等将jar传给其他团队,但是一旦团队多了,jar包多了,这种传输还忙的过来吗?如果对jar升级呢,是不是又得重新传输一遍?是不是非常的不方便,而且又容易造成错误,因此迫切希望一种能管理jar的工具,实现一个团队上传到某个资源处,其他团队直接下载,当更新jar的时候,只需要修改版本号便可实现对service的更新,这种工具之一便是maven。
在本篇,将利用maven手把手教大家构建基于SSI(struts2、spring、ibatis)的java ee开发环境。
如果大家对maven还不够了解,请自己百度吧,如果对maven环境的搭建不熟悉,请参考LZ的上一篇用maven来创建web工程 。
好了,废话不多说了,开始进入正题。
1.构建maven web应用
利用mvn archetype:generate -DgroupId=com.yihaodian.backend -DartifactId=mywebapps -DarchetypeArtifactId=maven-archetype-webapp -Dversion=1.0 构建一个maven应用,然后进入到项目执行mvn clean compile ,结束后执行mvn eclipse:eclipse 、
这样就创建好项目了,然后导入到eclipse中。
当然要使eclipse支持maven,还需要下载一个插件m2e,这里就不详细展开了,大家可以参考Eclipse 安装SVN、Maven插件 - 雨之殇 - 博客园。
2.搭建好目录结构,导入的工程(本篇为mywebapps)还需要改造一下目录结构
如图
3.移植之前没有经过maven的工程(搭建基于SSI(struts2,spring,ibatis)的javaEE开发环境中搭建的工程)中的一些类文件和配置文件到本工程中。
4.pom.xml文件改造:
对需要的jar文件添加maven支持。
1 <properties> 2 <!-- struts2 --> 3 <commons-fileupload.version>1.2.1</commons-fileupload.version> 4 <commons-io.version>1.3.2</commons-io.version> 5 <commons-lang.version>2.5</commons-lang.version> 6 <commons-logging.version>1.1.1</commons-logging.version> 7 <freemarker.version>2.3.16</freemarker.version> 8 <javassist.version>3.14.0-GA</javassist.version> 9 <struts2-core.version>2.2.1.1</struts2-core.version> 10 <xwork-core.version>2.2.1.1</xwork-core.version> 11 <!-- struts2对json支持 --> 12 <struts2-json-plugin.version>2.2.1.1</struts2-json-plugin.version> 13 <!-- spring --> 14 <spring.version>2.5.6.SEC02</spring.version> 15 <struts2-spring-plugin.version>2.2.1.1</struts2-spring-plugin.version> 16 <!-- spring AOP --> 17 <aspectjrt.version>1.5.4</aspectjrt.version> 18 <aspectjweaver.version>1.5.4</aspectjweaver.version> 19 <cglib-nodep.version>2.2</cglib-nodep.version> 20 <!-- spring jdbc --> 21 <commons-dbcp.version>1.4</commons-dbcp.version> 22 <commons-pool.version>1.5.4</commons-pool.version> 23 <!-- spring 测试框架 --> 24 <spring-test.version>2.5.6</spring-test.version> 25 <!-- mysql --> 26 <mysql-connector-java.version>5.1.25</mysql-connector-java.version> 27 28 <!-- ibatis --> 29 <ibatis-sqlmap.version>2.3.4.726</ibatis-sqlmap.version> 30 31 <!-- log4j日志 --> 32 <log4j.version>1.2.16</log4j.version> 33 34 <!-- junit单元测试 --> 35 <junit.version>4.4</junit.version> 36 37 <!-- maven个性化定制 --> 38 <maven-dependency-plugin.version>2.1</maven-dependency-plugin.version> 39 <maven-war-plugin.version>2.1.1</maven-war-plugin.version> 40 <maven-antrun-plugin.version>1.6</maven-antrun-plugin.version> 41 <maven-compiler-plugin.version>2.3.2</maven-compiler-plugin.version> 42 <maven-eclipse-plugin.version>2.8</maven-eclipse-plugin.version> 43 <maven-assembly-plugin.version>2.2</maven-assembly-plugin.version> 44 45 <!-- 其他 --> 46 <commons-beanutils.version>1.8.3</commons-beanutils.version> 47 <commons-collections.version>3.2</commons-collections.version> 48 <tomcat-jdbc.version>7.0.32</tomcat-jdbc.version> 49 <aopalliance.version>1.0</aopalliance.version> 50 <servlet-api.version>2.5</servlet-api.version> 51 <commons-codec.version>1.6</commons-codec.version> 52 <ezmorph.version>1.0.5</ezmorph.version> 53 54 </properties> 55 <dependencies> 56 <!-- struts2 --> 57 <dependency> 58 <groupId>commons-io</groupId> 59 <artifactId>commons-io</artifactId> 60 <version>${commons-io.version}</version> 61 </dependency> 62 <dependency> 63 <groupId>commons-fileupload</groupId> 64 <artifactId>commons-fileupload</artifactId> 65 <version>${commons-fileupload.version}</version> 66 </dependency> 67 <dependency> 68 <groupId>commons-lang</groupId> 69 <artifactId>commons-lang</artifactId> 70 <version>${commons-lang.version}</version> 71 <type>jar</type> 72 <scope>compile</scope> 73 </dependency> 74 <dependency> 75 <groupId>commons-logging</groupId> 76 <artifactId>commons-logging</artifactId> 77 <version>${commons-logging.version}</version> 78 <type>jar</type> 79 <scope>compile</scope> 80 </dependency> 81 <dependency> 82 <groupId>org.apache.struts.xwork</groupId> 83 <artifactId>xwork-core</artifactId> 84 <version>${xwork-core.version}</version> 85 </dependency> 86 <dependency> 87 <groupId>org.javassist</groupId> 88 <artifactId>javassist</artifactId> 89 <version>${javassist.version}</version> 90 <type>jar</type> 91 <scope>compile</scope> 92 </dependency> 93 <dependency> 94 <groupId>org.apache.struts</groupId> 95 <artifactId>struts2-core</artifactId> 96 <version>${struts2-core.version}</version> 97 <exclusions> 98 <exclusion> 99 <groupId>com.sun</groupId> 100 <artifactId>tools</artifactId> 101 </exclusion> 102 <exclusion> 103 <groupId>org.springframework</groupId> 104 <artifactId>spring-orm</artifactId> 105 </exclusion> 106 <exclusion> 107 <groupId>org.springframework</groupId> 108 <artifactId>spring-test</artifactId> 109 </exclusion> 110 <exclusion> 111 <groupId>opensymphony</groupId> 112 <artifactId>ognl</artifactId> 113 </exclusion> 114 </exclusions> 115 <type>jar</type> 116 <scope>compile</scope> 117 </dependency> 118 <!-- freemarker --> 119 <dependency> 120 <groupId>org.freemarker</groupId> 121 <artifactId>freemarker</artifactId> 122 <version>${freemarker.version}</version> 123 <type>jar</type> 124 <scope>compile</scope> 125 </dependency> 126 127 <!-- Spring --> 128 <dependency> 129 <groupId>org.springframework</groupId> 130 <artifactId>spring-orm</artifactId> 131 <version>${spring.version}</version> 132 <type>jar</type> 133 <scope>compile</scope> 134 </dependency> 135 <dependency> 136 <groupId>org.springframework</groupId> 137 <artifactId>spring-web</artifactId> 138 <version>${spring.version}</version> 139 <type>jar</type> 140 <scope>compile</scope> 141 </dependency> 142 143 <dependency> 144 <groupId>org.springframework</groupId> 145 <artifactId>spring-tx</artifactId> 146 <version>${spring.version}</version> 147 <type>jar</type> 148 <scope>compile</scope> 149 </dependency> 150 <dependency> 151 <groupId>org.springframework</groupId> 152 <artifactId>spring-jdbc</artifactId> 153 <version>${spring.version}</version> 154 <type>jar</type> 155 <scope>compile</scope> 156 </dependency> 157 <dependency> 158 <groupId>org.springframework</groupId> 159 <artifactId>spring-context</artifactId> 160 <version>${spring.version}</version> 161 <type>jar</type> 162 <scope>compile</scope> 163 </dependency> 164 <dependency> 165 <groupId>org.springframework</groupId> 166 <artifactId>spring-aop</artifactId> 167 <version>${spring.version}</version> 168 <type>jar</type> 169 <scope>compile</scope> 170 </dependency> 171 <dependency> 172 <groupId>org.springframework</groupId> 173 <artifactId>spring-core</artifactId> 174 <version>${spring.version}</version> 175 <type>jar</type> 176 <scope>compile</scope> 177 </dependency> 178 <dependency> 179 <groupId>org.springframework</groupId> 180 <artifactId>spring-beans</artifactId> 181 <version>${spring.version}</version> 182 <type>jar</type> 183 <scope>compile</scope> 184 </dependency> 185 <dependency> 186 <groupId>org.springframework</groupId> 187 <artifactId>spring-context-support</artifactId> 188 <version>${spring.version}</version> 189 <type>jar</type> 190 <scope>compile</scope> 191 </dependency> 192 <dependency> 193 <groupId>org.springframework</groupId> 194 <artifactId>spring-webmvc</artifactId> 195 <version>${spring.version}</version> 196 <type>jar</type> 197 <scope>compile</scope> 198 </dependency> 199 200 <!-- struts2与spring集成 --> 201 <dependency> 202 <groupId>org.apache.struts</groupId> 203 <artifactId>struts2-spring-plugin</artifactId> 204 <version>${struts2-spring-plugin.version}</version> 205 <type>jar</type> 206 <scope>compile</scope> 207 <exclusions> 208 <exclusion><!-- 排除spring-core,以避免版本冲突 --> 209 <groupId>org.springframework</groupId> 210 <artifactId>sping-core</artifactId> 211 </exclusion> 212 </exclusions> 213 </dependency> 214 215 <!-- Sppring AOP --> 216 <dependency> 217 <groupId>org.aspectj</groupId> 218 <artifactId>aspectjweaver</artifactId> 219 <version>${aspectjweaver.version}</version> 220 <type>jar</type> 221 <scope>compile</scope> 222 </dependency> 223 <dependency> 224 <groupId>org.aspectj</groupId> 225 <artifactId>aspectjrt</artifactId> 226 <version>${aspectjrt.version}</version> 227 <type>jar</type> 228 <scope>compile</scope> 229 </dependency> 230 <dependency> 231 <groupId>cglib</groupId> 232 <artifactId>cglib-nodep</artifactId> 233 <version>${cglib-nodep.version}</version> 234 <type>jar</type> 235 <scope>compile</scope> 236 </dependency> 237 238 <!-- spring jdbc --> 239 <dependency> 240 <groupId>commons-dbcp</groupId> 241 <artifactId>commons-dbcp</artifactId> 242 <version>${commons-dbcp.version}</version> 243 <type>jar</type> 244 <scope>compile</scope> 245 </dependency> 246 <dependency> 247 <groupId>commons-pool</groupId> 248 <artifactId>commons-pool</artifactId> 249 <version>${commons-pool.version}</version> 250 <type>jar</type> 251 <scope>compile</scope> 252 </dependency> 253 254 <!-- Spring测试框架 --> 255 <dependency> 256 <groupId>org.springframework</groupId> 257 <artifactId>spring-test</artifactId> 258 <version>${spring-test.version}</version> 259 <scope>test</scope> 260 </dependency> 261 262 <!-- mysql驱动 --> 263 <dependency> 264 <groupId>mysql</groupId> 265 <artifactId>mysql-connector-java</artifactId> 266 <version>${mysql-connector-java.version}</version> 267 </dependency> 268 <!-- ibatis --> 269 <dependency> 270 <groupId>org.apache.ibatis</groupId> 271 <artifactId>ibatis-sqlmap</artifactId> 272 <version>${ibatis-sqlmap.version}</version> 273 </dependency> 274 275 <!-- log4j日志 --> 276 <dependency> 277 <groupId>log4j</groupId> 278 <artifactId>log4j</artifactId> 279 <version>${log4j.version}</version> 280 </dependency> 281 282 <!-- 283 以下部分是为了兼容Tomcat7做准备,如果已经使用了Tomcat7的话可以不引入 284 其中版本号为7.0.32,是为了兼容最新的Tomcat7版本号,其代码与7.0.30完全相同(通过MD5逐一校验每个Java文件之后确认),之前已经部署了的Pool可以不用修改。 285 --> 286 <dependency> 287 <groupId>org.apache.tomcat</groupId> 288 <artifactId>tomcat-jdbc</artifactId> 289 <version>${tomcat-jdbc.version}</version> 290 </dependency> 291 292 <!-- JUnit start --> 293 <dependency> 294 <groupId>junit</groupId> 295 <artifactId>junit</artifactId> 296 <version>${junit.version}</version> 297 <scope>test</scope> 298 </dependency> 299 300 <dependency> 301 <groupId>aopalliance</groupId> 302 <artifactId>aopalliance</artifactId> 303 <version>${aopalliance.version}</version> 304 <type>jar</type> 305 <scope>compile</scope> 306 </dependency> 307 <dependency> 308 <groupId>javax.servlet</groupId> 309 <artifactId>servlet-api</artifactId> 310 <version>${servlet-api.version}</version> 311 <type>jar</type> 312 <scope>compile</scope> 313 </dependency> 314 315 <dependency> 316 <groupId>commons-beanutils</groupId> 317 <artifactId>commons-beanutils</artifactId> 318 <version>${commons-beanutils.version}</version> 319 <type>jar</type> 320 <scope>compile</scope> 321 </dependency> 322 323 <dependency> 324 <groupId>commons-collections</groupId> 325 <artifactId>commons-collections</artifactId> 326 <version>${commons-collections.version}</version> 327 </dependency> 328 <!-- struts2对json支持 --> 329 <dependency> 330 <groupId>org.apache.struts</groupId> 331 <artifactId>struts2-json-plugin</artifactId> 332 <version>${struts2-json-plugin.version}</version> 333 <type>jar</type> 334 </dependency>
说明:(1).此处为了maven的升级以及版本公用,用到了maven的properties属性,在properties中定义变量,然后在全文便可以对其使用,采用${变量名}的语法。
(2).本文加了相对比较多的jar,并作了比较详细的注释,大家要是用不到,可以去掉一些,有些jar不是必须的
5.使maven将jar包打包到指定地点:
此处我是将mavan打包到工程的src/main/webapp/WEB-INF/lib,方便开发调试。
1 <!-- 复制jar包到WEB-INF/lib以便开发调试 --> 2 <plugin> 3 <groupId>org.apache.maven.plugins</groupId> 4 <artifactId>maven-dependency-plugin</artifactId> 5 <version>${maven-dependency-plugin.version}</version> 6 <executions> 7 <execution> 8 <id>copy</id> 9 <phase>package</phase> 10 <goals> 11 <goal>copy-dependencies</goal> 12 </goals> 13 <configuration> 14 <outputDirectory>src/main/webapp/WEB-INF/lib</outputDirectory> 15 </configuration> 16 </execution> 17 </executions> 18 </plugin>
6生成war包,并生成MD5加密
1 <!-- 生成war包,并写SVN当前版本号1 --> 2 <plugin> 3 <groupId>org.apache.maven.plugins</groupId> 4 <artifactId>maven-war-plugin</artifactId> 5 <version>${maven-war-plugin.version}</version> 6 <configuration> 7 <warName>${project.artifactId}-${project.version}-${SVN.committedRevision}</warName> 8 <packagingExcludes>statics/**,statics-111/**</packagingExcludes> 9 </configuration> 10 </plugin> 11 12 <!-- 生成MD5校验文件1 --> 13 <plugin> 14 <artifactId>maven-antrun-plugin</artifactId> 15 <version>${maven-antrun-plugin.version}</version> 16 <executions> 17 <execution> 18 <phase> package </phase> 19 <configuration> 20 <target> 21 <checksum> 22 <fileset dir="target"> 23 <include name="*" /> 24 </fileset> 25 </checksum> 26 </target> 27 28 </configuration> 29 <goals> 30 <goal>run</goal> 31 </goals> 32 </execution> 33 </executions> 34 </plugin>
这样,利用maven构建的基于SSI框架的J2EE工程就搭建好了。
唉,本希望上传我搭建好的工程给大家,供大家下载,无奈无法上传附件,只好作罢,有需要的小伙伴们直接留言吧,我直接发给你。
ps:现在我已经将工程上传至github:https://github.com/shunyang/mywebapps