8 传递依赖冲突解决
8.1 排除依赖
pom.xml文件中添加exclusions
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.3.24</version> <exclusions> <!-- 将struts-spring-plugin.jar中的spring-beans传递依赖排除 --> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </exclusion> </exclusions> </dependency>
8.2 版本锁定
<!-- 版本锁定: 指定项目中依赖的版本 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.0.2.RELEASE</version> </dependency> </dependencies> </dependencyManagement>
9 通过maven对项目进行拆分, 聚合
对现有maven ssm项目进行拆分, 拆分思路: 将dao层的代码以及配置文件全部提取到一个表现上独立的工程中. 同样, service, controller拆分.
ssm-parent: 父工程
ssm-dao: 子模块
ssm-service
ssm_web
拆分完成, 对拆分后的项目进行聚合, 父工程
9.1 创建父工程
Ctrl + N, 创建Maven Project 勾选 create a simple project packaging选择pom

创建好父工程目录结构, 只有pom.xml, 父工程不进行编码
1. 项目需要的依赖信息, 都可以在父工程中定义, 子模块继承
2. 将各个子模块聚合到一起
9.2 将创建的父工程发布到本地仓库
项目上右键 Run as 5 Maven install
将来service, dao 发布到本地仓库. 如果父工程不再仓库中, 则service, dao会报错
9.3 创建子模块 ssm-dao
Ctrl + N new Maven Module 勾选create a simple project packaging 选择jar
ssm-dao负责数据访问层: 包含dao相关代码 & 配置文件

9.4 创建子模块 ssm-service
Ctrl + N new Maven Module 勾选create a simple project packaging 选择jar
在service工程pom.xml文件添加ssm-dao的依赖
9.5 创建子模块 ssm-web
Ctrl + N new Maven Module 勾选create a simple project packaging 选择war
pom.xml文件添加ssm-service的依赖
9.6 单元测试
9.6.1 dao层
要测试的mapper接口上右键新建JUnit Test Case 下一步: source folder选择src/test/java 下一步, 勾选要测试的方法
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:spring/applicationContext-*.xml") public class ItemsMapperCustomTest { @Autowired private ItemsMapperCustom itemsMapperCustom; @Test public void testFindItemsList() throws Exception { List<ItemsCustom> itemsList = itemsMapperCustom.findItemsList(null); for (ItemsCustom itemsCustom : itemsList) { System.out.println(itemsCustom); } } }
9.6.2 service层
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath*:spring/applicationContext-*.xml") public class ItemsServiceTest { @Autowired private ItemsService itemsService; @Test public void testFindItemsList() throws Exception { List<ItemsCustom> itemsList = itemsService.findItemsList(null); for (ItemsCustom itemsCustom : itemsList) { System.out.println(itemsCustom.getName()); } }
注意 : 批量加载Spring的配置 :
classpath*:spring/applicationContext-*.xml
既要加载本项目的配置文件, 还要加载jar包中的配置文件
9.7 运行方式
方式1 : 运行父工程
父工程将各个子模块聚合在一起. 将ssm-web 打成war包, 发布到tomcat
父工程上右键Run as maven build…tomcat:run
需要注意:
Spring V4.1.0+的版本在不支持Servlet3.0的应用服务器上跑时会报以下错误:
NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I
比如说:tomcat 7以下的版本、jboss 4.2.3以下的版本
方式2: 部署到tomcat8, 直接运行ssm_web
10 私服应用
10.1 私服安装
1 下载安装包
nexus-…-bundle.zip
2 解压到本地磁盘
3 使用管理员权限打开dos, 在dos下执行命令安装私服
进到nexus的解压路径的bin目录下, dos窗口: 输入nexus install
4 启动服务
nexus start 或者 在windows服务中, 手动启动nexus服务
如果是nexus3.xx , 则不需要安装, 进到bin目录后, dos窗口, 输入nexus.exe /run, 回车即可运行
查看nexus的配置文件conf/nexus.properties
5 访问URL:
登录: admin/admin123
10.2 私服仓库类型

hosted : 宿主仓库
存放本公司开发的jar包(正式版本, 测试版本, 第三方)
proxy : 代理仓库
代理中央仓库, Apache下测试版本的jar包
group : 组仓库
将来连接组仓库. 包含hosted宿主仓库, proxy代理仓库
10.3 上传jar包到私服
1. 在maven目录下conf/setting.xml认证: 配置用户名密码
<servers>标签内添加
<server> <id>maven-releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>maven-snapshots</id> <username>admin</username> <password>admin123</password> </server>
2 在将要上传的项目的pom.xml中配置jar包上传路径
<distributionManagement> <repository> <id>maven-releases</id> <url>http://localhost:8081/repository/maven-releases/</url> </repository> <snapshotRepository> <id>maven-snapshots</id> <url>http://localhost:8081/repository/maven-snapshots/</url> </snapshotRepository> </distributionManagement>
3 执行命令发布项目到私服(上传)
ssm_dao项目右键run as maven build… 输入deploy, 点击run
10.4 下载jar包到本地仓库
1 在maven目录下conf/settings.xml中配置模板
在<profiles> 内添加
<profile> <!-- profile的id --> <id>dev</id> <repositories> <repository> <!-- 仓库的id, repositories可以配置多个仓库, 保证id不重复 --> <id>nexus</id> <!-- 仓库的地址, 即nexus仓库组的地址 --> <url>http://localhost:8081/repository/maven-public/</url> <!-- 是否下载releases构件 --> <releases> <enabled>true</enabled> </releases> </repository> </repositories> <pluginRepositories> <!-- 插件仓库, maven的运行依赖插件, 也需要从私服下载插件 --> <pluginRepository> <!-- 插件仓库的id不允许重复, 如果重复后边配置会覆盖前边 --> <id>public</id> <name>Public Repositories</name> <url>http://localhost:8081/repository/maven-public/</url> </pluginRepository> </pluginRepositories> </profile>
2 激活模板
<settings>标签内添加
<activeProfiles> <activeProfile>dev</activeProfile> </activeProfiles>
11 把第三方jar包放入本地仓库或私服
11.1 导入本地库
mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dfile= fastjson-1.1.37.jar -Dpackaging=jar
11.2 导入私服
需要在maven软件的核心配置文件settings.xml中配置第三方仓库的server信息
<server> <id>thirdparty</id> <username>admin</username> <password>admin123</password> </server>
执行以下命令
mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=fastjson-1.1.37.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
11.3 参数说明
DgroupId和DartifactId构成了该jar包在pom.xml的坐标,项目就是依靠这两个属性定位。自己起名字也行。
Dfile表示需要上传的jar包的绝对路径。
Durl私服上仓库的位置,打开nexus——>repositories菜单,可以看到该路径。
DrepositoryId服务器的表示id,在nexus的configuration可以看到。
Dversion表示版本信息,
关于jar包准确的版本
包的名字上一般会带版本号,如果没有那可以解压该包,会发现一个叫MANIFEST.MF的文件,这个文件就有描述该包的版本信息。
比如Specification-Version: 2.2可以知道该包的版本了。
上传成功后,在nexus界面点击3rd party仓库可以看到这包。
Maven详解—上链接:https://www.toutiao.com/i6740573998544847373/