JavaSE

Eclipse使用Maven

2021-05-16  本文已影响0人  孑小白

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/
上一篇 下一篇

猜你喜欢

热点阅读