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-plugintest 这个 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 里的设置:

[maven] maven 简述及使用 maven 管理单个项目-LMLPHP

这里 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>
09-14 09:50