天天看点

Maven学习总结7 -- 创建一个多模块的项目

创建一个多模块的项目

      • 1.设计
      • 2.项目创建
          • 父项目的创建
          • model层/dao层/service层的创建
          • web层的创建
      • 3.打包
      • 4.项目部署到tomcat服务器
          • 将war包复制到tomcat安装目录的webapps目录下
          • 跳转到tomcat源目录下的bin目录下,启动startup.bat
          • 访问该项目
      • 5.导入idea中进行开发

1.设计

首先是设计工作,目前的项目架构的搭建通常要用到分层思想,我目前接触的java-web项目一般将项目分为model(域模型层)、dao(数据访问层),service(业务逻辑层),web(视图层)。分层思想使得各层之间的职责明确,利于管理和维护。

2.项目创建

我们使用maven命令的方式来创建项目(不清楚的可以参考: https://blog.csdn.net/weixin_43740223/article/details/89477815)

父项目的创建

跳转到我们要创建项目的目录,并执行

mvn archetype:generate -DgroupId=com.demo -DartifactId=demo-parent -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false -DarchetypeCatalog=internal
           
Maven学习总结7 -- 创建一个多模块的项目

创建成功,由于这个项目是作为父项和聚合器的,我们可以把src文件夹删除

maven自动生成的pom文件,修改为如下

<?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.demo</groupId>
  <artifactId>demo-parent</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!--将打包类型改为pom -->
  <packaging>pom</packaging>

  <name>demo-parent</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>
  
  <!--添加dependencyManagement标签包围 -->
	<dependencyManagement>
	  <dependencies>
	    <dependency>
	      <groupId>junit</groupId>
	      <artifactId>junit</artifactId>
	      <version>4.11</version>
	      <scope>test</scope>
	    </dependency>
	  </dependencies>
  </dependencyManagement>

  <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>
           
model层/dao层/service层的创建

在父项目路径下,执行如下命令:

mvn archetype:generate -DgroupId=com.demo -DartifactId=demo-model -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false -DarchetypeCatalog=internal
           

命令成功,父项目目录下多了一个demo-model的项目。

Maven学习总结7 -- 创建一个多模块的项目

进入demo-model,可以看到目录结构如下。

Maven学习总结7 -- 创建一个多模块的项目

我们再次查看父项目的pom文件,发现maven自动添加了一个模块

Maven学习总结7 -- 创建一个多模块的项目

修改demo-model项目的pom文件如下

<?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>
  
  <!--maven自动添加了父类标签,并指向demo-parent -->
  <parent>
    <artifactId>demo-parent</artifactId>
    <groupId>com.demo</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  
  

  <!--groupId将继承自父项,可以不写 -->
  <!--<groupId>com.demo</groupId>-->
  
  <artifactId>demo-model</artifactId>
  
  <!--version将继承自父项,可以不写 -->
  <!--<version>1.0-SNAPSHOT</version>-->
  
  <!--添加打包类型,设置为jar -->
  <packaging>jar</packaging>

  <name>demo-model</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <!--properties将继承自父项,如无特殊定制,则去除 
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>
  -->

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
	  
	  <!-- 该依赖父类已有定义版本和范围,去除版本和范围
      <version>4.11</version>
      <scope>test</scope> 
	  -->
    </dependency>
  </dependencies>

  <!-- 子项目使用继承自super pom 默认的插件配置即可
  <build>
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
  -->
</project>

           

依次配置,依次创建 demo-dao,demo-service。

文件结构如下

D:\ideaProject\demo\demo-parent>tree /f
文件夹 PATH 列表
卷序列号为 4E5B-BFB0
D:.
│  pom.xml
│
├─demo-dao
│  │  pom.xml
│  │
│  └─src
│      ├─main
│      │  └─java
│      │      └─com
│      │          └─demo
│      │                  App.java
│      │
│      ├─site
│      │      site.xml
│      │
│      └─test
│          └─java
│              └─com
│                  └─demo
│                          AppTest.java
│
├─demo-model
│  │  pom.xml
│  │
│  └─src
│      ├─main
│      │  └─java
│      │      └─com
│      │          └─demo
│      │                  App.java
│      │
│      └─test
│          └─java
│              └─com
│                  └─demo
│                          AppTest.java
│
└─demo-service
    │  pom.xml
    │
    └─src
        ├─main
        │  └─java
        │      └─com
        │          └─demo
        │                  App.java
        │
        └─test
            └─java
                └─com
                    └─demo
                            AppTest.java
           
web层的创建

最后是创建web层。web层需要将archetype 指定为 maven-archetype-webapp 命令如下

mvn archetype:generate -DgroupId=com.demo -DartifactId=demo-web -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4 -DinteractiveMode=false -DarchetypeCatalog=internal
           

创建完成后

Maven学习总结7 -- 创建一个多模块的项目

进入该文件夹,

D:\ideaProject\demo\demo-parent>cd demo-web

D:\ideaProject\demo\demo-parent\demo-web>tree /f
文件夹 PATH 列表
卷序列号为 4E5B-BFB0
D:.
│  pom.xml
│
└─src
    └─main
        └─webapp
            │  index.jsp
            │
            └─WEB-INF
                    web.xml
           

可以看到web项目与普通项目生成的目录结构是不相同的。我们再查看一下web项目的pom文件。

暂时修改为如下。

<?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>
  <parent>
    <artifactId>demo-parent</artifactId>
    <groupId>com.demo</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <artifactId>demo-web</artifactId>
  <packaging>war</packaging>

  <name>demo-web Maven Webapp</name>
  <url>http://www.example.com</url>


  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>
  </dependencies>

  <build>
    <finalName>demo-web</finalName>
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
  </build>
</project>
           

我们注意到web项目下有个index.jsp.

Maven学习总结7 -- 创建一个多模块的项目

到这里,我们的项目已经简单的搭建完毕了。

3.打包

我们查看一下父项目的pom文件

<modules>
    <module>demo-model</module>
    <module>demo-dao</module>
    <module>demo-service</module>
    <module>demo-web</module>
  </modules>
           

maven已经自动的将几个项目组成模块列表了

接下来我们来测试一下使用多模块 是否能够直接将这四个项目打包

跳转到父项目路径下,执行

mvn package
           
Maven学习总结7 -- 创建一个多模块的项目

执行成功

Maven学习总结7 -- 创建一个多模块的项目

由于java-web项目以war的形式生成war包来运行整个项目,我们查看web项目目录,在web项目target目录下生成了一个war 包。内含我们这个多模块项目的输出内容。我们把该war包部署到本地的tomcat服务器上。

4.项目部署到tomcat服务器

将war包复制到tomcat安装目录的webapps目录下
Maven学习总结7 -- 创建一个多模块的项目
跳转到tomcat源目录下的bin目录下,启动startup.bat
Maven学习总结7 -- 创建一个多模块的项目
访问该项目

启动成功后,查看webapps下的demo-web目录

Maven学习总结7 -- 创建一个多模块的项目

依据相对路径输入路径 localhost:8081/demo-web/index.jsp

Maven学习总结7 -- 创建一个多模块的项目

大功告成!

5.导入idea中进行开发

1.打开idea,点击import project

Maven学习总结7 -- 创建一个多模块的项目

2.点击父项目下的pom.xml,点击ok

Maven学习总结7 -- 创建一个多模块的项目

3.一路next后点击finish

Maven学习总结7 -- 创建一个多模块的项目

4.导入成功后如图,可以开始开发了。

Maven学习总结7 -- 创建一个多模块的项目

继续阅读