maven 简述及使用 maven 管理单个项目
简单的说就是 maven 是一个项目管理工具,同时也是一个依赖管理工具。
使用 maven 生成的项目结构大致如下:
project
|- src/main/java
|- src/main/resources
|- src/test/java
|- src/test/resources
本篇笔记带一些核心重点和在 maven 中创建一个项目
使用 maven 创建项目及一些关键点
创建&安装&运行
创建 maven 项目
这里主要是用终端运行,指令包括构建 maven 项目、查看 pom 文件以及显示 maven 项目的结构,如下:
❯ mvn archetype:generate
Java 实现
这里不太涉及 maven,带一下就过去了
感兴趣 b 站也好那里也好,找一下 servlet/spring 相关的实现也行……我暂时还没复习到那,复习了再做笔记
创建 Data Access Layer
这里折腾的都是一些 Java 方面的配置
src/main 下的结构如下:
❯ tree productservices/src/main
productservices/src/main
└── java
└── com
└── goldenaarcher
└── product
├── dao
│ ├── ProductDAO.java
│ └── ProductDAOImpl.java
└── dto
└── Product.java
7 directories, 3 files
完整的代码如下:
-
Product.java
package com.goldenaarcher.product.dto;
public class Product {
private int id;
private String name;
private String description;
private int price;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
-
ProductDAO.java
package com.goldenaarcher.product.dao;
import com.goldenaarcher.product.dto.Product;
public interface ProductDAO {
void create(Product product);
Product read(int id);
void update(Product product);
void delete(int id);
}
-
ProductDAOImpl.java
package com.goldenaarcher.product.dao;
import com.goldenaarcher.product.dto.Product;
public class ProductDAOImpl implements ProductDAO {
@Override
public void create(Product product) {
// TODO Auto-generated method stub
}
@Override
public Product read(int id) {
// TODO Auto-generated method stub
return null;
}
@Override
public void update(Product product) {
// TODO Auto-generated method stub
}
@Override
public void delete(int id) {
// TODO Auto-generated method stub
}
}
实现 data access layer
package com.goldenaarcher.product.dao;
import java.util.HashMap;
import java.util.Map;
import com.goldenaarcher.product.dto.Product;
public class ProductDAOImpl implements ProductDAO {
Map<Integer, Product> products = new HashMap<>();
@Override
public void create(Product product) {
products.put(product.getId(), product);
}
@Override
public Product read(int id) {
return products.get(id);
}
@Override
public void update(Product product) {
// TODO Auto-generated method stub
}
@Override
public void delete(int id) {
// TODO Auto-generated method stub
}
}
更新 JUnit
这里补一下 [JUnit] JUnit5 基础 1 - Junit5 结构 与 断言的使用 里没提到的配置,我之前知道 junit5 是有个合集,不用单独下载三四个依赖,但是找了下自己笔记里没写……
<dependencies>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.10.0</version>
<scope>test</scope>
</dependency>
</dependencies>
版本可以选择用当前最新的稳定更新,或者这个……短期之内应该不会差太多。然后跑下 mvn clean install
,有可能也需要更新 maven-surefire-plugin
这个版本去跑对应的测试
重复一下,maven-surefire-plugin
是 test
这个 goal 的插件
执行测试
这里写一点测试主要是为了看下跑 mvn install
会执行测试
package com.goldenaarcher.product.dao;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import org.junit.jupiter.api.Test;
import com.goldenaarcher.product.dto.Product;
public class ProductDAOImplTest {
@Test
public void createShouldCreateAProduct() {
ProductDAO dao = new ProductDAOImpl();
Product product = new Product();
product.setId(1);
product.setName("Iphone");
product.setDescription("It's awesome");
product.setPrice(800);
dao.create(product);
Product result = dao.read(1);
assertNotNull(result);
assertEquals("Iphone", result.getName());
}
}
结果:
[[1;34mINFO[m] -------------------------------------------------------
[[1;34mINFO[m] T E S T S
[[1;34mINFO[m] -------------------------------------------------------
[[1;34mINFO[m] Running com.goldenaarcher.product.dao.[1mProductDAOImplTest[m
[[1;34mINFO[m] [1;32mTests run: [0;1;32m1[m, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.018 s - in com.goldenaarcher.product.dao.[1mProductDAOImplTest[m
[[1;34mINFO[m]
[[1;34mINFO[m] Results:
[[1;34mINFO[m]
[[1;34mINFO[m] [1;32mTests run: 1, Failures: 0, Errors: 0, Skipped: 0[m
跳过测试
命令行的 flag:
❯ mvn install -DskipTests
Eclipse 里的设置:
这里 user settings 不需要加值,默认会显示 m2 下面的配置文件
执行结果:
[[1;34mINFO[m] [1m--- [0;32mmaven-surefire-plugin:2.22.1:test[m [1m(default-test)[m @ [36mproductservices[0;1m ---[m
[[1;34mINFO[m] Tests are skipped.
创建 Business Obuect Layer
此时的结构:
❯ tree productservices/src/main
productservices/src/main
└── java
└── com
└── goldenaarcher
└── product
├── bo
│ ├── ProductBO.java
│ └── ProductBOImpl.java
├── dao
│ ├── ProductDAO.java
│ └── ProductDAOImpl.java
└── dto
└── Product.java
8 directories, 5 files
代码实现:
-
ProductBO.java
package com.goldenaarcher.product.bo;
import com.goldenaarcher.product.dto.Product;
public interface ProductBO {
void create(Product product);
Product findProduct(int id);
}
-
ProductBOImpl.java
package com.goldenaarcher.product.bo;
import com.goldenaarcher.product.dao.ProductDAO;
import com.goldenaarcher.product.dao.ProductDAOImpl;
import com.goldenaarcher.product.dto.Product;
public class ProductBOImpl implements ProductBO {
private static ProductDAO dao = new ProductDAOImpl();
@Override
public void create(Product product) {
dao.create(product);
}
@Override
public Product findProduct(int id) {
return dao.read(id);
}
}
添加 spring 依赖
这里也不会过多的折腾配置……下次一定
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.11</version>
</dependency>