Maven对ssh项目的拆分、聚合与调试
来源:互联网 发布:行助手检测不到网络 编辑:程序博客网 时间:2024/06/06 14:11
Maven是一个项目管理工具,使用maven对java项目进行构建、依赖管理可以是项目工程分块快发,测试运行更加便利。 Maven的最主要的优点是依赖管理(管理Jar包)和一键构建(一个命令完成编译、测试、运行、打包、部署、运行)。本文我们主要来实验一把如何通过Maven对一个原有的基于SSH的普通项目进行拆分和聚合,改变为一个Maven管理的SSH项目。 这里使用的原有项目是CRM(客户关系管理系统),按照常规的MVC理念,我们在使用Maven管理CRM时可以占时简单的划分DAO、SERVICE、WEB这三个子模块。 下图是CRM的文件结构:
下面开始Maven的整合:
创建Maven项目。
我们将这个项目定为父工程,主要负责统筹各个子模块以及管理各个子模块公共的资源,负责总的工程配置。
进入Eclipse——>新建——>Maven Project.
1.1 .在crm_ssh_parent的pom.xml中配置子工程中重复的pom内容,通常包括锁定依赖版本、设置编译版本、tomat运行插件,例如Strutus 、Spring 、Hibernate等项目共用的Jar文件坐标,如:
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.itcast.crm</groupId> <artifactId>crm_ssh_parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>SSH练习项目,Crm,Maven格式的父工程</name> <description>SSH练习项目Crm的Maven格式的父工程</description> <!-- 为了确定每个框架的版本号 --> <!-- 锁定版本常量--> <properties> <spring.version>4.2.4.RELEASE</spring.version> <struts2.version>2.3.24</struts2.version> <hibernate.version>5.0.7.Final</hibernate.version> <slf4j.version>1.6.6</slf4j.version> <log4j.version>1.2.12</log4j.version> <shiro.version>1.2.3</shiro.version> <cxf.version>3.0.1</cxf.version> <c3p0.version>0.9.1.2</c3p0.version> <mysql.version>5.1.6</mysql.version> </properties> <!-- 锁定版本,struts2-2.3.24、spring4.2.4、hibernate5.0.7 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate.version}</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>${struts2.version}</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>${struts2.version}</version> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.4</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.37</version> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.9.1</version> </dependency> <!-- <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <!-- jstl --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- shiro --> <!-- apache shiro dependencies --> <!-- <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-all</artifactId> <version>${shiro.version}</version> </dependency> --> <!-- spring --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.6.8</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <!-- struts2 begin --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>${struts2.version}</version> <exclusions> <exclusion> <artifactId>javassist</artifactId> <groupId>javassist</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>${struts2.version}</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-json-plugin</artifactId> <version>${struts2.version}</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-convention-plugin</artifactId> <version>${struts2.version}</version> </dependency> <!-- struts2 end --> <!-- hibernate begin --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>${hibernate.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.2.1.Final</version> </dependency> <!-- hibernate end --> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>${c3p0.version}</version> </dependency> <!-- <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>${cxf.version}</version> </dependency> --> <!-- log start --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- log end --> <!-- Javamail --> <!-- <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.4</version> </dependency> --> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>org.codehaus.xfire</groupId> <artifactId>xfire-core</artifactId> <version>1.2.6</version> </dependency> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6</version> </dependency> <!-- <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.11</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.11</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>3.11</version> </dependency> --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc14</artifactId> <version>10.2.0.4.0</version> </dependency> --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>2.6.6</version> </dependency> </dependencies></project>
1.2. 设置编译版本, tomat运行插件。在pom.xml中配置:
<build> <finalName>crm_ssh_parent</finalName> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> <showWarnings>true</showWarnings> </configuration> </plugin> </plugins> </pluginManagement> </build>
2.创建子模块。
2.1 创建crm_ssh_dao子模块 新建——>Maven Project.。
2.2 创建crm_ssh_service子模块 创建方式同 crm_ssh_dao 模块的创建。2.3 创建 crm_ssh_web子模块 注意创建crm_ssh_web模块时注意文件的格式。
注意:创建的crm_ssh_web 模块由于没有 web.xml配置文件,工程会报错,解决方案是将原CRM项目的文件web.xml 移入。同时,为整合工程,可同时将web资源导入。如图:
3. Java源文件和配置文件的整合 3.1 crm_ssh_dao整合 将类的Java实体类(domain中)、dao类(daoI和dao.impl中)、工具类(utils中)复制进crm_ssh_dao 的源文件目录中,将对应的domain类的配置文件xxx.hbm.xml放在资源文件夹对应的包结构下,如图:
由于我们使用注解的方式注入类实例,处于需要进行模块测试的考虑,在applicationContext-dao.xml中,配置好连接池、SessionFactory、以及注解使用说明,代码如下:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!--配置使用C3P0连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" > <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/crm" /> <property name="user" value="root" /> <property name="password" value="110011" /> </bean> <!--配置并创建HibernateTemplate底层使用的SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="hibernateProperties"> <!-- 配置配置文件参数 --> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> <property name="mappingResources"> <list> <value>cn/itcast/domain/Customer.hbm.xml</value> <value>cn/itcast/domain/Linkman.hbm.xml</value> <value>cn/itcast/domain/User.hbm.xml</value> <value>cn/itcast/domain/Dictory.hbm.xml</value> </list> </property> </bean> <!-- 自动扫描注解,查找工厂需要生成的对象和注入属性 --> <context:component-scan base-package="cn.itcast" /> </beans>
3.2 crm_ssh_dao整合 复制移入CRM的service 层代码。
基于service层需要处理业务,在applicationContext-service.xml 中,配置好事务配置。代码如下:
<!-- 导入dao中配置,便于测试时找得到sessionFactory --><import resource="classpath:applicationContext-dao.xml"/> <!-- 配置平台事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <!-- 使用注解控制事务 --> <tx:annotation-driven transaction-manager="transactionManager" />
3.3 crm_ssh_web整合 复制移入CRM的web层代码
applicationContext.xml是必备的配置文件,在该文件中引入各层的spring配置文件。
4. 子模块整合与调试运行 4.1.模块间整合 由于service层依赖dao层,web层依赖service层,所以到格模块的 pom.xml文件中加入依赖模块的jar包。基于测试的目的,由于依赖传递的原则,在dao、service的pom.xml中加入测试用到的jar包,范围scope为test。
4.2运行 4.2.1.使用maven内置运行插件 定位到父工程的 pom.xml 文件,右键单击,选择Run As,选择Maven Build,输入tomcat:run,单击运行即可。
4.2.2.使用tomcat运行工程 将crm_ssh_web 工程加入服务器service 中,作为常规的web项目运行。4.3 调试 测试发现在模块测试时会出现中文乱码,在父工程 pom.xml 中的<build>下的<plugins>中配置编译的语言,配置如下:
<!-- 解决测试时中文乱码问题, forkMode=once指测试时虚拟机每次都新开一个线程用于测试--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.19.1</version> <configuration> <forkMode>once</forkMode> <argLine>-Dfile.encoding=UTF-8</argLine> </configuration> </plugin>
加入后,发现一切顺利。5. 扩展 实际开发中,可以将 工具类,系统常量类,实体类,异常处理类都作为单独的子模块独立出去,分模块开发。
阅读全文
0 0
- Maven对ssh项目的拆分、聚合与调试
- Maven项目的拆分与聚合
- 通过maven对项目进行拆分、聚合
- 利用maven对项目进行拆分、聚合
- Maven工程的拆分与聚合
- 5.Maven项目的聚合与继承
- maven项目聚合的实例
- maven的继承与聚合
- maven的聚合与继承
- Maven的聚合与继承
- maven的聚合与继承
- Maven的聚合与继承
- Maven的聚合与继承
- maven构建项目中聚合与继承
- 一个多maven项目聚合的实例
- 一个多maven项目聚合的实例
- 一个多maven项目聚合的实例
- 一个多maven项目聚合的实例
- 奇偶校验
- Trapping Rain Water
- LeetCode 55. Jump Game
- iOS App上架流程---上线新版本app
- js实现某年某月某天距离现在有多少天,多少分,多少秒,动态显示!
- Maven对ssh项目的拆分、聚合与调试
- R语言使用朴素贝叶斯分类算法
- bzoj 1179: [Apio2009]Atm spfa+强连通分量
- java方法覆盖(当有static的方法时)
- bzoj3648 寝室管理 树分治
- android四大组件之Activity
- 【iOS】动作表ActionSheet和警告框AlterView
- 在vs2013上运行OpenGL编程指南第8版第一个程序
- Convolutional Neural Network For Sentence Classification(CNN情感分析yoom例子一)