Maven属性与版本管理详细步骤分解

目录
  • 属性
    • 问题引入
    • 解决步骤
  • 配置文件加载属性
  • 版本管理

属性

问题引入

前面我们已经在父工程中的dependencyManagement标签中对项目中所使用的jar包版本进行了统一的管理,但是如果在标签中有如下的内容:

你会发现,如果我们现在想更新Spring的版本,你会发现我们依然需要更新多个jar包的版本,这样的话还是有可能出现漏改导致程序出问题,而且改起来也是比较麻烦。

问题清楚后,我们需要解决的话,就可以参考咱们java基础所学习的变量,声明一个变量,在其他地方使用该变量,当变量的值发生变化后,所有使用变量的地方,就会跟着修改,即:

解决步骤

步骤1:父工程中定义属性

<properties>
    <spring.version>5.2.10.RELEASE</spring.version>
    <junit.version>4.12</junit.version>
    <mybatis-spring.version>1.3.0</mybatis-spring.version>
</properties>

步骤2:修改依赖的version

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
</dependency>

此时,我们只需要更新父工程中properties标签中所维护的jar包版本,所有子项目中的版本也就跟着更新。当然除了将spring相关版本进行维护,我们可以将其他的jar包版本也进行抽取,这样就可以对项目中所有jar包的版本进行统一维护,如:

<!--定义属性-->
<properties>
    <spring.version>5.2.10.RELEASE</spring.version>
    <junit.version>4.12</junit.version>
    <mybatis-spring.version>1.3.0</mybatis-spring.version>
</properties>

配置文件加载属性

Maven中的属性我们已经介绍过了,现在也已经能够通过Maven来集中管理Maven中依赖jar包的版本。但是又有新的需求,就是想让Maven对于属性的管理范围能更大些,比如我们之前项目中的jdbc.properties,这个配置文件中的属性,能不能也来让Maven进行管理呢?

答案是肯定的,具体的实现步骤为:

步骤1:父工程定义属性

<properties>
   <jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url>
</properties>

步骤2:jdbc.properties文件中引用属性

在jdbc.properties,将jdbc.url的值直接获取Maven配置的属性

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=${jdbc.url}
jdbc.username=root
jdbc.password=***********

步骤3:设置maven过滤文件范围

Maven在默认情况下是从当前项目的src\main\resources下读取文件进行打包。现在我们需要打包的资源文件是在maven_02_ssm下,需要我们通过配置来指定下具体的资源目录。

<build>
    <resources>
        <!--设置资源目录-->
        <resource>
            <directory>../maven_02_ssm/src/main/resources</directory>
            <!--设置能够解析${},默认是false -->
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

说明:directory路径前要添加../的原因是maven_02_ssm相对于父工程的pom.xml路径是在其上一层的目录中,所以需要添加。

修改完后,注意maven_02_ssm项目的resources目录就多了些东西,如下:

步骤4:测试是否生效

测试的时候,只需要将maven_02_ssm项目进行打包,然后观察打包结果中最终生成的内容是否为Maven中配置的内容。

上面的属性管理就已经完成,但是有一个问题没有解决,因为不只是maven_02_ssm项目需要有属性被父工程管理,如果有多个项目需要配置,该如何实现呢?

方式一:

<build>
    <resources>
        <!--设置资源目录,并设置能够解析${}-->
        <resource>
            <directory>../maven_02_ssm/src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>../maven_03_pojo/src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
        ...
    </resources>
</build>

可以配,但是如果项目够多的话,这个配置也是比较繁琐

方式二:

<build>
    <resources>
        <!--
			${project.basedir}: 当前项目所在目录,子项目继承了父项目,
			相当于所有的子项目都添加了资源目录的过滤
		-->
        <resource>
            <directory>${project.basedir}/src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

说明:打包的过程中如果报如下错误:

原因就是Maven发现你的项目为web项目,就会去找web项目的入口web.xml[配置文件配置的方式],发现没有找到,就会报错。

解决方案1:在maven_02_ssm项目的src\main\webapp\WEB-INF\添加一个web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
</web-app>

解决方案2: 配置maven打包war时,忽略web.xml检查

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.2.3</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>

上面我们所使用的都是Maven的自定义属性,除了${project.basedir},它属于Maven的内置系统属性。

在Maven中的属性分为:

  • 自定义属性(常用)
  • 内置属性
  • Setting属性
  • Java系统属性
  • 环境变量属性

具体如何查看这些属性:

在cmd命令行中输入mvn help:system

具体使用,就是使用 ${key}来获取,key为等号左边的,值为等号右边的,比如获取红线的值,对应的写法为 ${java.runtime.name}

版本管理

关于这个版本管理解决的问题是,在Maven创建项目和引用别人项目的时候,我们都看到过如下内容:

这里面有两个单词,SNAPSHOT和RELEASE,它们所代表的含义是什么呢?

我们打开Maven仓库地址https://mvnrepository.com/

在我们jar包的版本定义中,有两个工程版本用的比较多:

SNAPSHOT(快照版本)

  • 项目开发过程中临时输出的版本,称为快照版本快照版本
  • 会随着开发的进展不断更新

RELEASE(发布版本)

  • 项目开发到一定阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的
  • 即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本

除了上面的工程版本,我们还经常能看到一些发布版本:

  • alpha版:内测版,bug多不稳定内部版本不断添加新功能
  • beta版:公测版,不稳定(比alpha稳定些),bug相对较多不断添加新功能
  • 纯数字版

对于这些版本,大家只需要简单认识下即可。

到此这篇关于Maven属性与版本管理详细步骤分解的文章就介绍到这了,更多相关Maven属性与版本内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 聊聊maven与jdk版本对应关系

    目录 maven与jdk版本对应关系 解决方式(windows) maven和java的jdk版本不同 怎么改成一样的呢? maven与jdk版本对应关系 很多搬砖的小伙伴在使用maven项目打包的时候,都会遇到下面的编译问题: Caused by: java.lang.UnsupportedClassVersionError: org/apache/maven/plugin/compiler/CompilerMojo : Unsupported major.minor version 51.0

  • 基于Maven pom文件中属性变量总结

    目录 Maven pom文件属性变量总结 1.内置属性 2.POM属性 3.自定义属性 Maven pom变量定义 定义变量并赋值 Maven pom文件属性变量总结 1.内置属性 ${basedir}表示当前项目根目录 ${version}表示当前项目版本 2.POM属性 ${project.artifactId} 等价于元素的值 个人理解,本质上每个标签底层是通过对象的引用实现,也同样存在继承特性(仅仅是个人理解,供参考). 以此类推,可以发现很多这一类的属性定义. 类似地 ${projec

  • Maven 项目生成jar运行时提示“没有主清单属性”

    新建了一个Maven的项目,mvn compile和mvn package后生成了jar文件,然后直接到target目录下去执行java -jar xxx.jar命令运行jar包时出现了"xxx.jar没有主清单属性"的错误提示. 根据我的经验,肯定是没有找到入口类(即main函数所在的类),在pom.xml里面加上入口类的配置就好了!第一次直接用maven来打包jar,记录一下. 修改pom.xml文件,添加如下配置项即可: <build> <plugins>

  • 如何获取Maven项目的版本号

    目前大多数Spring Boot项目都会打成Jar包,所以什么War包.Ear包的就先不摸索了. Jar包的秘密 我们先解压一个Spring Boot应用Jar包看看里面能不能找到一些蛛丝马迹.在META-INF文件夹中找到了两个相关的东西,一个是MANIFEST.MF: Manifest-Version: 1.0 Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx Implementation-Title: spring-boot-versi

  • Maven打包jar包没有主属性问题解决方案

    Spring boot项目结合docker容器用,打了个jar包,启动的时候竟然说:no main manifest attribute, in target/*.jar 但也不是所有的微服务的jar包都不能启动,比对一下这两个包对应的打包插件 可以用的长这样: <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artif

  • Maven属性与版本管理详细步骤分解

    目录 属性 问题引入 解决步骤 配置文件加载属性 版本管理 属性 问题引入 前面我们已经在父工程中的dependencyManagement标签中对项目中所使用的jar包版本进行了统一的管理,但是如果在标签中有如下的内容: 你会发现,如果我们现在想更新Spring的版本,你会发现我们依然需要更新多个jar包的版本,这样的话还是有可能出现漏改导致程序出问题,而且改起来也是比较麻烦. 问题清楚后,我们需要解决的话,就可以参考咱们java基础所学习的变量,声明一个变量,在其他地方使用该变量,当变量的值

  • 详解使用Maven开发Web应用详细步骤

    开发 Web 应用的思路 实现一个简单的 JSP/Servlet. 搭建创建 Web 应用工程的环境. 创建 Web 应用工程. Web 应用工程的目录结构. 结合 Web 服务器,发布 Web 应用. 体验 Web 应用的开发和发布测试过程. 实现经典的 MVC 版本的用户 CRUD. 熟练第 1 步中的几个方面. 结合典型的业务逻辑,实现 CRUD. 实现 Web 版 HelloWorld 1)选择 File→New→Others 命令.选择 Create Maven Project 命令,

  • 详解idea从git上拉取maven项目详细步骤

    刚从Eclipse转Intellij,对于它的各种操作也是一脸懵逼,但觉得使用起来还不错,今天就说一下我用Idea导入git中的Maven项目的详细步骤: 1. 首先打开Intellji Idea,选择check out from Version Control,选择Git(图片上选到gitHub了,抱歉抱歉). 2. 上一步完成后会出现如下界面,该界面有三个参数,第一个填的是你git的Url,第二个是你要建的项目的路径,第三个当然是存放的目录的名称啦,没什么含量. 3. 点击clone会出现如

  • IDEA配置Maven的超详细步骤

    目录 一.Maven下载&环境配置 1.下载Maven 2.解压 3.配置环境变量 4.测试 二.更改Maven中的设置 1.编辑settings.xml 2.配置本地仓库 3.更换默认更新源 4.添加JDK的版本 三.在IDEA中配置Maven 1. 打开IDEA,新建一个空项目: 2. 打开设置找到Maven,设置Maven主路径.用户设置文件.本地仓库的地址: 3. 进到Maven导入(importing)设置,在导入程序的VM选项中添加: 4. 创建一个新模块: 四.测试 1.在pom.

  • IntelliJ IDEA 构建maven多模块工程项目(详细多图)

    食用前须知 本文以a b c 三个模块为例来搭建项目,以达到通俗易懂的初衷 模块a -– 基模块,就是人们常说的parent 模块b -– 其他模块都需要使用的一些工具,比如时间工具,json工具等 模块c -– 项目主要的内容,一般为聚合工程 先简单讲一下maven的一些特点 继承 这个可以理解为java中的继承类似,父类定义的东西,子类如果你想用就拿过来用就可以; 依赖 依赖就相当于我们java中的导包,二者有着异曲同工之妙; 你想用的东西只需要告诉maven它在哪就可以,它会自动帮你找过来

  • Spring中基于xml的AOP的详细步骤

    1.Aop 全程是Aspect Oriented Programming 即面向切面编程,通过预编译方式和运行期动态代理实现程序功能的同一维护的一种技术.Aop是oop的延续,是软件开发中的 一个热点,也是Spring框架中一个重要的内容.是函数式编程的一个衍生范例,利用Aop可以对业务逻辑各个部分进行分割,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用行,提高了开发效率.简单的说就是把我们程序中的重复代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上已有的方法进

  • IDEA 2020 配置Tomcat服务器的详细步骤

    IDEA 2020 配置Tomcat的步骤如下所示: 第一步 下载Tomcat 官网链接:http://tomcat.apache.org/ 选择download,找到自己所要的版本,下载对应版本的Tomcat. 跟我之前的文章一样,我依旧推荐下载免安装的压缩包. 有zip和exe两种格式的,zip(64-bit Windows zip(pgp,md5,sha1))是免安装版的,exe(32-bit/64-bit Windows Service installer(pgp,md5,sha1))是

  • IDEA 集成 docker 实现远程部署的详细步骤

    1. docker 服务器开启远程访问 登录 docker 所在的远程服务器,使用命令 vim /usr/lib/systemd/system/docker.service 修改配置文件,需注意,修改时确认自己的账户拥有相应权限 主要操作是找到 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 这一行,注释掉,重新添加一行,在后面新增-H tcp://0.0.0.0:2375表示打开2

  • maven中pom.xml详细介绍

    POM 代表工程对象模型.它是使用 Maven 工作时的基本组建,是一个 xml 文件.它被放在工程根目录下,文件命名为 pom.xml. POM 包含了关于工程和各种配置细节的信息,Maven 使用这些信息构建工程. POM 也包含了目标和插件.当执行一个任务或者目标时,Maven 会查找当前目录下的 POM,从其中读取所需要的配置信息,然后执行目标.能够在 POM 中设置的一些配置如下: project dependencies plugins goals build profiles pr

  • Maven 安装目录的详细介绍

    Maven 安装目录的详细介绍 前言: Maven 作为一款优秀的构建工具.依赖管理工具和项目管理工具,已经被业界广泛应用,我们可以利用 Maven 对项目进行清理.测试.构建.打包.部署等操作.在此,我们就 Maven 的安装目录,进行解读. 正文 从 Apache Maven 官网下载 Maven 的安装包并解压之后,进入安装目录,我们会看到如下内容: bin boot conf lib LICENSE.txt NOTICE.txt README.txt 接下来,分别解读以上目录的内容及功能

随机推荐