栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Maven工程多模块开发步骤(IDEA)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Maven工程多模块开发步骤(IDEA)

目录
  • 说在前面
  • 项目结构
  • 环境
  • 步骤
    • 1.新建工程(主模块)
      • 1.1编写pom.xml
    • 2.建子模块(pojo)
      • 2.1编写pom.xml
      • 2.2编写User类
      • 2.3安装
    • 3.建子模块(db)
      • 3.1编写pom.xml
      • 3.2编写DBHelper类
      • 3.3安装
    • 4.建子模块(dao)
      • 4.1编写pom.xml
      • 4.2编写UserDao类
      • 4.3编写UserDaoImpl类
      • 4.4安装
    • 5.建子模块(web)
      • 5.1编写pom.xml
      • 5.2编写index.jsp
      • 5.3编写web.xml
      • 5.4编写LoginServlet类
      • 5.5配置tomcat并运行
      • 5.6安装
  • 说在后面

说在前面

    因为偷懒,所有工程内测试的部分就没有展示了,只有最终在页面上的展示测试。而且本应该在test里进行测试,可test部分是GBK编码,我是用的UTF-8编码,不想改所以我都不是在test里测试的。
    每一个模块写完都install了,如果尝试deploy的话是会报错的,根据老师所说原因是IDEA创建的只有这一个工程,而deploy只能给工程,而子模块是可以install而不能deploy的。
    但是捏,我还是在工程的deploy时报错了:Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project java_maven_02: Deployment failed: repository element was not specified in the POM inside distributionManagement element or in -DaltDeploymentRepository=id::layout::url parameter -> [Help 1],我估计是我没有配私服的原因,暂时我也用不上就不深究了。
    如果像我这样全部配置了UTF-8编码的话,用test测试就全英文就好。


项目结构


环境

数据库:Server version: 5.5.27 MySQL Community Server (GPL)
集成环境:IntelliJ IDEA 2019.3.3
Java version: 1.8(jdk1.8.0_221)
Maven version:apache-maven-3.3.9
系统:Windows 10 家庭中文版
编码:UTF-8(Test部分是GBK,不想改所以不用Test测试。)


步骤 1.新建工程(主模块)

    手动建,不使用框架。
    为了记住我自己的学习进度我的工程名是java_maven_02,如果真的是一个多模块开发的话,这个父模块的工程名就应该会是什么什么管理系统啊之类的这样。
    这个主模块可以说是不干活,所以文件夹都可以删了。我这里只删掉了src文件夹。
    实际项目开发中可以横着切可以竖着切,因为我暂时只是想熟悉一下流程,所以我就采用横着切的方式拆分,即pojo为一个子模块、dao为一个子模块这样。(竖着切大概就是,注册模块、支付模块、用户管理模块这种。)

1.1编写pom.xml

    需要设置包配置为pom,另外子工程需要的一些依赖包可以配在此处,减少代码冗余。但是不提示就很烦,也不知道是什么原理,在子工程的pom.xml里配了依赖包也不提示…



    4.0.0

    com.selma
    java_maven_02
    1.0-SNAPSHOT
    pom

    
        java_maven_02_pojo
        java_maven_02_db
        java_maven_02_dao
        java_maven_02_web
    

    
        UTF-8
        1.8
        1.8
    
    
        
            mysql
            mysql-connector-java
            5.1.29
            
            runtime
        
        
            javax.servlet.jsp.jstl
            jstl
            1.2
            
            compile
            
            
        
        
            javax.servlet.jsp
            jsp-api
            2.0
            provided
        
        
            javax.servlet
            servlet-api
            2.5
            provided
        
    

2.建子模块(pojo)

    不一定要建Maven工程了,随意,我这里就还是创建Maven工程。而子模块其实就可以看作一个工程。
    在这里我建了一个java_maven_02_pojo的子工程,并在该工程里只写了pojo类(简单起见只写了一个做测试)。
    在主模块的pom.xml文件中出现了modules标签,将该模块加入其中。

2.1编写pom.xml


    
        java_maven_02
        com.selma
        1.0-SNAPSHOT
    

    4.0.0

    java_maven_02_pojo
    jar

    
        UTF-8
        1.8
        1.8
    

2.2编写User类
package com.selma.pojo;

import java.io.Serializable;

public class User implements Serializable {
    private Integer userId;
    private String userName;
    private String userPassword;
    private String userIdentity;
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getUserPassword() {
        return userPassword;
    }
    public void setUserPassword(String userPassword) {
        this.userPassword = userPassword;
    }
    public String getUserIdentity() {
        return userIdentity;
    }
    public void setUserIdentity(String userIdentity) {
        this.userIdentity = userIdentity;
    }
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", userName='" + userName + ''' +
                ", userPassword='" + userPassword + ''' +
                ", userIdentity='" + userIdentity + ''' +
                '}';
    }
}
2.3安装

    使用maven的install命令对pojo模块进行安装,这样可以在需要的地方引入安装了的jar包,便可以直接使用了。(就是正常使用jar包一样。)
    子工程里出现target(橙色)文件夹就是安装成功了。

3.建子模块(db)

    工程名:java_maven_02_db

3.1编写pom.xml


    
        java_maven_02
        com.selma
        1.0-SNAPSHOT
    

    4.0.0

    java_maven_02_db
    jar

    
        UTF-8
        1.8
        1.8
    

3.2编写DBHelper类
package com.selma.db;

import java.sql.Connection;
import java.sql.DriverManager;

public class DBHelper {
    public static final String DRIVER = "com.mysql.jdbc.Driver";
    public static final String URL = "jdbc:mysql//localhost:3306/csdn";
    public static final String USERNAME = "root";
    public static final String PASSWORD = "123456";

    static {
        try {
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    public static Connection getConnection(){
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(URL,USERNAME,PASSWORD);
        }catch (Exception e){
            e.printStackTrace();
        }
        return connection;
    }
    public static void closeConnection(Connection connection){
        try {
            if(connection != null && !connection.isClosed()){
                connection.close();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    //关闭结果集之类的就偷懒没写了。
}
3.3安装

    使用maven的install命令对db模块进行安装。
    子工程里出现target(橙色)文件夹就是安装成功了。

4.建子模块(dao)

    工程名:java_maven_02_dao
    在子模块dao中我们需要用到子模块pojo和子模块db的东西,为了方便我就在dao的子模块的pom.xml里引入子模块pojo和子模块db的依赖包。

4.1编写pom.xml


    
        java_maven_02
        com.selma
        1.0-SNAPSHOT
    
    4.0.0

    java_maven_02_dao
    jar

    
        UTF-8
        1.8
        1.8
    
    
        
            com.selma
            java_maven_02_pojo
            1.0-SNAPSHOT
        
        
            com.selma
            java_maven_02_db
            1.0-SNAPSHOT
        
    

4.2编写UserDao类
package com.selma.dao;

import com.selma.pojo.User;

import java.util.List;

public interface UserDao {
    public Boolean insertOneUser(User user);
    public Boolean deleteOneUser(Integer userId);
    public Boolean updateOneUser(User user);
    public User selectOneUser(Integer userId);
    public List selectAllUsers();
}
4.3编写UserDaoImpl类
package com.selma.dao.impl;

import com.selma.dao.UserDao;
import com.selma.db.DBHelper;
import com.selma.pojo.User;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class UserDaoImpl implements UserDao {
    public Boolean insertOneUser(User user) {
        Boolean flag = false;
        String sql = "INSERT INTO user(user_name, user_password, user_identity) VALUES(?, ?, ?)";
        Connection connection = DBHelper.getConnection();
        try{
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1, user.getUserName());
            preparedStatement.setString(2, user.getUserPassword());
            preparedStatement.setString(3, user.getUserIdentity());
            if(preparedStatement.executeUpdate() > 0) {
                flag = true;
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            DBHelper.closeConnection(connection);
        }
        return flag;
    }

    public Boolean deleteOneUser(Integer userId) {
        Boolean flag = false;
        String sql = "DELETE FROM user WHERe user_id = ?";
        Connection connection = DBHelper.getConnection();
        try{
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1, String.valueOf(userId));
            if(preparedStatement.executeUpdate() > 0) {
            flag = true;
        }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            DBHelper.closeConnection(connection);
        }
        return flag;
    }

    public Boolean updateOneUser(User user) {
        Boolean flag = false;
        String sql = "UPDATE user SET user_name = ?, user_password = ?, user_identity = ? WHERe user_id = ?";
        Connection connection = DBHelper.getConnection();
        try{
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1, user.getUserName());
            preparedStatement.setString(2, user.getUserPassword());
            preparedStatement.setString(3, user.getUserIdentity());
            preparedStatement.setString(4, String.valueOf(user.getUserId()));
            if(preparedStatement.executeUpdate() > 0) {
                flag = true;
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            DBHelper.closeConnection(connection);
        }
        return flag;
    }

    public User selectOneUser(Integer userId) {
        User user = new User();
        String sql = "SELECT * FROM user WHERe user_id = ?";
        Connection connection = DBHelper.getConnection();
        try{
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1, String.valueOf(userId));
            ResultSet resultSet = preparedStatement.executeQuery();
            if (resultSet.next()){
                user.setUserId(resultSet.getInt("user_id"));
                user.setUserName(resultSet.getString("user_name"));
                user.setUserPassword(resultSet.getString("user_password"));
                user.setUserIdentity(resultSet.getString("user_identity"));
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            DBHelper.closeConnection(connection);
        }
        return user;
    }

    public List selectAllUsers() {
        List userList = new ArrayList();
        String sql = "SELECT * FROM user";
        Connection connection = DBHelper.getConnection();
        try{
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            ResultSet resultSet = preparedStatement.executeQuery();
            while (resultSet.next()){
                User user = new User();
                user.setUserId(resultSet.getInt("user_id"));
                user.setUserName(resultSet.getString("user_name"));
                user.setUserPassword(resultSet.getString("user_password"));
                user.setUserIdentity(resultSet.getString("user_identity"));
                userList.add(user);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            DBHelper.closeConnection(connection);
        }
        return userList;
    }
}
4.4安装

    使用maven的install命令对dao模块进行安装。(这里我的安装一直在报错,然后我是去点击的主模块的安装才ok的,但是我全部写完再clean-install又没有问题了,不知道我前面搞错啥了)

5.建子模块(web)

    工程名:java_maven_02_web
    所需要的jstl、jsp-api和servlet-api都在主模块里加入了依赖。
    为了方便我就在web的子模块的pom.xml里引入子模块pojo、子模块dao和子模块db的依赖包。

5.1编写pom.xml


    
        java_maven_02
        com.selma
        1.0-SNAPSHOT
    
    4.0.0

    java_maven_02_web
    war
    
    
    	
            com.selma
            java_maven_02_pojo
            1.0-SNAPSHOT
        
        
            com.selma
            java_maven_02_db
            1.0-SNAPSHOT
        
        
            com.selma
            java_maven_02_dao
            1.0-SNAPSHOT
        
    

5.2编写index.jsp

    没啥实质性的东西,就测试一下能不能跳转。
    然后测试各个子模块的类能不能成功创建。

<%--
  Created by IntelliJ IDEA.
  User: Selma
  Date: 2022-07-22
  Time: 11:53
  To change this template use File | Settings | File Templates.
--%>
<%@ page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" language="java" %>

  
    登录
  
  
    点击进入登录页面。
  

5.3编写web.xml


    
        loginServlet
        com.selma.web.servlet.LoginServlet
    
    
        loginServlet
        /login
    

5.4编写LoginServlet类

    5.3和5.4其实没啥先后之分,这里是因为我没有导入注解的包,所以servlet就xml配置了。

package com.selma.web.servlet;

import com.selma.dao.impl.UserDaoImpl;
import com.selma.db.DBHelper;
import com.selma.pojo.User;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class LoginServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("enter LoginServlet");
        //测试能不能获得到。
        System.out.println(new User());
        System.out.println(DBHelper.getConnection());
        System.out.println(new UserDaoImpl());

    }
}
5.5配置tomcat并运行 5.6安装

    使用maven的install命令对web模块进行安装。
    子工程里出现target(橙色)文件夹就是安装成功了。


说在后面

    开发项目大致就是这个模式,但是具体工作中咋用我也不清楚,还需要继续努力。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1031649.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号