Maven基础讲义.pdf

Maven 的正确发音是[ˈmevən],而不是“马瘟”以及其他什么瘟。Maven 在美国是一个口语化的词
语,代表专家、内行的意思。
一个对 Maven 比较正式的定义是这么说的:Maven 是一个项目管理工具,它包含了一个 项目对象模
型 (POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管
理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标
(goal)的逻辑。

Maven 依赖管理

maven - 图1

通过分析发现:maven 工程中不直接将 jar 包导入到工程中,而是通过在 pom.xml 文件中添加所需 jar
包的坐标,这样就很好的避免了 jar 直接引入进来,在需要用到 jar 包的时候,只要查找 pom.xml 文
件,再通过 pom.xml 文件中的坐标,到一个专门用于”存放 jar 包的仓库”(maven 仓库)中根据坐标从
而找到这些 jar 包,再把这些 jar 包拿去运行

Maven仓库和工程

maven 的工作需要从仓库下载一些 jar 包,如下图所示,本地的项目 A、项目 B 等都会通过 maven
软件从远程仓库(可以理解为互联网上的仓库)下载 jar 包并存在本地仓库,本地仓库 就是本地文
件夹,当第二次需要此 jar 包时则不再从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库
理解为缓存,有了本地仓库就不用每次从远程仓库下载了

maven - 图2

本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包,
优先从本地仓库查找
默认本地仓库位置在 maven - 图3{user.dir}表示windows 用户目录

远程仓库:如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载。
远程仓库可以在互联网内也可以在局域网内

中央仓库 :在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中
央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包
含了世界上大部分流行的开源项目构件

maven 仓库地址、私服等配置信息需要在 setting.xml 文件中配置,分为全局配置和用户配置。
在 maven 安装目录下的有 conf/setting.xml 文件,此 setting.xml 文件用于 maven 的所有 project
项目,它作为 maven 的全局配置。
如需要个性配置则需要在用户配置中设置,用户配置的 setting.xml 文件默认的位置在:maven - 图4{user.dir} 指windows 中的用户目录。
maven会先找用户配置,如果找到则以用户配置文件为准,否则使用全局配置文件

maven - 图5

maven 会默认从maven官方提供的服务器下载jar包。
而官方服务器在国外,因为大家都知道的原因,网速很慢,而且容易卡断。 为了便于快速下载相关jar包,可以使用国内maven 阿里云的下载地址:

修改在mirrors下新加一个阿里云的镜像地址:

  1. <mirror>
  2. <id>alimaven</id>
  3. <mirrorOf>central</mirrorOf>
  4. <name>aliyun maven</name>
  5. <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
  6. </mirror>

Maven命令

3.1.1 compile
compile 是 maven 工程的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target
目录下。
cmd 进入命令状态,执行mvn compile,如下图提示成功:
查看 target 目录,class 文件已生成,编译完成。
3.1.2 test
test 是 maven 工程的测试命令 mvn test,会执行src/test/java下的单元测试类。
cmd 执行 mvn test 执行 src/test/java 下单元测试类,下图为测试结果,运行 1 个测试用例,全部成功。
传智播客——专注于 Java、.Net 和Php、网页平面设计工程师的培训
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
3.1.3 clean
clean 是 maven 工程的清理命令,执行 clean 会删除 target 目录及内容。
3.1.4 package
package 是 maven 工程的打包命令,对于 java 工程执行 package 打成 jar 包,对于web 工程打成war
包。
3.1.5 install
install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库。
从运行结果中,可以看出:
当后面的命令执行时,前面的操作过程也都会自动执行,

Maven生命周期

maven - 图6

maven - 图7

Maven工程

创建webapp工程,

  • servlet,jsp需要加入pom,并且加上scope
  • 可以自己定义需要的tomcat和编译环境插件
  • 设置-代码模板可以加入常用代码
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.itheima</groupId>
  6. <artifactId>maven_web</artifactId>
  7. <version>1.0-SNAPSHOT</version>
  8. <packaging>war</packaging>
  9. <name>maven_web Maven Webapp</name>
  10. <!-- FIXME change it to the project's website -->
  11. <url>http://www.example.com</url>
  12. <properties>
  13. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  14. <maven.compiler.source>1.7</maven.compiler.source>
  15. <maven.compiler.target>1.7</maven.compiler.target>
  16. </properties>
  17. <dependencies>
  18. <dependency>
  19. <groupId>junit</groupId>
  20. <artifactId>junit</artifactId>
  21. <version>4.12</version>
  22. <scope>test</scope>
  23. </dependency>
  24. <dependency>
  25. <groupId>javax.servlet</groupId>
  26. <artifactId>servlet-api</artifactId>
  27. <version>2.5</version>
  28. <scope>provided</scope>
  29. </dependency>
  30. <dependency>
  31. <groupId>javax.servlet.jsp</groupId>
  32. <artifactId>jsp-api</artifactId>
  33. <version>2.0</version>
  34. <scope>provided</scope>
  35. </dependency>
  36. </dependencies>
  37. <build>
  38. <finalName>maven_web</finalName>
  39. <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
  40. <plugins>
  41. <plugin>
  42. <groupId>org.apache.tomcat.maven</groupId>
  43. <artifactId>tomcat7-maven-plugin</artifactId>
  44. <version>2.2</version>
  45. <configuration>
  46. <port>8888</port>
  47. </configuration>
  48. </plugin>
  49. <plugin>
  50. <groupId>org.apache.maven.plugins</groupId>
  51. <artifactId>maven-compiler-plugin</artifactId>
  52. <configuration>
  53. <target>1.8</target>
  54. <source>1.8</source>
  55. <encoding>UTF-8</encoding>
  56. </configuration>
  57. </plugin>
  58. </plugins>
  59. </pluginManagement>
  60. </build>
  61. </project>

mysql

<?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.itheima</groupId>
    <artifactId>maven_mysql</artifactId>
    <version>1.0-SNAPSHOT</version>

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

</project>
package com.itheima.dao.impl;

import com.itheima.dao.AccountDao;
import com.itheima.domain.Account;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class AccountDaoImpl implements AccountDao {
    public List<Account> findAll() throws SQLException, ClassNotFoundException {
        List<Account> list = new ArrayList<Account>();
        Connection connection = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection("jdbc:mysql://118.24.175.34:3306/java_test","root","p@ssw0rd");
            pst = connection.prepareCall("select * from account");
            rs = pst.executeQuery();

            while(rs.next()){
                Account account = new Account();
                account.setId(rs.getInt("id"));
                account.setName(rs.getString("name"));
                account.setMoney(rs.getFloat("money"));
                list.add(account);
            }
        }catch (Exception ex){
            ex.printStackTrace();
        }finally {
            connection.close();
            pst.close();
            rs.close();
        }

        return  list;
    }
}
package com.itheima.test;

import com.itheima.dao.AccountDao;
import com.itheima.dao.impl.AccountDaoImpl;
import com.itheima.domain.Account;
import org.junit.Test;

import java.sql.SQLException;
import java.util.List;

public class AccountTest {
    @Test
    public void findAll() throws SQLException, ClassNotFoundException {
        AccountDao accountDao = new AccountDaoImpl();
        List<Account> accounts = accountDao.findAll();
        for (Account account : accounts
             ) {
            System.out.println(account.toString());
        }
    }
}

maven eclipse

http://how2j.cn/k/maven/maven-eclipse-web-project/1334.html

maven 创建缓慢解决

http://how2j.cn/k/idea/idea-catalog/1557.html