Maven知识学习要点二
一、知识概述
Maven的好处:
1、 不再拷贝jar包。项目不需要存放jar包。导致项目源代码小
2、 使用maven开发的工程,如果环境统一导入别的maven的项目不会报错
3、 代码耦合度进一步降低.
4、 方便项目进行升级
5、 节省人力成本
二、知识简介
Maven中的传递依赖: A---依赖---》B ---依赖---》C C就是A的传递依赖
调解原则:① 第一声明者优先原则 谁先定义就用谁的传递依赖。
② 路径近者优先原则 直接依赖级别高于传递依赖。
1.1 排除依赖
1.2 版本锁定(推荐使用)
2 通过maven整合SSH框架(重点)
2.1 搭建struts2环境
1、 创建strut2配置文件:struts.xml
2、 在web.xml中配置strut2的核心过滤器
1 <!-- 配置Struts核心过滤器 -->
2 <filter>
3 <filter-name>struts</filter-name>
4 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
5 </filter>
6 <filter-mapping>
7 <filter-name>struts</filter-name>
8 <url-pattern>/*</url-pattern>
9 </filter-mapping>
2.2 搭建spring环境
1、 创建spring配置文件applicationContext.xml
2、 在web.xml中配置监听器:ContextLoaderListener
1 <!-- 配置监听器:默认加载WEB-INF/applicationContext.xml -->
2 <listener>
3 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
4 </listener>
5
6 <!-- 通过上下文参数指定spring配置文件路径 -->
7 <context-param>
8 <param-name>contextConfigLocation</param-name>
9 <param-value>classpath:applicationContext.xml</param-value>
10 </context-param>
2.3 搭建Hibernate环境
1、 创建Hibernate核心配置文件
1 <?xml version='1.0' encoding='utf-8'?>
2 <!DOCTYPE hibernate-configuration PUBLIC
3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
4 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
5
6 <hibernate-configuration>
7 <!-- 会话工厂 -->
8 <session-factory>
9 <!-- 数据库方言,根据数据库选择 -->
10 <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
11
12 <!--为了方便调试是否在运行hibernate时在日志中输出sql语句 -->
13 <property name="hibernate.show_sql">true</property>
14 <!-- 是否对日志中输出的sql语句进行格式化 -->
15 <property name="hibernate.format_sql">true</property>
16
17 <property name="hibernate.hbm2ddl.auto">update</property>
18
19
20 </session-factory>
21 </hibernate-configuration>
2.4 Struts2跟spring整合
整合关键点:action对象创建,交给spring创建
1、 创建action类
2、 将action对象配置到spring配置文件中
3、 在struts.xml中在action节点中class属性配置为spring工厂中action对象bean的id
2.5 Spring跟Hibernate框架整合
整合关键点:1、数据源dataSource交给spring 2、SessionFactory对象创建交给spring创建 3、事务管理
1、 配置dataSource
1 <!-- 加载属性文件 -->
2 <context:property-placeholder location="classpath:db.properties"/>
3
4 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
5 <property name="driverClass" value="${jdbc.driverClass}"></property>
6 <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
7 <property name="user" value="${jdbc.user}"></property>
8 <property name="password" value="${jdbc.password}"></property>
9 </bean>
2、 配置SessionFactory对象
1 <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
2 <property name="dataSource" ref="dataSource"></property>
3 <property name="configLocations" value="classpath:applicationContext.xml"></property>
4 </bean>
3、 事务管理
a) 配置事务管理器: PlatFormTransactionManager:接口
i. Jdbc:DataSourceTransactionManager
ii. Hibernate:HibernateTransactionManager
1 <!-- 配置事务管理器 -->
2 <bean id="transactionManager"
3 class="org.springframework.orm.hibernate5.HibernateTransactionManager">
4 <property name="sessionFactory" ref="sessionFactory"></property>
5 </bean>
6
7 <!-- xml方式管理事务 -->
8 <!-- 配置通知:具体增强逻辑 -->
9 <tx:advice id="txAdvice">
10 <tx:attributes>
11 <!-- 匹配业务类中方法名称 -->
12 <tx:method name="save*" />
13 <tx:method name="update*" />
14 <tx:method name="delete*" />
15 <tx:method name="find*" read-only="true"/>
16 <tx:method name="*"/>
17 </tx:attributes>
18 </tx:advice>
19
20 <!-- 配置aop -->
21 <aop:config>
22 <!-- 配置切点:具体哪些方法要增强(真正被增强的方法)-->
23 <aop:pointcut expression="execution(* cn.itcast.service.*.*(..))" id="cut"/>
24 <!-- 配置切面:将增强逻辑作用到切点 (通知+切入点) -->
25 <aop:advisor advice-ref="txAdvice" pointcut-ref="cut"/>
26 </aop:config>
2.6 需求
在地址栏输入action请求:http://locahost:8080/project/customerAction_findOne.action?custId=1,action-service-dao。完成客户查询
2.7 具体实现
1、 创建客户实体类、映射文件、将映射文件引入Hibernate核心配置文件中
2、 创建action、service、dao。完成注入
a) 在类中添加属性生成set方法
b) 在spring配置文件中完成注入
3、 在struts.xml中配置action,配置结果视图
总结:
1、 页面提交参数,在服务端action接收参数 参
2、 调用业务层方法—》dao的方法—》DB 调
3、 将返回的数据存值栈 存
4、 配置结果视图,跳转页面 转
1 通过maven对项目进行拆分、聚合(重点)
对现在已有maven ssh项目进行拆分,拆分思路:将dao层的代码已经配置文件全体提取出来到一个表现上独立的工程中。同样service、action拆分。
ssh-parent: 父工程
ssh-dao:(子模块)
ssh-service
ssh-web
拆分完成对拆分后的项目进行聚合,提出概念父工程
1.1 创建父工程
创建好父工程目录结构:只有pom.xml,可以推断父工程不进行编码。
1、 项目需要的依赖的信息,在父工程中定义,子模块继承过程
2、 将各个子模块聚合到一起
1.2 将创建父工程发布到本地仓库
将来service、dao工程发布到本地仓库。发布的service工程会报错。
如果忘记此步骤,将父工程发布到本地仓库。
1.3 创建子模块ssh-dao
Ssh-dao负责数据访问层:包含dao相关代码&配置文件
1.3.1 将spring的配置文件拆分
:项目基础的信息
:dao层bean对象
1.4 创建子模块ssh-service
将ssh-dao工程打包到本地仓库;
在service工程pom.xml文件添加ssh-dao的依赖
1.4.1 单元测试
1、 批量加载spring配置文件
a) classpath:spring/applicationContext-*.xml
b) classpath*:spring/applicationContext-*.xml:既要加载本项目中配置文件,还要加载jar包中配置文件
2、 传递依赖范围(了解)
A:ssh-service 工程
B:ssh-dao工程
C:junit单元测试
总结:当项目中需要的某一个依赖没有传递过来。在自己工程中添加对应依赖就可以。
1.5 创建子模块ssh-web:war
在ssh-web项目中添加service工程依赖。
Web.xml
1.6 运行方式
Maven方式:
方式1:运行父工程。父工程将各个子模块聚合到一起。将ssh-web打war包发布到tomcat
方式2:直接运行web工程
其他方式:部署到tomcat
2 私服应用(了解)
1、 下载安装包
2、解压到本地磁盘
3、使用管理员权限打开dos,在dos下执行命令安装私服
4、启动服务
5、 找到私服的访问url:
http://localhost:8081/nexus/#welcome
登陆:admin/admin123
3 私服仓库类型
Hosted:宿主仓库
存放本公司开发的jar包(正式版本、测试版本、第三方:存在版权问题--Oracle)
Proxy:代理仓库
代理中央仓库、Apache下测试版本的jar包
Group:组仓库
将来连接组仓库。包含Hosted:宿主仓库,Proxy:代理仓库
3.1 上传jar包到私服上(应用)
3.1.1、 在maven目录下conf/settings.xml.认证:配置用户名密码
1 <server> 2 <id>releases</id> 3 <username>admin</username> 4 <password>admin123</password> 5 </server> 6 <server> 7 <id>snapshots</id> 8 <username>admin</username> 9 <password>admin123</password> 10 </server>
3.1.2 在将要上传的项目的pom.xml中配置jar包上传路径url
1 <distributionManagement> 2 <repository> 3 <id>releases</id> 4 <url>http://localhost:8081/nexus/content/repositories/releases/</url> 5 </repository> 6 <snapshotRepository> 7 <id>snapshots</id> 8 <url>http://localhost:8081/nexus/content/repositories/snapshots/</url> 9 </snapshotRepository> 10 </distributionManagement>
3.1.3、 执行命令发布项目到私服(上传) deploy
3.2 下载jar包到本地仓库(应用)
3.2.1、 在maven目录下conf/settings.xml。配置模板
1 <profile> 2 <!--profile的id--> 3 <id>dev</id> 4 <repositories> 5 <repository> 6 <!--仓库id,repositories可以配置多个仓库,保证id不重复--> 7 <id>nexus</id> 8 <!--仓库地址,即nexus仓库组的地址--> 9 <url>http://localhost:8081/nexus/content/groups/public/</url> 10 <!--是否下载releases构件--> 11 <releases> 12 <enabled>true</enabled> 13 </releases> 14 <!--是否下载snapshots构件--> 15 <snapshots> 16 <enabled>true</enabled> 17 </snapshots> 18 </repository> 19 </repositories> 20 <pluginRepositories> 21 <!-- 插件仓库,maven的运行依赖插件,也需要从私服下载插件 --> 22 <pluginRepository> 23 <!-- 插件仓库的id不允许重复,如果重复后边配置会覆盖前边 --> 24 <id>public</id> 25 <name>Public Repositories</name> 26 <url>http://localhost:8081/nexus/content/groups/public/</url> 27 </pluginRepository> 28 </pluginRepositories> 29 </profile>
3.2.2、 激活模板
1 <activeProfiles> 2 <activeProfile>dev</activeProfile> 3 </activeProfiles>
至此,Maven知识了解完了,可以用Maven来管理SSH、SSM等框架的项目了。