1 引言
最近在阅读一本Java Web的书籍1时,手工实现书上的一个含多个Packages的例子,手工进行编译、运行,最终实现了效果。但感觉到整个构建过程非常繁琐,不仅要手写各个源文件的编译命令,还要考虑源文件之间的编译先后顺序;同时还要手工下载本项目所依赖的第三方Jar包。考虑到Maven具有自动化构建、依赖管理的功能,当然考虑到基于Maven重新构建和管理本项目。通过Maven工具重新构建此项目,前后对比之强烈,能让人充分感受到Maven在自动化构建、依赖管理方面的便利性,能让程序员从项目构建中解放出来,更加聚焦于业务的实现。
通过阅读本文,Maven的初学者更能深刻理解Maven存在的必要性及其应用场景;同时,对于那些只会手工编译项目的Java程序员来说,给出了切换到Maven的理由。
接下来,先叙述手工构建项目的详细过程,再叙述基于Maven构建同一项目的详细过程,最后给出二种构建方式的对比。本文所用的环境如下:
名称 | 版本 |
---|---|
Java | 1.8.0_281 |
MySQL | 8.0.13 |
Maven | 3.8.8 |
2 手工构建
下面给出一个完整的例子,其划分为6个package,每个package中都放有相关的代码。该例子还需访问MySQL数据库。由此,本例子是一个相对大型的、简单的例子,以能凸显手工编译的不便。
- 在MySQL中创建数据库、然后创建表:如下:
mysql> create database testweb;
mysql> use testweb;
mysql> CREATE TABLE product(
-> product_id varchar(20) NOT NULL,
-> product_name varchar(50) DEFAULT NULL,
-> price decimal(6,2) DEFAULT NULL,
-> info varchar(100) DEFAULT NULL,
-> PRIMARY KEY (product_id)
-> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected, 1 warning (0.84 sec)
- 手工建立文件夹结构。创建一个根目录testDAO,再在其中创建三个子文件夹,如下:
- 在lib文件夹中放入本项目需要引用的第三方包mysql-connector-java-8.0.13.jar。
- 在src文件夹中放入如下代码(注意代码所在的packages):
Product.java:
package com.rob.pojo;
import java.io.Serializable;
public class Product implements Serializable {
private static final long serialVersionUID = 1L;
private String product_id;
private String product_name;
private double price;
private String info;
public Product(){
super();
}
public String getProduct_id(){
return product_id;
}
public void setProduct_id(String product_id){
this.product_id = product_id;
}
public String getProduct_name(){
return product_name;
}
public void setProduct_name(String product_name){
this.product_name = product_name;
}
public double getPrice(){
return price;
}
public void setPrice(double price){
this.price = price;
}
public String getInfo(){
return info;
}
public void setInfo(String info){
this.info = info;
}
}
DBConnection.java:
package com.rob.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnection {
private static final String Driver = "com.mysql.cj.jdbc.Driver";
private static final String URL = "jdbc:mysql://localhost:3306/testweb?serverTimezone=Asia/Shanghai&useSSL=false";
private static final String USER = "root";
private static final String PASSWORD = "123456";
private Connection conn = null;
public DBConnection() throws Exception {
try {
Class.forName(Driver);
this.conn = DriverManager.getConnection(URL, USER, PASSWORD);
} catch(Exception e) {