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项目

  1. 默认创建
  2. 快速创建,选择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的版本的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值