Eclipse使用Maven
Ant与分布式
Ant和maven都是项目构建工具,比如MyEclipse的编译、运行、打包、导包、导出都是Ant构建的。
传统的项目
1.1新建一个项目,通过不同的包来区分不同的模块
1.2部署的时候,直接把这个项目发布到服务器中
分布式项目
1.1把一个项目拆分成多个项目,把拆分后的项目分别部署到对应的服务器当中,
该过程就是分布式项目部署
Maven
1.1分布式项目导包操作,假如一个项目已经更新,按照Ant的部署模式,
必须要引入新的项目(jar)才能够更新,
这就是为什么后来都开始使用Maven构建项目啦
Maven配置
基于Ant的构建工具,但是额外添加了其他功能
1.1 maven构建项目的时候会去本地仓库获取相关jar包,
如果没有则会去默认的中央仓库(网址)下载相关jar包到本地仓库
1.2 因为默认的中央仓库地址是国外的速度比较慢,
所以一般我们会自己配置一个国内的镜像地址(一般都是阿里的)
1.3 保证jdk与开发环境一致,需要配置
配置本地仓库
<localRepository>D:\MySoftware\Maven\repository</localRepository>
配置镜像
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
配置jdk版本
<profile>
<id>jdk-1.7</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profile>
新建Maven项目
坐标
1.每一个jar文件,都有一个唯一的坐标,通过坐标可以精确确定是哪个jar
2.坐标组成:
2.1 Group ID:公司
2.2 Artifact ID:项目名称
2.3 Version:版本
创建简易的maven项目
1.new->other->maven->Maven Project->next
2.勾选Create a simple project
3.填写GroupID和ArtifacID即可,Packaging:
3.1 jar:java项目
3.2 war:web项目
3.3 pom:做为父项目,有子项目的时候必须使用pom(Project Object Mode)项目对象模型,
把项目当作对象看待,通过Maven构建工具使得对象与对象之间产生关系
项目与项目之间的关系
目录结构
src/main/java#写java代码的
src/main/resources#里面所有的配置文件最后都会被编译到jar包里面的类路径下面
src/test/java#测试java代码
src/test/resources#测试资源
pom.xml#Maven的配置文件:可以配置当前项目所依赖的其他项目或者jar包插件
依赖第一个项目
第一个项目:maven01
package maven01;
public class Main {
public static void main(String[] args) {
System.out.println("我的第一个Maven项目");
}
}
<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>cn.jxb</groupId>
<artifactId>maven01</artifactId>
<version>0.0.1-SNAPSHOT</version>
</project>
第二个项目:maven02
首先创建一个依赖
<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>cn.jxb</groupId>
<artifactId>maven02</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>cn.jxb</groupId>
<artifactId>maven01</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
在< dependencies>标签中添加多个< dependency>代表注入依赖,然后每个依赖需要三个参数才能确定一个项目:groupId、artifactId、version,所以直接把项目一的pom.xml中的标签拷贝到项目二中即可
package maven02;
import maven01.Main;
public class Demo {
public static void main(String[] args) {
Main main = new Main();
main.main(null);
}
}
继承关系:父项目必须是pom类型,子项目可以是jar或者war
首先创建一个父亲项目
创建->勾选pom即可
然后创建一个子项目
1.创建的时候,下面要填写parent信息
2.由于子项目继承自父项目,所以在pom.xml中会看到parent标签
修改子项目的pom.xml
<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>
<parent>
<groupId>cn.jxb</groupId>
<artifactId>maven03</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>cn.jxb</groupId>
<artifactId>maven04</artifactId>
<version>0.0.1-SNAPSHOT</version>
</project>
由于子项目继承自父项目,所以groupId和version都是和父项目保持一致的,需要删除这两个(不删除也可以)
<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>
<parent>
<groupId>cn.jxb</groupId>
<artifactId>maven03</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>maven04</artifactId>
</project>
聚合项目:父项目会把子项目包含进来,此时子项目在创建时一定是MavenModule不是MacenProject
例如我们在创建一个modul子项目,表示聚合
1.选择MavenModule,名称maven05
2.选择parent项目为maven03
查看maven05的pom.xml
<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>
<parent>
<groupId>cn.jxb</groupId>
<artifactId>maven03</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>maven05</artifactId>
</project>
查看maven03的pom.xml
<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>cn.jxb</groupId>
<artifactId>maven03</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>maven05</module>
</modules>
</project>
此时父项目会有一个< module>的标签包含子项目
1.聚合项目:语义上父子关系较强
2.继承项目:语义上关系较弱
3.效果一样,只是语义上稍微有点区别
新建war项目
Packaging选war
创建项目之后会报错,是因为web结构不完整
1.在webapp下面创建META-INF文件夹
2.在webapp下面创建WEB-INF文件夹
3.把web.xml拷贝到WEB-INF下面
4.在webapp下面创建index.jsp
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
</web-app>
配置servlet,jsp,jstl依赖
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
编写一个Servlet
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/demo")
public class DemoServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("执行了");
}
}
Run As Service 选择 tomcat7直接使用Eclipse内部的tomcat运行
注意几个常见的错误
1.当我们输入localhost:8080回车访问的是Eclpse的tomcat的ROOT下面的项目,但是一开始没有这个界面,所以可以去
D:\DevelopmentEnvironment\EclipseMars2\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\ROOT
编写一个index.jsp文件
2.当你发现运行后报错端口被占用,说明你之前已经启动了一次,你可以重启Eclipse
3.每次运行之后一定要在控制台关闭运行
4.如果报空指针异常,可能是包有冲突,添加<scope>provided<scope>标签配置
第三方tomcat插件
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>80</port>
<!--
path:
项目部发布到tomcat的名称
/表示ROOT
/abc表示/abc目录
-->
<path>/abc</path>
</configuration>
</plugin>
</plugins>
</build>
1.配置好插件以后,那么所有的maven项目发布到自己配置的tomcat,但是maven也可以发送到本地的tomcat中
2.完成后右键Run As 到Maven Bulid ,输入命令:clean tomcat7:run
整理War源码
/maven-web01/src/main/webapp/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
</web-app>
/maven-web01/src/main/webapp/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>我是第一个页面</h1>
<h3>
<%=application.getRealPath("/") %>
</h3>
</body>
</html>
/maven-web01/src/main/java/DemoServlet.java
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/demo")
public class DemoServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("执行了啊啊啊啊");
}
}
/maven-web01/pom.xml
<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>cn.jxb</groupId>
<artifactId>maven-web01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/abc</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
Maven练习SSM
导入Spring配置包
<!-- spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.5</version>
</dependency>
<!-- spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.5</version>
</dependency>
<!-- org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.6</version>
</dependency>
导入MyBatis包
<!-- org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
导入日志包
<!-- log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
数据库驱动包
<!-- mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
导入jackson转换为json字符串(SpringMvc依赖于这个包)
<!-- com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.2</version>
</dependency>
文件上传下载
<!-- commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<!-- commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
创建一张表
mysql> create database mybatis default character set utf8;
Query OK, 1 row affected (0.00 sec)
mysql> use mybatis;
Database changed
mysql> create table stu(
-> id int(10) primary key auto_increment comment '编号',
-> name varchar(30) not null comment '姓名',
-> age int(10) not null comment'年龄');
Query OK, 0 rows affected (0.02 sec)
mysql> desc stu;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(30) | NO | | NULL | |
| age | int(10) | NO | | NULL | |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
mysql> insert into stu values(default,'张三',19);
Query OK, 1 row affected (0.00 sec)
mysql> select * from stu;
+----+--------+-----+
| id | name | age |
+----+--------+-----+
| 1 | 张三 | 19 |
+----+--------+-----+
1 row in set (0.00 sec)
热部署
首先去配置tomcat的配置文件,打开manager app
输入linux命令:修改tomcat下面的配置文件:
vim /usr/local/tomcat/conf/tomcat-users.xml
在< tomcat-users>标签当中添加权限
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="tomcat" password="root" roles="manager-gui,manager-script"/>
即可在tomcat界面输入用户名:tomcat以及密码:root即可登录manager app界面,在浏览器搜索框里就是:
http://192.168.17.128:8080/manager/html
配置maven项目.pom文件
在< configuration>中配置tomcat插件属性:
<username>tomcat</username>
<password>root</password>
<url>http://192.168.17.128:8080/manager/text</url>
发布
1.右键->Run As->Maven Build->输入命令:
tomcat7:deploy(首次发布)回车即可
2.如果是(项目名相同第二次发布)使用:redeploy命令
然后访问
http://192.168.17.128:8080/abc/