一、Maven私服搭建
1.Maven常用命令:
(1)install:
本地安装, 包含编译,打包,安装到本地仓库 编译 - javac 打包 - jar, 将 java 代码打包为 jar 文件 安装到本地仓库 - 将打包的 jar 文件,保存到本地仓库目录中。
(2)clean:
清除已编译信息。 删除工程中的 target 目录。
(3)compile :
只编译,类似于javac 命令 。
(4)deploy:
部署。 常见于结合私服使用的命令。
相当于是 install+上传 jar 到私服。
包含编译,打包,安装到本地仓库,上传到私服仓库。
2.Maven私服:
- 什么是私服?
私服是一种特殊的远程仓库,它是架设在局域网的仓库服务,私服代理广域网上的远程 仓库,供局域网使用。 在企业开发中,私服的建设是有必要的。
- 私服的好处:
(1)节省资金、外网带宽:
利用私服代理外部仓库之后,对外的重复构件下载便得以简化,降低外网带宽压力。
(2)加速Maven构建:
不停地连接请求外部仓库是相当耗时的,但是 maven 的一些内部机制(如快照更新检 查)要求 Maven 在执行构建的时候不停地检查远程仓库数据。因此,当项目配置了很多外 部远程仓库的时候,构建速度会降低。使用私服解决这问题,因为 Maven 只需要检查局域 网内私服的数据时,构建速度便有明显提高。
(3) 部署第三方构件 :
当某个构件无法从任何一个远程仓库获取怎么办?比如 Oracle 的 JDBC 驱动由于版权 原因不能发布到公共仓库中。建立私服后,便可以将这些构件部署到这个内部仓库中,供内 部 Maven 项目使用。
(4)提高稳定性,增强控制:
对于远程仓库来说,当外网不可用时,Maven 构建有可能因为依赖没有下载而不可行, 搭建并应用私服后,即使没有外网,如果该构件之前被其它人下载过就会存在私服上,此时 再次依赖该构件就可以不用连接外网直接就可以从私服上下载到。同时私服软件(nexus)还 提供了额外的管理功能。
(5) 降低中央仓库的负荷 :
中央仓库是有限的。如果所有的 Maven 工程开发过程中,都通过中央仓库实现构件的 依赖和管理,那么中央仓库的负荷过高,也会严重影响工程构建的效率。如果使用私服,可 以分散中央仓库的负荷,只有在私服中没有需要依赖的构件时才会去连接中央仓库。
3.Maven私服搭建:
- 搭建环境:
环境:CentOS6.5、JDK7、Sonatype Nexus、Maven(Eclipse 或 MyEclipse);
- 搭建步骤:
(1)安装JDK:
JDK下载地址:官方网站;
将jdk解压到指定目录:
tar -zxvf jdk-7u80-linux-x64.tar.gz -C /usr/local ;
配置环境变量(配置完成后重启Linux永久生效):
export JAVA_HOME=/usr/local/java export
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
(2)下载Nexus资源包:
下载地址:官方网址;
将Nexus解压到指定目录:
tar -zxvf nexus-2.11.2-03-bundle.tar.gz -C /usr/local/nexus ;
Nexus 压缩包中包含两个子目录:
nexus-2.11.2-03 和 sonatype-work nexus-2.11.2-03 是具体的私服应用内容,sonatype-work 是 Nexus 私服下载的构件存放工 作目录。
(3)检查私服端口和工作目录:
在 nexus-2.11.2-03 目录中有子目录 conf,其中保存私服应用的配置信息。查看 nexus.properties 文件,确定私服访问端口和工作目录。
application-port=8081 # 私服访问端口
application-host=0.0.0.0
nexus-webapp=${bundleBasedir}/nexus # Nexus 私服 WEB 应用所在位置
nexus-webapp-context-path=/nexus # Nexus 私服 WEB 应用 contextPath
# Nexus section Nexus 私服配置信息
nexus-work=${bundleBasedir}/../sonatype-work/nexus
# 私服工作目录,即构件保存目录
runtime=${bundleBasedir}/nexus/WEB-INF # 私服 WEB 应用运行目录
(4)修改Nexus运行用户:
Nexus 私服在启动后,私服应用需要访问 Linux 的文件系统,所以需要有足够的权限。 Nexus的启动脚本文件中,可以指定私服应用的访问用户,此信息在nexus-2.11.2-03/bin/nexus 脚本文件中定义。
# NOTE - This will set the user which is used to run the Wrapper as well as
# the JVM and is not useful in situations where a privileged resource or
# port needs to be allocated prior to the user being changed.
#RUN_AS_USER= #原内容
RUN_AS_USER=root #修改后的内容,代表 Nexus 私服使用 root 用户权限。
(5)修改防火墙,开发Nexus私服端口访问:
修改防火墙配置文件,开放 Nexus 私服的访问端口 8081。
增加:“-A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT ”;
重启防火墙:“service iptables restart ”;
或者直接关闭防火墙:
(6)启动并测试访问:
启动私服:“/usr/local/nexus/nexus-2.11.2-03/bin/nexus start ”;
检查私服运行状态:"/usr/local/nexus/nexus-2.11.2-03/bin/nexus status ";
也可以使用浏览器访问私服WEB应用,访问地址为:“http://ip:8081/nexus (ip 为 Nexus 所在系统的访问 IP)”
(7)登录:
Nexus 默认提供管理用户,用户名为 admin,密码为 admin123。
-
仓库管理:
(1)检查仓库:
(2)仓库的类型:
(3)仓库类型的介绍:
group:仓库组,Nexus 通过仓库组来统一管理多个仓库,这样访问仓库组就相当于访问仓库组 管理的多个仓库。
hosted:宿主仓库,主要用于发布内部项目构件或第三方的项目构件(如购买商业的构件)以及 无法从公共仓库获取的构件(如 oracle 的 JDBC 驱动)。
releases:发布内部的 releases 模块的仓库,所有非快照版本工程都发布到此仓库中。
snapshots:发布内部的快照模块的仓库,所有工程版本以 SNAPSHOT 结尾的都发布到此仓库中。
3rd party
第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去。
proxy:代理仓库,代理公共的远程仓库。
virtual:虚拟仓库,用于适配 Maven 1。
(4)代理仓库配置:
设置 proxy 代理仓库(Apache Snapshots/Central/Codehaus Snapshots)准许远程下载。
- 私服的使用:
(1)配置setting.xml文件(添加下面信息):
sxt
false
1.8
nexus
http://192.168.226.128:8081/nexus/content/groups/public/
true
true
nexus
http://192.168.226.128:8081/nexus/content/groups/public/
true
true
(2)pom.xml文件配置:
nexus-releases
Nexus Release Repository
http://192.168.226.128:8081/nexus/content/repositories/releases/
nexus-snapshots
Nexus Snapshot Repository
http://192.168.226.128:8081/nexus/content/repositories/snapshots/
org.apache.maven.plugins
maven-source-plugin
2.1.2
attach-sources
jar
- 发布本地工程到私服:
在 Maven 工程的 maven build 中,输入命令 deploy,即可实现发布工程信息到私服。 如果同版本工程可能多次发布,需要修改 Nexus 配置。
-
发布第三方插件到私服:
二、Maven实战:
1.需求分析:
基于 SSM 框架的 CRUD 案例;
- 使用的技术:
框架:SpringMVC+Spring+Mybatis
数据库:MySQL
项目构建工具:Maven
Maven先打包Parent在打包聚合项目;再启动聚合项目。
2.项目架构设计:
-
传统项目设计方式:
-
Maven 项目设计方式:
3.创建工程:
3.1创建Parent工程:
- 修改POM文件:
4.0.0
com.zlw
11parent
0.0.1-SNAPSHOT
pom
4.12
4.1.3.RELEASE
3.2.8
1.2.2
5.1.32
1.6.4
1.0.9
1.2
2.5
2.0
2.2
junit
junit
${junit.version}
test
org.slf4j
slf4j-log4j12
${slf4j.version}
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
${mybatis.spring.version}
mysql
mysql-connector-java
${mysql.version}
com.alibaba
druid
${druid.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-aspects
${spring.version}
commons-fileupload
commons-fileupload
1.3
jstl
jstl
${jstl.version}
javax.servlet
servlet-api
${servlet-api.version}
provided
javax.servlet
jsp-api
${jsp-api.version}
provided
org.apache.tomcat.maven
tomcat7-maven-plugin
${tomcat.version}
org.apache.maven.plugins
maven-compiler-plugin
3.2
1.8
UTF-8
3.2创建聚合工程Manager:
3.3在聚合工程的基础上创建:
-
创建manager-pojo:
-
创建manager-mapper:
- 修改 manager-mapper 的 pom 文件:
4.0.0
com.zlw
12manager
0.0.1-SNAPSHOT
manager-mapper
com.zlw
manager-pojo
0.0.1-SNAPSHOT
org.mybatis
mybatis
org.mybatis
mybatis-spring
commons-fileupload
commons-fileupload
mysql
mysql-connector-java
com.alibaba
druid
src/main/java
**/*.xml
-
创建 manager-service:
- 修改 manager-service 的 pom 文件:
4.0.0
com.zlw
12manager
0.0.1-SNAPSHOT
manager-service
com.zlw
manager-mapper
0.0.1-SNAPSHOT
org.springframework
spring-context
org.springframework
spring-beans
org.springframework
spring-webmvc
org.springframework
spring-jdbc
org.springframework
spring-aspects
commons-fileupload
commons-fileupload
-
创建 manager-controller :
- 修改 manager-controller 的 pom 文件:
4.0.0
com.zlw
12manager
0.0.1-SNAPSHOT
manager-controller
war
com.zlw
manager-service
0.0.1-SNAPSHOT
jstl
jstl
javax.servlet
servlet-api
provided
javax.servlet
jsp-api
provided
org.apache.tomcat.maven
tomcat7-maven-plugin
8080
/
4.框架整合:
4.1db.properties:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm
jdbc.username=root
jdbc.password=root
4.2 Mybatis 配置文件:
4.3applicationContext-mybatis.xml :
classpath:mybatis/SqlMapperClient.xml
4.4 applicationContext-service.xml :
4.5 applicationContext-trans.xml :
4.6springmvc.xml :
4.7web.xml:
contextConfigLocation
classpath:spring/applicationContext-*.xml
org.springframework.web.context.ContextLoaderListener
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring/springmvc.xml
1
springmvc
/
encoding
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
encoding
/*
4.8配置 tomcat 与资源拷贝插件:
org.apache.tomcat.maven
tomcat7-maven-plugin
8080
/
4.9 启动 tomcat 测试框架整合:
5.添加用户:
5.1Controller:
@Controller
public class PageController {
@RequestMapping("/{page}")
public String showPage(@PathVariable String page) {
return page;
}
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/addUser")
public String addUser(User user) {
userService.addUser(user);
return "redirect:/user/findUser";
}
5.2JSP:
添加成功!
5.3 Manager-service:
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public void addUser(User user) {
userMapper.insertUser(user);
}
}
5.4 Manager-mapper:
public interface UserMapper {
/**
* 添加操作
* @param user
*/
void insertUser(User user);
}
insert into users(username,userage) values(#{username},#{userage})
5.5 Manager-pojo :
private int userid;
private String username;
private int userage;
6.查询用户:
6.1 Manager-controller :
@RequestMapping("findUser")
public String findUser(Model model) {
List list = userService.findAllUser();
model.addAttribute("list",list);
return "showUser";
}
6.2JSP:
ID
用户名
用户年龄
操作
${user.userid }
${user.username }
${user.userage }
删除
修改
返回
6.3 Manager-service:
@Override
public List findAllUser() {
return userMapper.findAllUser();
}
6.4 Manager-mapper:
/**
* 查询用户
* @return
*/
List findAllUser();
7.修改和删除:
7.1Controller:
@RequestMapping("delete")
public String deleteUser(int userid) {
userService.deleteUser(userid);
return "redirect:/user/findUser";
}
@RequestMapping("/update")
public String updateUser(User user) {
userService.updateUser(user);
return"redirect:/user/findUser";
}
@RequestMapping("findById")
public String findById(int userid,HttpServletRequest request) {
User user = userService.findById(userid);
request.setAttribute("user", user);
return "update";
- JSP:
7.2Service:
@Override
public void updateUser(User user) {
userMapper.updateUser(user);
}
@Override
public void deleteUser(int userid) {
userMapper.deleteUser(userid);
}
@Override
public User findById(int userid) {
return userMapper.findById(userid);
}
7.3mapper:
/**
* 删除用户
* @param userid
*/
void deleteUser(int userid);
/**
* 修改用户
* @param user
*/
void updateUser(User user);
User findById(int userid);
delete from users where userid=#{0}
update users set username=#{username},userage=#{userage} where userid=#{userid}
-
实现效果: