Maven学习总结7 -- 创建一个多模块的项目
创建一个多模块的项目
1.设计
首先是设计工作,目前的项目架构的搭建通常要用到分层思想,我目前接触的java-web项目一般将项目分为model(域模型层)、dao(数据访问层),service(业务逻辑层),web(视图层)。分层思想使得各层之间的职责明确,利于管理和维护。
2.项目创建
我们使用maven命令的方式来创建项目(不清楚的可以参考: https://blog.****.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
创建成功,由于这个项目是作为父项和聚合器的,我们可以把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的项目。
进入demo-model,可以看到目录结构如下。
我们再次查看父项目的pom文件,发现maven自动添加了一个模块
修改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
创建完成后
进入该文件夹,
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.
到这里,我们的项目已经简单的搭建完毕了。
3.打包
我们查看一下父项目的pom文件
<modules>
<module>demo-model</module>
<module>demo-dao</module>
<module>demo-service</module>
<module>demo-web</module>
</modules>
maven已经自动的将几个项目组成模块列表了
接下来我们来测试一下使用多模块 是否能够直接将这四个项目打包
跳转到父项目路径下,执行
mvn package
执行成功
由于java-web项目以war的形式生成war包来运行整个项目,我们查看web项目目录,在web项目target目录下生成了一个war 包。内含我们这个多模块项目的输出内容。我们把该war包部署到本地的tomcat服务器上。
4.项目部署到tomcat服务器
将war包复制到tomcat安装目录的webapps目录下
跳转到tomcat源目录下的bin目录下,启动startup.bat
访问该项目
启动成功后,查看webapps下的demo-web目录
依据相对路径输入路径 localhost:8081/demo-web/index.jsp
大功告成!
5.导入idea中进行开发
1.打开idea,点击import project
2.点击父项目下的pom.xml,点击ok
3.一路next后点击finish
4.导入成功后如图,可以开始开发了。