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
左上角搜索框中填入maven,设置自己的maven位置与xml
为了防止在不能上网的情况下maven项目有问题,配置一个参数:
-DarchetypeCatalog=internal
创建一个maven的java工程:idea提供许多的maven骨架,选择java的骨架点击next
填写项目的坐标信息、并且配置路径:
创建项目成功并运行测试:
当前的文件目录结构缺少资源目录结构,自定义一个文件夹并且设置为资源文件夹,选中文件夹右键进行设置。
如果不适用骨架创建出来的maven只是在test路径下没有resources文件夹,并且没有默认的测试类文件,但是在main目录下有resources文件夹。推荐在创建maven的时候不要使用上面的选择骨架创建。
不适用骨架创建的maven项目:
使用maven创建一个web项目:需要使用骨架
其余操作与上面类似,web的目录结构是:
web项目需要有tomcat服务器,配置如果有如下问题:
No artifacts marked for deployment
参考:以上问题解决方案
问题二:创建Servlet时没有Servlet选项:
一次点击并选中:
最后就可以创建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>
配置自定的的插件模板:
在搜索框中填入live,先创建一个自己的组,customer
配置模板,并配置模板名称,模板内容以及设置其在xml中使用
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>
项目目录结构如下:
测试以及测试结果:
创建数据层接口:
/**
* @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学习主要还是要多多使用。