Maven
Maven概念
Maven作为一个构建工具,不仅能帮我们自动化构建,还能够抽象构建过程,提供构建任务实现;它跨平台,对外提供了一致的操作接口,这一切足以使它成为优秀的、流行的构建工具。
Maven不仅是构建工具,还是一个依赖管理工具和项目管理工具,它提供了中央仓库,能帮我自动下载构件。
Maven启动的几种方式
1.maven-tomcat插件方式 现在用的比较少
在配置文件中加入如下
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 配置项目的访问路径-->
<path>/</path>
<port>9090</port>
<!-- 配置字符集非必填的项目-->
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
然后在我们maven的projects中点开tomcat下的run就可以了
2.tomcat直接启动maven项目
3.maven-tomcat启动方式
创建MAVEN项目
- 默认创建
- 快速创建,选择quickstart,默认脚架
添加web项目
project structure 》》Modules》》添加web项目,修改路径到main》》create》》apply
pom配置文件:
配置文件:工程坐标
<?xml version="1.0" encoding="UTF-8"?>
<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>com.shangma.cn</groupId>
<!--项目名-->
<artifactId>webmaven2</artifactId>
<!--版本号-->
release表示正式版
SNAPSHOT表示测试版
<version>1.0-SNAPSHOT</version>
</project>
release表示正式版
SNAPSHOT表示测试版
修改maven的JDK版本
1.局部修改
这个修改的JDK版本修改后只在本项目中生效,属于局部配置
在maven的pom.xml加入如下标签:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
2.全局修改
找到Maven文件夹下的settings配置文件,修改里面的JDK版本参数,如果没有修改过直接添加如下的内容就可以了,因为我们的Maven默认的JDK版本就是1.5的。
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.complierVersion>
</properties>
</profile>
修改打包方式
maven一共有三种打包方式,jar,war跟pom,不修改配置文件的话默认打包方式就是jar包的方式来进行打包
<?xml version="1.0" encoding="UTF-8"?>
<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>com.shangma.cn</groupId>
<!--项目名-->
<artifactId>webmaven2</artifactId>
<!--版本号-->
<version>1.0-SNAPSHOT</version>
<!--修改打包方式,不写默认为jar-->
<packaging>war</packaging>
</project>
聚合工程
聚合工程的概念
聚合就是有很多节点组合在一起,而我们项目的聚合工程就是将我们的工程分成很多节点,每个节点有一定的依赖性,单个节点不能独立的存在。比如我们一个项目分很多模块,将这些模块整合到一起才是一个完整的项目。但是单个模块是不能独立出来成为一个完整的项目的。
但是聚合工程的使用说白了就是跨项目调用。
跨项目调用
这里写一个项目调用另一个源生项目的例子,准备好你一个可以返回数据的源生项目,另一个项目以URLConnection去访问你的这个项目得到数据,用byte字节流的方式存储数据并输出在自己的控制台中。
以下是访问的项目中的main方法:
public static void main(String[] args) throws Exception {
//设置一个超链接
URL url = new URL("http://localhost:8080/selectAll?currentPage=1&pageSize=5");
//访问这个超链接
URLConnection connection = url.openConnection();
//创建流对象,存储数据到流中
InputStream inputStream = connection.getInputStream();
// 读取流
byte[] buff =new byte[1024];
int length = 0;
while ((length=inputStream.read(buff))!=-1) {
System.out.println(new String(buff,0,length));
System.out.println(Arrays.toString(buff));
}
}
以下是被访问项目的例子这里我就先他的实现类不写其他的了可以返回数据:
@Service
@Transactional
public class GameUserServiceImpl implements IGameUserService {
@Autowired
private TGameuserMapper getGameAddress;
@Autowired
private BaseGameMapper baseGameMapper;
@Override
public PageBean<TGameuser> selectAll(Integer currentPage, Integer pageSize) {
// 分页插件jar包调用方法 先写死
PageHelper.startPage(currentPage, pageSize);
//存储。
List<TGameuser> gameUserBeans = getGameAddress.selectByExample(null);
//遍历 存值
PageBean<TGameuser> pageBean = null;
for (TGameuser gameUserBean : gameUserBeans) {
NPC出生地自定义语句查询 根据basetype来查询
int address = gameUserBean.getGameAddress();
BaseGameExample baseGameExample = new BaseGameExample();
BaseGameExample.Criteria criteria = baseGameExample.createCriteria();
criteria.andBaseTypeEqualTo(address);
List<BaseGame> baseGames = baseGameMapper.selectByExample(baseGameExample);
String addressName = baseGames.get(0).getBaseContent();
//
职业
Integer job = gameUserBean.getGameJob();
BaseGameExample baseGameExample1 = new BaseGameExample();
BaseGameExample.Criteria criteria1 = baseGameExample1.createCriteria();
criteria1.andBaseTypeEqualTo(job);
List<BaseGame> baseGames1 = baseGameMapper.selectByExample(baseGameExample1);
String jobName = baseGames1.get(0).getBaseContent();
//
种族
Integer race = gameUserBean.getGameRace();
BaseGameExample baseGameExample2 = new BaseGameExample();
BaseGameExample.Criteria criteria2 = baseGameExample2.createCriteria();
criteria2.andBaseTypeEqualTo(race);
List<BaseGame> baseGames2 = baseGameMapper.selectByExample(baseGameExample2);
String raceName = baseGames2.get(0).getBaseContent();
// 阵营
Integer camp = gameUserBean.getGameCamp();
BaseGameExample baseGameExample3 = new BaseGameExample();
BaseGameExample.Criteria criteria3 = baseGameExample3.createCriteria();
criteria3.andBaseTypeEqualTo(camp);
List<BaseGame> baseGames3 = baseGameMapper.selectByExample(baseGameExample3);
String campName = baseGames3.get(0).getBaseContent();
遍历所有的中文给到GameuserBean中
gameUserBean.setGameRaceName(raceName);
gameUserBean.setGameJobName(jobName);
gameUserBean.setGameCampName(campName);
gameUserBean.setGameAddressName(addressName);
//
// //得到分页jar包下的子类方法获取总数
PageInfo<TGameuser> pageInfo = new PageInfo<>(gameUserBeans);
long total = pageInfo.getTotal();
pageBean = new PageBean<TGameuser>();
pageBean.setData(gameUserBeans);
pageBean.setTotal(total);
//
}
return pageBean;
}
知识拓展
错误总结
maven插件运行出错,类加载异常
当我们项目启动的时候后在web页面出现
:java.lang.ClassCastException: com.shangma.cn.servlet cannot be cast to javax.servlet.Servlet
的错误的时候这个是代表我们是以tomcat插件的方式来启动项目的,说明我们先加载了其他的类但是没有在其api坐标中加入scope的标签< scope >provided< /scope>:如下
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
问题是出在这里的,加了这个字段就可以解决了
<scope>provided</scope>
</dependency>
</dependencies>
<!--maven以插件的方式来启动项目-->
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 配置项目的访问路径-->
<path>/</path>
<port>9090</port>
<!-- 配置字符集非必填的项目-->
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
绑定方法异常,找不到mapper中的方法
当我们使用maven启动项目的时候,有一个专门存放配置文件的文件夹,我们逆向工程生成的配置文件如果没有放到我们的配置文件夹中并且出现:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 这个错误的时候就是我们配置文件没有读到,扫描到。可以在target目录中验证一下有没有这个配置文件:
如果没有,就说明我们的项目根本没有读到我们mapper的配置文件,这个时候我们可能要将我们java根目录下的配置文件,放到我们maven项目专门存放配置文件的地方,并且文件路径要一致。如图一,错误前,mapper配置文件放置在java根目录下的mapper文件夹中:图一:
放置在maven项目中专门存放配置文件的文件夹中如图二:
重新启动项目。问题解决。
跨项目调用用的集中方法api
http请求跨项目调用:
1.httpurl connerction
2.hhttpclint(9版本以上不需要导入jar包)
3.OKhttp(目前最火的一种方法)
4.Xutils
5.Retrofit
而使用我使用的是spring java:rest、 Temlate。 这个是Spring自带的,而Sping的无缝做的很好,很好的融合了其他的框架,可以整合上面的所有。
web.xml 配置文件删除能否启动
删除掉我web.xml文件后我们maven项目还是可以访问我们的servlet,这边的问题是,当我们删除掉web.xml后我们还可以访问我们的网页吗?
答案是可以的,因为我们的servlet中有一个启动器,这是一个类可以启动servlet,原理不需要懂。
maven可以解决的问题
maven是一个依赖管理的工具,一些依赖问题可以得到很好的解决,比如:
1.jar包不兼容问题
2.更好的管理项目
Maven默认支持
jdk支持
maven默认支持的jdk是1.5的版本的