首页 > 其他分享 >Maven项目属性与版本管理

Maven项目属性与版本管理

时间:2022-12-06 21:15:58浏览次数:57  
标签:maven jdbc Maven version 版本 属性

1. 属性

1.1 问题分析

我们先来分析一下问题:

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

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

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

1.2 解决步骤

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

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <spring.version>5.2.12.RELEASE</spring.version>
        <javax.servlet.api>3.1.0</javax.servlet.api>
        <mybatis>3.5.10</mybatis>
        <mysql.connector.java>8.0.30</mysql.connector.java>
        <jackson.databind>2.9.8</jackson.databind>
        <mybatis.spring>2.0.7</mybatis.spring>
        <druid>1.2.11</druid>
        <lombok>1.18.24</lombok>
        <junit>4.13.2</junit>
    </properties>

步骤2:修改依赖的version

    <dependencies>
        <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>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${javax.servlet-api.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql-connector-java.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson-databind.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>${mybatis-spring.version}</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <!--定义依赖管理-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

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

<!--定义属性-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <spring.version>5.2.12.RELEASE</spring.version>
        <javax.servlet-api.version>3.1.0</javax.servlet-api.version>
        <mybatis.version>3.5.10</mybatis.version>
        <mysql-connector-java.version>8.0.30</mysql-connector-java.version>
        <jackson-databind.version>2.9.8</jackson-databind.version>
        <mybatis-spring.version>2.0.7</mybatis-spring.version>
        <druid.version>1.2.11</druid.version>
        <lombok.version>1.18.24</lombok.version>
        <junit.version>4.13.2</junit.version>
    </properties>

2. 配置文件加载属性

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

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

步骤1:父工程定义属性

<properties>
   <jdbc.url>jdbc:mysql://localhost:3306/mybatis</jdbc.url>
    <jdbc.driver>com.mysql.cj.jdbc.Driver</jdbc.driver>
    <jdbc.username>root</jdbc.username>
    <jdbc.password>root</jdbc.password>
</properties>

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

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

jdbc.driver=${jdbc.driver}
jdbc.url=${jdbc.url}
jdbc.username=${jdbc.username}
jdbc.password=${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_ssm_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系统属性
  • 环境变量属性
属性分类 引用格式 示例
自定义属性 ${自定义属性名} ${spring.version}
内置属性 ${内置属性名} ${basedir}、${version}
Setting属性 ${Setting.属性名} ${settings.localRepository}
Java系统属性 ${系统属性分类.系统属性名} ${user.home}
环境变量属性 ${env.环境变量属性} ${env.JAVE_HOME}

具体如何查看这些属性:

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

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

3. 版本管理

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

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

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

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

  • SNAPSHOT(快照版本)
    • 项目开发过程中临时输出的版本,称为快照版本
    • 快照版本会随着开发的进展不断更新
  • RELEASE(发布版本)
    • 项目开发到一定阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的
    • 即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本

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

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

项目代码

标签:maven,jdbc,Maven,version,版本,属性
From: https://www.cnblogs.com/dcbut/p/16960496.html

相关文章

  • idea2022之后的版本打不开的原因
    1.目前我这边遇到的是之前安装了旧版本且是用cracker激活的,然后新版本它会自动迁移旧版本的一些配置,导致用了旧版本的cracker然后起不来;可以去掉,2022之后的版本应该是在Ap......
  • Mybatiplus通用3.5.1版本及其以上的代码生成器工具类
    Mybatiplus通用3.5.1版本及其以上的代码生成器工具类packagecom.gton.util;importcom.baomidou.mybatisplus.annotation.FieldFill;importcom.baomidou.mybatisplus......
  • 【jmeter基本配置及属性介绍】
    一、jmeter切换为中文1、从图像界面,options》chooselanguage》Chinese-----只能临时修改图像界面语言,重启后还会变为英文2、持久化为中文配置:将jmeter安装目录下b......
  • CentOS下nginx版本平稳升级记录
    起因:系统漏洞扫描出高危漏洞:CVE-2019-9513/CVE-2019-9511/CVE-2019-9516,需升级nginx。下载地址:https://nginx.org/en/download.html,选择了稳定版本1.22.1。将下载......
  • uni-app核心基础 uni-app属性绑定和事件绑定
    1属性绑定元素数据的绑定不能直接使用插值表达式,例如绑定元素的title属性、图片的src属性等,要使用v-bind进行属性绑定。元素添加属性使用v-bind绑定,简写成:使用图片要......
  • 转 vue中组件的props属性(详)
    别人责备回复的,还是比不责备回复的,好很多倍。就是至少回复了的。工作有自我价值感。vue中组件的props属性(详)https://blog.csdn.net/qq_41579104/article/details/1209974......
  • input的file一些实用属性
      file自带一些有用的属性,今天整理一下html:1.multiple:是否多选,如果在html上面写上multiple="multiple"或者multiple就可以实现多选2.accept:文......
  • 项目中如何安装同一依赖的两个版本
    背景如项目中有一个1.0版本的antd库,我们不得已必须使用更高版本的antd方案我们可以使用npm的别名,安装不同版本的库如://安装npminstallantd-v3@npm:[email protected]......
  • 第二节-创建数组与属性-checkpoint
    创建ndarray对象通过NumPy的内置函数array()可以创建ndarray对象,其语法格式如下:numpy.array(object,dtype=None,copy=True,order=None,subok=False,ndmin......
  • Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0
    tomcat上部署项目时报错,可以执行一次clean,然后再install就可以了然后在网上开始各种搜索,出现的解决办法一大堆,但是一个都不行。最后,才发现猫腻,编译错误原因是项目内的tar......