路由侠怎么做网站映射,家装设计软件哪个好用,欧洲做塑料交易网站,中山品牌网站建设推广文章目录1.前言2.hello-world2.1.Archetype 创建2.2.使用 IDE 创建2.3.Maven的目录结构3.pom的基本组成3.1.Maven坐标的概念与规则3.2.版本号规则2.3.打包成可运行的JAR4.结语1.前言
本系列文章记录了从0开始到实战系统了解 Maven 的过程#xff0c;Maven 系列历史文章#…
文章目录1.前言2.hello-world2.1.Archetype 创建2.2.使用 IDE 创建2.3.Maven的目录结构3.pom的基本组成3.1.Maven坐标的概念与规则3.2.版本号规则2.3.打包成可运行的JAR4.结语1.前言
本系列文章记录了从0开始到实战系统了解 Maven 的过程Maven 系列历史文章 一5分钟做完 Maven 的安装与配置 在上一篇文章中我们已经快速的安装并配置好了 Maven 的环境现在就可以开始将 Maven用起来了在开始创建 Maven 项目之前先介绍一个本篇文中涉及到的内容包括
Maven 的快速开始Maven 项目的目录结构POM 文件的基本组成简要版更详细的介绍会随着本专题的推进慢慢展开坐标、版本号、以及SNAPSHOT的含义Maven 自带插件的使用
接下来我们就开始吧
2.hello-world
首先我需要创建一个 Maven 的项目创建项目的方式多种多样例如手动创建 Maven 的目录结构与 pom 文件、使用 Archetype 生成Maven 的项目、或者直接使用 IDE 进行创建。
2.1.Archetype 创建
Archetype 是 Maven 用来初始化项目骨架的插件Maven 有很多自带的插件很多时候我们都意识不到自己在使用由于我们使用的是 Maven3可以直接运行下面的指令
mvn archetype:generate第一次运行这个指令的时候会从中央仓库中下载插件所以会看到控制台一长串的输出直到 这里的左边那一串数字有点类似于需要使用的 Maven项目目标右边默认的 1982 指的是maven-archetype-quickstart我们可以在控制台中找到它 如果不需要使用其他模板的话直接回车即可接下来回提示输入 groupIdartifactIdversion 等这个其实就是生成的 POM 中需要的坐标数据此处将 groupId 填写为 com.ls.mavendemo artifactId 填写为 hello-world在下面POM的基本组成中会解释为什么再一顿回车之后项目就创建成功了。
2.2.使用 IDE 创建
在实际的开发中我们可能更多的会使用IDE来生成 Maven 项目图形化的界面会更加友好例如使用 Idea 来创建 File - new - project 然后就可以输入 groupIdartifactIdversion 几个参数了 点击Next - Finish 项目就创建完成了。 2.3.Maven的目录结构 忽略掉 .idea 文件夹上图中的剩余部分就是 Maven 的目录结构了这种目录结构是 Maven 的规范所规定的在 src 下面会包含 main 和 test两个文件夹两者代表了不同的分工环境
main写功能代码test写测试代码
在这里面的 java 指的是放置代码的文件夹同样的在 java 的同级目录下往往还会有一个 resources 文件夹用于放置项目中使用到的配置文件、模板文件等静态文件例如xml、properties等。
3.pom的基本组成
打开 pom.xml 可以看到里面有大概有70多行配置
?xml version1.0 encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.ls.mavendemo/groupIdartifactIdhello-world/artifactIdversion1.0-SNAPSHOT/versionnamehello-world/name!-- FIXME change it to the projects website --urlhttp://www.example.com/urlpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.7/maven.compiler.sourcemaven.compiler.target1.7/maven.compiler.target/propertiesdependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.11/versionscopetest/scope/dependency/dependenciesbuildpluginManagement!-- 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 --pluginartifactIdmaven-clean-plugin/artifactIdversion3.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 --pluginartifactIdmaven-resources-plugin/artifactIdversion3.0.2/version/pluginpluginartifactIdmaven-compiler-plugin/artifactIdversion3.8.0/version/pluginpluginartifactIdmaven-surefire-plugin/artifactIdversion2.22.1/version/pluginpluginartifactIdmaven-jar-plugin/artifactIdversion3.0.2/version/pluginpluginartifactIdmaven-install-plugin/artifactIdversion2.5.2/version/pluginpluginartifactIdmaven-deploy-plugin/artifactIdversion2.8.2/version/plugin!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle --pluginartifactIdmaven-site-plugin/artifactIdversion3.7.1/version/pluginpluginartifactIdmaven-project-info-reports-plugin/artifactIdversion3.0.0/version/plugin/plugins/pluginManagement/build
/project我们先把这个文件改纯净一点删除一部分内容
build - pluginManagement 里面的内容是Maven会使用到的默认插件这里不需要进行配置先删除掉。url 是建立网站需要的信息我们现在不需要建站。properties是配置的变量这个常用于统一管理依赖包的版本后续的文章中会将这里暂时用不到。
下面是清理过后的 pom.xml 文件
?xml version1.0 encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.ls.mavendemo/groupIdartifactIdhello-world/artifactIdversion1.0-SNAPSHOT/versionnamehello-world/namedependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.11/versionscopetest/scope/dependency/dependencies/project先看一下各个标签的含义
project POM 的根元素定义了一些POM相关的规范。 modelVersion: POM版本号我们用的是 Maven3 这里只能是4.0.0groupId artifactId version项目的坐标用于确定一个唯一的项目下面会详细提到name当前项目的名称dependencies当前项目引入的依赖dependency单个需要引入的具体的依赖包scope依赖的范围常见的有 compile 和 test不同的范围起到包隔离的作用这个在后面依赖相关的文章中详细讲
3.1.Maven坐标的概念与规则
在一个三维的空间坐标系中我们可以通过 x,y,z 三个方向的坐标确定做坐标系上的唯一一个点。 Maven的坐标概念与之类似在建立Maven仓库的时候我们也可以通过 groupId artifactId version 的值来确定唯一一个构件下面依次来看看这三者的填写规则。
groupId指的是当前构建隶属的实际项目一般是 公司的网址倒序 项目名artifactId一般是指的当前项目中的其中一个模块version当前项目的版本号
以 SpringBoot 为例
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactIdversion2.7.8/version
/dependencyorg.springframework.boot 就是 Spring 所在公司的 SpringBoot 项目spring-boot-starter这个项目的其中一个模块版本号为2.7.8。 同理如果我们要引入Web模块自然就应该是
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdversion2.7.8/version
/dependency为什么 groupId 不能直接是一个组织呢要细化到一个项目呢 一般来说一个公司、组织上不会只有一个项目如果 groupId 直接占用了组织那项目名就只有放到 artifactId 中了但是一个项目也有可能会有过个模块模块名就没有地方放了。 所以我们在实际开发中创建一个 Maven 项目的时候可以尽可能的遵守这样的约定。
3.2.版本号规则
看到这里相信大家已经注意到了上面引入的 SpringBoot 的版本号是 3位数而自己创建的 hello-world 项目版本号只有 2位并且后面还有一个 SNAPSHOT。
Maven 的版本号规则实际上也是业界的通过规则它的定义方式如下
{主版本号}.{次版本号}.{增量版本号}-{里程碑版本}主版本号一般是指的当前的项目有了重大的架构变动版本之间几乎完全不兼容例如最近出的 SpringBoot3 就已经放弃了Java8如果不升级 JDK的话还是只能使用SpringBoot2次版本号一般是指的项目的迭代版本这种版本会修复大量的bug带来一些小的新特性等但是没有什么架构上的重大变化。增量版本号一般是用于修复一些紧急bug改动量很小时可以使用增量版本号。里程碑版本就是项目的当前版本处于一个什么样的阶段了常见的里程碑版本有 SNAPSHOTalphabetareleaseGA 等。 在里程碑的版本中标注SNAPSHOT的为开发版此时会存在大量的代码变动alpha和beta分别对应的是内测版与公测版这三个版本都是属于不稳定版本使用的时候非常容易踩坑所以一般只用的demo体验在正式环境中不能使用。 release和GA都属于是稳定的正式版本可以在正式环境中使用。
下面是SpringBoot的一些版本号可以体验一下 这里需要再提一嘴SNAPSHOT 在 Maven仓库中有特别的含义处于这个里程碑版本的项目可以多次install到仓库中每一次都会覆盖前一次生成的包但是非 SNAPSHOT 的版本是不能覆盖的每次install都需要修改版本号。
如果不理解这段话可以继续关注后续的文章会讲到如何将项目打包到本地仓库以及推送到私服中。
2.3.打包成可运行的JAR
我们在开发完代码之后需要将代码打包到测试环境中测试Maven 提供了项目构建相关的插件我们只需要直接使用即可。单项目的打包非常简单我们可以进入到项目所在的根目录中pom所在目录执行下面的指令。
mvn clean packageclean清空上一次生成的target目录避免最新修改的代码没有被打包到新版本中造成一些意外的情况。package将当前代码打成一个可以执行的jar包。
执行完成之后在src 目录下会出现一个同级的target目录里面就会出现一个满足当前项目坐标的jar包 我们通过 java -jar 运行这个 jar 包会发现无法运行 hello-world-1.0-SNAPSHOT.jar中没有主清单属性 如何才能运行呢 我们需要执行的是这个App类里面的main方法而正常的打包方式没有指定执行它所以我们需要通过shade插件来指定一下在pom.xml中加入插件
buildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-shade-plugin/artifactIdversion3.2.4/versionexecutionsexecutionphasepackage/phasegoalsgoalshade/goal/goalsconfigurationtransformerstransformerimplementationorg.apache.maven.plugins.shade.resource.ManifestResourceTransformermainClasscom.ls.mavendemo.App/mainClass/transformer/transformers/configuration/execution/executions/plugin/plugins
/build在 mainClass 中指定需要运行的类的全类名 再次重试打包运行运行成功。 4.结语
本篇讲述了如何使用 Maven 自带的插件以及IDE 创建、打包、运行项目同时介绍了 pom.xml 文件的基本组成以 SpringBoot为例介绍了坐标和版本号的使用规则。
到目前为止已经可以使用Maven来进行一些简单的开发工作了但距在公司中与同事一起协作开发较大的项目还有一定的差距可以继续关注本专题的后续文章。
下一篇将会讲述 Maven 仓库的使用以及 Maven 私服的安装和使用。 如果觉得本文有帮助的话可以帮忙点点赞哦