Maven工具


Maven工具

前提是已经在自己本地有一个maven仓库,个人使用的是3.3.9版本的maven。

准备构建一个maven项目来进行spring的复习,发现之前学习的maven搭建项目的步骤突然忘记了,最近一直在做一些算法的题目和论文的知识,有点疏忽工具的使用了,用此来记录maven工具并创建maven项目做简单的复习。

maven是apache下面的一个开源项目,只用来管理java项目以及项目依赖的jar包。

好处:maven将jar包放在本地的仓库,通过坐标(公司-项目-版本号)进行获取,对jar包依赖管理

仓库分为本地仓库共个人使用,公司的仓库一般为远程仓库又称私服,网络中的仓库为中央仓库。

maven的标准目录结构:

src/main/java 核心代码部分

src/main/resources 配置文件

src/test/java 测试文件

src/test/resources 测试配置文件

如果是web项目:

src/main/webapp web相关的文件,静态资源等

maven的命令:

mvn clean 将编译的项目进行清理,每个人的环境都是不同的因此对项目在本地需要clean

mvn compile 将项目编译

mvn test 测试项目

mvn package 项目打包

mvn install 项目发布到本地仓库

mvn deploy 发布

mvn tomcat:run 启动tomcat

maven的声明周期:三种声明周期(clean周期、default周期、site周期)

默认的周期为(compile、test、package、install、deploy),可以一键构建

maven的依赖包含的信息有:公司组织名称、项目名、版本号

idea配置maven:

点击configure选择settings

image-20200514174706024

左上角搜索框中填入maven,设置自己的maven位置与xml

image-20200514175156031

为了防止在不能上网的情况下maven项目有问题,配置一个参数:

-DarchetypeCatalog=internal

image-20200514175543835

创建一个maven的java工程:idea提供许多的maven骨架,选择java的骨架点击next

image-20200514175800914

填写项目的坐标信息、并且配置路径:

image-20200514180043974

image-20200514180208078

创建项目成功并运行测试:

image-20200514180734962

当前的文件目录结构缺少资源目录结构,自定义一个文件夹并且设置为资源文件夹,选中文件夹右键进行设置。

image-20200514181020322

如果不适用骨架创建出来的maven只是在test路径下没有resources文件夹,并且没有默认的测试类文件,但是在main目录下有resources文件夹。推荐在创建maven的时候不要使用上面的选择骨架创建。

不适用骨架创建的maven项目:

image-20200514181748329

使用maven创建一个web项目:需要使用骨架

image-20200514181932854

其余操作与上面类似,web的目录结构是:

image-20200514182132452

web项目需要有tomcat服务器,配置如果有如下问题:

No artifacts marked for deployment

image-20200514183015819

参考:以上问题解决方案

问题二:创建Servlet时没有Servlet选项:

image-20200514184027669

一次点击并选中:

image-20200514184146448

最后就可以创建Servlet了。

创建Servlet出现的问题:在创建好Servlet后由于没有jar的包汇报错误,需要在pom.xml中引入依赖:

 <dependencies>
     <!--这是单元测试的包,需要配置其坐标以及scope作用范围,只在test的时候生效-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
     <!--这是servlet的包,用于创建servlet是java中文件引入jar包,但是需要设置scope为provided,只在编译的时候使用,因为maven中有tomcat的相关jar包,如果不配置则会产生冲突,jsp的包也是相同的-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

配置自定的的插件模板:

image-20200514191029786

在搜索框中填入live,先创建一个自己的组,customer

image-20200514191128705

配置模板,并配置模板名称,模板内容以及设置其在xml中使用

image-20200514191349570

maven的pom文件中依赖的作用范围:scope的值

依赖的范围 对于编译classpath有效 对于测试classpath有效 对于运行时classpath有效 例子
compile Y Y Y spring-core
test —- Y —- junit
provided Y Y —- servlet-api
runtime —– Y Y jdbc驱动
system Y Y —- 本地的,maven仓库之外的类库

maven使用mysql数据库简单记录

pom的文件:

<dependencies>
    <!--数据库驱动的包-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
        <scope>runtime</scope>
    </dependency>
    <!--单元测试的包-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

项目目录结构如下:

image-20200514221749031

测试以及测试结果:

创建数据层接口:


/**
 * @author xing
 * @create 2020/5/14-maven_java
 */
public interface ItemDao {
    public List<Item> findAll() throws SQLException, Exception;
    public void insert(Item item) throws ClassNotFoundException, Exception;
}

创建实现类:采用的传统的数据库格式连接,代码有冗余,在于基础。

package com.itxing.dao.impl;

import com.itxing.dao.ItemDao;
import com.itxing.domain.Item;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 * @author xing
 * @create 2020/5/14-maven_java
 */
public class ItemDaoImpl implements ItemDao {
    @Override
    public List<Item> findAll() throws Exception {
        //连接数据库的四个要素
        //1.数据库驱动
        //2.连接对象
        //3.执行对象
        //4.结果集
        List<Item> list = new ArrayList<>();
        Connection connection = null;
        PreparedStatement pst =null;
        ResultSet resultSet=null;

        try {
            //加载驱动类
            Class.forName("com.mysql.jdbc.Driver");
            //先获取Connection对象
            connection = DriverManager.getConnection("jdbc:mysql:///test","root","123");
            //获取真正操作数据的对象
            pst = connection.prepareCall("select * from user");
            resultSet = pst.executeQuery();
            //将结果集转换成java的List集合

            while (resultSet.next()) {
                Item item = new Item();
                item.setId(resultSet.getString("u_id"));
                item.setName(resultSet.getString("u_name"));
                item.setSex(resultSet.getString("u_sex"));
                list.add(item);
            }

        }catch(Exception ex){
            ex.printStackTrace();
        }finally {
            connection.close();
            pst.close();
            resultSet.close();
        }
        return list;
    }

    @Override
    public void insert(Item item) throws Exception {
        //注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //获取连接
        Connection conn =null;
        PreparedStatement pstm = null;
        try {
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123");
            //编写sql语句
            String sql="insert into user(u_name,u_id,u_sex) values(?,?,?)";
            //获取预处理对象
             pstm = conn.prepareStatement(sql);
            pstm.setString(1,item.getName());
            pstm.setString(2,item.getId());
            pstm.setString(3,item.getSex());

            //执行sql语句
            int line = pstm.executeUpdate();
            System.out.println("新添加有"+line+"条记录");
        }catch (Exception ex){
            ex.printStackTrace();
        }finally {
            //释放资源
            pstm.close();
            conn.close();
        }
    }
}

测试类:


/**
 * @author xing
 * @create 2020/5/14-maven_java
 */
public class ItemTest {
    @Test
    public void findAll() throws Exception {
        ItemDaoImpl itemDao = new ItemDaoImpl();
        List<Item> all = itemDao.findAll();
        for(Item item:all){
            System.out.println(item.getName()+" is a pretty "+item.getSex()+" hero ");
        }
    }
    @Test
    public void insert() throws Exception {
        ItemDaoImpl itemDao = new ItemDaoImpl();
        Item item = new Item();
        item.setName("hhhaaa");
        item.setId("2002");
        item.setSex("boy");
        itemDao.insert(item);
    }

}

end: maven学习主要还是要多多使用。


文章作者: it星
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 it星 !
 上一篇
spring学习 spring学习
it星
补Spring笔记,第一次学习总是没有什么印象,不断的重复学习以及使用才能更好的掌握知识点。 循环依赖:指的是多个Bean之间的相互调用,A对象创建时,需要构造B对象,构造B对象时需要构建C对象,构建C对象时又依赖A对象 1. Spri
2020-05-14
下一篇 
nginx笔记 nginx笔记
nginx是什么?能做什么? nginx是一个高性能的Http和反向代理web服务器,占用内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。 专为性能优化而开发,性能是其最重要的考量,实现上注重效率,能
  目录