maven多模块项目搭建,maven多模块构建

首页 > 教育 > 作者:YD1662024-05-17 18:53:58


五、外部 Tomcat 部署 war 包

外部 Tomcat 部署的话,就不能依赖于入口类的 main 函数了,而是要以类似于 web.xml 文件配置的方式来启动 Spring应用上下文。① 在入口类中继承 SpringBootServletInitializer 并实现 configure 方法

public class DemoWebApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(DemoWebApplication.class); } public static void main(String[] args) { SpringApplication.run(DemoWebApplication.class, args); } }

② 之前在 demo-web 引入了 spring-boot-starter-web 的依赖,该依赖包包含内嵌的 Tomcat 容器,所以直接部署在外部 Tomcat 会冲突报错。这里在 demo-web 层中的 pom 文件中重定义 spring-boot-starter-tomcat 依赖包的「 scope 」即可解决该问题。

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>

③ 声明 demo-web 层的打包方式及最终的包名

<packaging>war</packaging> ...省略其余部分... <build> <finalName>demo</finalName> </build>

④ 此时在 demo-web 层目录执行「 mvn clean install 」即可打出一个名为 demo.war 的包。

六、Maven profile 多环境打包

在日常开发中,通常不止一套环境,如开发环境、测试环境、预发环境、生成环境,而每个环境的配置项可能都不一样,这就需要用到多环境打包来解决这个问题。

① 在 demo-web 层的 resources 目录中新建 conf 目录,再在其中按照环境创建相应目录,这里创建开发环境「 dev 」及测试环境「 test 」,再将原本的 application.properties 文件分别拷贝一份到两个目录中,根据环境修改其中的配置项,最后删除原本的配置文件。得到目录结构如下:

|-- resources |-- conf |-- dev | |-- application.properties |-- test |-- application.properties

② 往 demo-web 层的 pom 文件添加 profile 标签

<profiles> <profile> <id>dev</id> <properties> <profile.env>dev</profile.env> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>test</id> <properties> <profile.env>test</profile.env> </properties> </profile> </profiles>

注:其中 dev 为默认激活的 profile ,如要增加其他环境按照上述步骤操作即可。

③ 设置打包时资源文件路径

<build> <finalName>demo</finalName> <resources> <resource> <directory>${basedir}/src/main/resources</directory> <excludes> <exclude>conf/**</exclude> </excludes> </resource> <resource> <directory>src/main/resources/conf/${profile.env}</directory> </resource> </resources> </build>

注:${basedir} 为当前子模块的根目录

④ 打包时通过「 P 」参数指定 profile

mvn clean install -P test


七、自定义 archetype 模板7.1 什么是 archetype 模板?

archetype 是一个 Maven 项目模板工具包,通过 archetype 我们可以快速搭建 Maven 项目。

maven多模块项目搭建,maven多模块构建(13)

每个模板里其实就是附带不同的依赖和插件。一般在公司私服里都会有属于本公司的一套 archetype 模板,里面有着调试好的项目用到的依赖包和版本号。

7.2 创建 archetype 模板

① cd 到项目根目录(即父 pom 文件所在目录)执行 mvn 命令,此时会在项目根目录生成 target 目录,其包含一个名为 generated-sources 的目录

mvn archetype:create-from-project

② 打开「 /target/generated-sources/archetype/src/main/resources/META-INF/maven/ 」目录下的 archetype-metadata.xml 文件,从中清理一些不需要的文件,如 IDEA 的一些文件(.idea、.iml)等。

<fileSet filtered="true" encoding="UTF-8"> <directory>.idea/libraries</directory> <includes> <include>**/*.xml</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8"> <directory>.idea/inspectionProfiles</directory> <includes> <include>**/*.xml</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8"> <directory>.idea/artifacts</directory> <includes> <include>**/*.xml</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8"> <directory>.idea</directory> <includes> <include>**/*.xml</include> </includes> </fileSet>

③ 然后 cd target/generated-sources/archetype/,然后执行 install 命令,在本地仓库的根目录生成 archetype-catalog.xml 骨架配置文件

mvn install

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?> <archetype-catalog xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0 http://maven.apache.org/xsd/archetype-catalog-1.0.0.xsd" xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <archetypes> <archetype> <groupId>com.example.demo</groupId> <artifactId>demo-archetype</artifactId> <version>0.0.1-SNAPSHOT</version> <description>demo</description> </archetype> </archetypes> </archetype-catalog> 7.3 使用 archetype 模板

到本机的工作目录执行 mvn archetype:generate -DarchetypeCatalog=local 从本地 archeType 模板中创建项目

~/Workspace/JAVA $ mvn archetype:generate -DarchetypeCatalog=local [INFO] Scanning for projects... [INFO] [INFO] Using the builder org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder with a thread count of 1 [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Stub Project (No POM) 1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] >>> maven-archetype-plugin:3.0.1:generate (default-cli) @ standalone-pom >>> [INFO] [INFO] <<< maven-archetype-plugin:3.0.1:generate (default-cli) @ standalone-pom <<< [INFO] [INFO] --- maven-archetype-plugin:3.0.1:generate (default-cli) @ standalone-pom --- [INFO] Generating project in Interactive mode [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0) Choose archetype: 1: local -> com.example.demo:demo-archetype (demo) Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : 1 Define value for property 'groupId': com.orz.test Define value for property 'artifactId': test Define value for property 'version' 1.0-SNAPSHOT: : Define value for property 'package' com.orz.test: : Confirm properties configuration: groupId: com.orz.test artifactId: test version: 1.0-SNAPSHOT package: com.orz.test Y: : y [INFO] ---------------------------------------------------------------------------- [INFO] Using following parameters for creating project from Archetype: demo-archetype:0.0.1-SNAPSHOT [INFO] ---------------------------------------------------------------------------- [INFO] Parameter: groupId, Value: com.orz.test [INFO] Parameter: artifactId, Value: test [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] Parameter: package, Value: com.orz.test [INFO] Parameter: packageInPathFormat, Value: com/orz/test [INFO] Parameter: package, Value: com.orz.test [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] Parameter: groupId, Value: com.orz.test [INFO] Parameter: artifactId, Value: test [INFO] Parent element not overwritten in /Users/linjian/Workspace/JAVA/test/test-biz/pom.xml [INFO] Parent element not overwritten in /Users/linjian/Workspace/JAVA/test/test-common/pom.xml [INFO] Parent element not overwritten in /Users/linjian/Workspace/JAVA/test/test-dao/pom.xml [INFO] Parent element not overwritten in /Users/linjian/Workspace/JAVA/test/test-web/pom.xml [INFO] Project created from Archetype in dir: /Users/linjian/Workspace/JAVA/test [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 01:01 min [INFO] Finished at: 2019-01-15T18:51:31 08:00 [INFO] Final Memory: 14M/155M [INFO] ------------------------------------------------------------------------

上面罗列出了所有可用的模板,首先选择使用哪个模板,这里选择 1 ,其次输入「 groupId 」、「 articleId 」、「 version 」及「 package 」,然后输入「 Y 」确认创建,最终项目创建成功。

八、结语

至此 Spring Boot Maven 多模块项目的搭建过程已经介绍完毕。

源码:https://github.com/SymonLin/demo

这篇文章可以说是完全的一篇实战项目干货,感兴趣的朋友们可以关注我,以后也会分享更多实战项目分享哦!

这里是每天都很困的JAVA爱好者,如果您跟我一样热爱JAVA!

那就关注我吧!

才疏学浅请多指教。

上一页1234末页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.