精华内容
下载资源
问答
  • maven:读取程序版本号的三种方案

    万次阅读 2018-01-09 15:49:29
    在应用项目中,如果应用程序需要获取当前程序的版本号,可以读取”/META-INF/maven/${groupId}/${artifactId}/pom.properties“,获取maven生成的版本信息。 当然前提用应用程序在运行时得知道自己的groupId和...

    方案1

    在应用项目中,如果应用程序需要获取当前程序的版本号,可以读取”/META-INF/maven/${groupId}/${artifactId}/pom.properties“,获取maven生成的版本信息。
    当然前提用应用程序在运行时得知道自己的groupIdartifactId,否则无法定位路径。

    pom.properties内容示例

    #Created by Apache Maven .5.0
    version=1.0.4-SNAPSHOT
    groupId=com.gitee.l0km
    artifactId=facelog-service

    这种方法很简单,但也有缺点:
    貌似这种方法只能获取maven默认定义${project.version},无法加入自定义的信息。

    方案2

    还有一个方案就是直接将版本信息写入MANIFEST.MF。通过java.util.jar.Manifest来读取解析MANIFEST.MF来获取版本号。
    如下增加buildnumber-maven-plugin插件,并给maven-jar-plugin插件指定写入MANIFEST.MF的参数。

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
        <version>1.2</version>
        <executions>
            <execution>
                <goals>
                    <goal>create</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.0.2</version>
        <configuration>
            <archive>
                <manifestEntries>
                    <!-- 项目版本号 -->
                    <Project-Version>${project.version}</Project-Version>
                    <!-- buildnumber插件提供的 SCM(git/svn等)版本号 -->
                    <Scm-Version>${buildNumber}</Scm-Version>
                    <!-- 时间戳 -->
                    <Timestamp>${maven.build.timestamp}</Timestamp>
                </manifestEntries>
            </archive>
        </configuration>
    </plugin>

    方案3

    前面两种方案,都需要将应用程序打成jar包才能读取版本信息。
    那么程序在开发调试的时候,并没有生成pom.properties,和MANIFEST.MF,也就无法读取版本信息了。
    所以另一种思路就是用 template-maven-plugin插件让maven自动生成一个包含版本信息的代码如Version.java。这样任何时候,程序都能很方便的知道自己的版本号了。

    模板

    首先需要一个代码模板Version.java,示例如下:

    package net.gdface.facelog.service;
    public final class Version {
        /** project version */
        public static final String VERSION = "${project.version}";
        /** SCM(git) revision */
        public static final String SCM_REVISION= "${buildNumber}";
        /** SCM branch */
        public static final String SCM_BRANCH = "${scmBranch}";
        /** build timestamp */
        public static final String TIMESTAMP ="${buildtimestamp}";
    }

    模板放在/src/main/java/java-templates/${package_of_template}/

    原本在模板文件中用maven内置变量${maven.build.timestamp}做时间戳,实际运行并没有被正确替换,不知道原因。所以改为使用buildnumber-maven-plugin插件(goal create-timestamp)生成的时间戳${buildtimestamp}

    插件

    然后修改pom.xml增加 template-maven-plugin插件和buildnumber-maven-plugin插件

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
        <version>1.4</version>
        <executions>
            <execution>
                <id>bn1</id>
                <goals>
                    <!-- 创建${buildNumber} -->
                    <goal>create</goal>
                </goals>
            </execution>
            <execution>
                <id>bn2</id>
                <goals>
                    <!-- 创建时间戳${buildtimestamp} -->
                    <goal>create-timestamp</goal>
                </goals>
                <configuration>
                    <!-- 指定时间戳变量名 -->
                    <timestampPropertyName>buildtimestamp</timestampPropertyName>
                    <!-- 指定日期格式 -->
                    <timestampFormat>yyyy-MM-dd HH:mm:ss</timestampFormat>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>templating-maven-plugin</artifactId>
        <version>1.0.0</version>
        <executions>
            <execution>
                <id>filter-src</id>
                <goals>
                    <goal>filter-sources</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

    template-maven-plugin插件会将/src/main/java/java-templates/文件夹下的所有模板中的${xxx}占位符都用maven中同名的变量替换一遍,
    生成的Version.java${project.build.directory}/generated-sources/${package_of_template}下,并且该文件夹会自动成为源码文件夹加入编译过程。

    参考资料

    《Generate a Version.java file in Maven》

    展开全文
  • 最近在ubuntu下开发一个嵌入式系统下的项目,离开java平台下maven自动管理版本号升级,非常不习惯,升级一个版本要改代码,还要提交,还要打标签,好麻烦。 考虑到后续项目版本管理的重要性,我也希望我的c代码中能...

    最近在ubuntu下开发一个嵌入式系统下的项目,离开java平台下maven自动管理版本号升级,非常不习惯,升级一个版本要改代码,还要提交,还要打标签,好麻烦。
    考虑到后续项目版本管理的重要性,我也希望我的c代码中能像在maven下开发java程序能自动将项目的版本号升级。

    于是自己写了一个脚本,完成对项目版本号的自动升级,提交。
    实现原理也不复杂,主要就是利用正则表达式从源码中读取固定格式(MAJOR.MINOR.PATCH[.DESC][-SNAPSHOT])的版本信息,然后自动将版本号加1,再用sed写回源码,并提交git仓库,同时打上版本标签(tag).有了这个脚本,只要执行一次,版本号就会自动加1(也可以手工输入版本号)。

    如下是包含版本信息的源码version.h, //!开始的行定义了一些参数,这些参数的目的是告诉执行脚本如何从源码中获取版本信息的正则表达式

    #ifndef FLCONFIG_VERSION_H_
    #define FLCONFIG_VERSION_H_
    
    // 用于 verrel.sh 的参数定义 以//!起始
    //! @TAG_PREFIX@
    //! @VERSION_REG@ (FL_VERSION\s+)(\S*)(.*)
    //! @VERSION_MAJOR_REG@ (FL_VERSION_MAJOR\s+)(\S*)?(.*)?
    //! @VERSION_MINOR_REG@ (FL_VERSION_MINOR\s+)(\S*)?(.*)?
    //! @VERSION_PATCH_REG@ (FL_VERSION_PATCH\s+)(\S*)?(.*)?
    //! @VERSION_DESC_REG@ (FL_VERSION_DESC\s+)(\S*)?(\s*,.*)
    //! @BEANCH_REG@ (FL_SCM_BRANCH\s+)(\S*)?(\s*,.*)
    //! @COMMIT_REG@ (FL_SCM_COMMIT\s+)(\S*)?(\s*,.*)
    
    // 版本号
    #define FL_VERSION 0.0.2-SNAPSHOT
    
    #define FL_VERSION_MAJOR 0
    #define FL_VERSION_MINOR 0
    #define FL_VERSION_PATCH 2
    #define FL_VERSION_DESC ,
    
    // 分支名
    #define FL_SCM_BRANCH master,
    // commit_id
    #define FL_SCM_COMMIT 37ca318,
    
    #endif /* FLCONFIG_VERSION_H_ */
    

    脚本实现verrel.sh

    #! /bin/bash
    
    ## 自动修改包含版本信息源码中的版本,并提交git仓库,生成版本标签,以及下一个快照版本号
    ## 参照maven对版本的定义,后缀为-SNAPSHOT的为开发阶段的不稳定版本
    ## 版本号格式为 MAJOR.MINOR.PATCH[.DESC][-SNAPSHOT],参见脚本中 RLV_FMT_REG 正则表达式定义
    ## 运行前要确保所有的修改都已经提交
    
    # 获取代码中的变量定义
    function get_var(){
        echo $(sed -nr "s/^\s*\/\/!\s*$1\s*(\S*).*$/\1/p" $2)    
    }
    
    # 根据代码中的变量定义的正则表达式获取代码中的变量定义的值
    function get_value_by_reg(){
        echo $(sed -nr "s/^.*$1.*/\2/p" $2)    
    }
    
    # 检查版本号格式是否正确
    function check_version_format(){
        if [[ -n "$1" && -z $(echo $1 | grep -E "$RLV_FMT_REG") ]] ;
        then
            echo "ERROR:invalid version string format(版本号格式错误),example: 1.0.0 OR 1.0.0.beta"
            exit -1
        fi
    }
    
    sh_folder=$(dirname $(readlink -f $0))
    
    # 包含版本信息的源码文件,根据项目实际情况修改之
    version_src=$sh_folder/src/flconfig/version.h
    
    # git分支名
    branch=`git branch | grep "*"`
    branch=${branch/* /}
    # 当前提交id
    commit_id=`git rev-parse --short HEAD`
    
    echo branch=$branch
    echo commit_id=$commit_id
    
    # 版本号格式定义
    # release版本号格式
    RLV_FMT_REG="([0-9]+)\.([0-9]+)\.([0-9]+)(\.([[:alnum:]]+))?"
    # 开发快照版本号格式(多一个-SNAPSHOT后缀)
    SS_VFMT_REG=$RLV_FMT_REG"(-(SNAPSHOT))?"
    
    TAG_PREFIX=$(get_var @TAG_PREFIX@  $version_src)
    echo TAG_PREFIX=$TAG_PREFIX
    VERSION_REG=$(get_var @VERSION_REG@  $version_src)
    echo VERSION_REG=$VERSION_REG
    VERSION_MAJOR_REG=$(get_var @VERSION_MAJOR_REG@  $version_src)
    echo VERSION_MAJOR_REG=$VERSION_MAJOR_REG
    VERSION_MINOR_REG=$(get_var @VERSION_MINOR_REG@  $version_src)
    echo VERSION_MINOR_REG=$VERSION_MINOR_REG
    VERSION_PATCH_REG=$(get_var @VERSION_PATCH_REG@  $version_src)
    echo VERSION_PATCH_REG=$VERSION_PATCH_REG
    VERSION_DESC_REG=$(get_var @VERSION_DESC_REG@  $version_src)
    echo VERSION_DESC_REG=$VERSION_DESC_REG
    BEANCH_REG=$(get_var @BEANCH_REG@  $version_src)
    echo BEANCH_REG=$BEANCH_REG
    COMMIT_REG=$(get_var @COMMIT_REG@  $version_src)
    echo COMMIT_REG=$COMMIT_REG
    
    # 从源码中获取当前版本号字符串
    VERSION=$(get_value_by_reg $VERSION_REG $version_src)
    echo VERSION=$VERSION
    
    if [ -z "$VERSION" ] ;
    then
        echo "ERROR:failt to read version format from $version_src(从源码中读取版本信息失败)"
        exit -1
    fi
    
    # 解析版本号字符串各字段
    # 主版本号
    MAJOR_VERSION=$(echo $VERSION | sed -nr "s/$SS_VFMT_REG/\1/p")
    # 次版本号
    MINOR_VERSION=$(echo $VERSION | sed -nr "s/$SS_VFMT_REG/\2/p")
    # 补丁版本号
    PATCH_VERSION=$(echo $VERSION | sed -nr "s/$SS_VFMT_REG/\3/p")
    # 版本号后缀
    DESC=$(echo $VERSION | sed -nr "s/$SS_VFMT_REG/\5/p")
    # 快照版本
    SNAPSHOT=$(echo $VERSION | sed -nr "s/$SS_VFMT_REG/\7/p")
    
    echo MAJOR_VERSION=$MAJOR_VERSION
    echo MINOR_VERSION=$MINOR_VERSION
    echo PATCH_VERSION=$PATCH_VERSION
    echo DESC=$DESC
    echo SNAPSHOT=$SNAPSHOT
    
    [ -z "$SNAPSHOT" ] && echo "WARNING:$VERSION is not a snapshot version(当前版本号不是快照版本)"
    
    # 版本号最末位自动加1
    new_patch=$(expr $PATCH_VERSION + 1 )
    
    echo new_patch=$new_patch
    
    # 发行版本号(用默认值初始化)
    release_version=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_VERSION
    # 下一个发行版本号
    next_relver=$MAJOR_VERSION.$MINOR_VERSION.$new_patch
    [ -n "$DESC" ] && release_version=$release_version.$DESC && next_relver=$next_relver.$DESC
    #####################
    
    # 提示用户输入发行版本号,如果输入为空则使用默认值
    read -p "input release version(输入发行版本号)[$release_version]:" input_str
    
    check_version_format $input_str
    
    #if [[ -n "$input_str" && -z $(echo $input_str | grep -E "$RLV_FMT_REG") ]] ;
    #then
    #   echo "ERROR:invalid version string format(版本号格式错误),example: 1.0.0 OR 1.0.0.beta"
    #   exit -1
    #fi
    
    [ -n "$input_str" ] && release_version=$input_str
    
    echo release_version=$release_version
    
    
    # 提示用户输入下一个发行版本号,如果输入为空则使用默认值
    read -p "input next release version(输入下一个发行版本号)[$next_relver]:" input_str
    
    check_version_format $input_str
    
    #if [[ -n "$input_str" && -z $(echo $input_str | grep -E "$RLV_FMT_REG") ]] ;
    #then
    #   echo "ERROR:invalid version string format(版本号格式错误),example: 1.0.0 OR 1.0.0.beta"
    #   exit -1
    #fi
    
    if [ "$input_str" = $release_version ] ;
    then
        echo "ERROR:next version must not be same with $release_version(下一个版本号不能与上一个版本号相同)"
        exit -1
    fi
    
    [ -n "$input_str" ] && next_relver=$input_str
    echo next_relver=$next_relver
    
    
    # 发行版本各字段
    # 主版本号
    rel_major_version=$(echo $release_version | sed -nr "s/$RLV_FMT_REG/\1/p")
    # 次版本号
    rel_minor_version=$(echo $release_version | sed -nr "s/$RLV_FMT_REG/\2/p")
    # 补丁版本号
    rel_patch_version=$(echo $release_version | sed -nr "s/$RLV_FMT_REG/\3/p")
    # 版本号后缀
    rel_desc=$(echo $release_version | sed -nr "s/$RLV_FMT_REG/\5/p")
    
    # 下一个快照版本各字段
    # 主版本号
    snap_major_version=$(echo $next_relver | sed -nr "s/$RLV_FMT_REG/\1/p")
    # 次版本号
    snap_minor_version=$(echo $next_relver | sed -nr "s/$RLV_FMT_REG/\2/p")
    # 补丁版本号
    snap_patch_version=$(echo $next_relver | sed -nr "s/$RLV_FMT_REG/\3/p")
    # 版本号后缀
    snap_desc=$(echo $next_relver | sed -nr "s/$RLV_FMT_REG/\5/p")
    #########################
    # 检查工作区是否全部有未提交的内容,有则报错退出
    if [ -n "$(git status -s)" ] ;
    then
        echo "ERROR:working directory not clean,can not release(工作区有未提交修改,不能执行release)"
        exit -1
    fi
    
    echo "修改源码版本号($release_version)"
    sed -i -r "s!$VERSION_REG!\1$release_version\3!g" $version_src || exit -1
    sed -i -r "s!$VERSION_MAJOR_REG!\1$rel_major_version\3!g" $version_src || exit -1
    sed -i -r "s!$VERSION_MINOR_REG!\1$rel_minor_version\3!g" $version_src || exit -1
    sed -i -r "s!$VERSION_PATCH_REG!\1$rel_patch_version\3!g" $version_src || exit -1 
    sed -i -r "s!$VERSION_DESC_REG!\1$rel_desc\3!g" $version_src || exit -1
    sed -i -r "s!$BEANCH_REG!\1$branch\3!g" $version_src || exit -1
    sed -i -r "s!$COMMIT_REG!\1$commit_id\3!g" $version_src || exit -1
    
    echo "提交对源码的修改 release_version=$release_version"
    git add $version_src || exit -1
    git commit -m "release $release_version" || exit -1
    
    release_tag=$TAG_PREFIX$release_version
    echo "发行版本标签(release_tag=$release_tag)"
    git tag $release_tag || exit -1
    
    # 下一个快照版本
    next_snapshot="$next_relver-SNAPSHOT"
    # 当前提交id
    cur_commit_id=`git rev-parse --short HEAD`
    echo "修改源码,改为快照版本号($next_snapshot),删除branch,commit_id"
    sed -i -r "s!$VERSION_REG!\1$next_snapshot\3!g" $version_src || exit -1
    sed -i -r "s!$VERSION_MAJOR_REG!\1$snap_major_version\3!g" $version_src || exit -1
    sed -i -r "s!$VERSION_MINOR_REG!\1$snap_minor_version\3!g" $version_src || exit -1
    sed -i -r "s!$VERSION_PATCH_REG!\1$snap_patch_version\3!g" $version_src || exit -1 
    sed -i -r "s!$VERSION_DESC_REG!\1$snap_desc\3!g" $version_src || exit -1
    sed -i -r "s!$BEANCH_REG!\1$branch\3!g" $version_src || exit -1
    sed -i -r "s!$COMMIT_REG!\1$cur_commit_id\3!g" $version_src || exit -1
    
    echo "提交对源码的修改"
    git add $version_src || exit -1
    git commit -m "next snapshot $next_snapshot" || exit -1
    
    #echo "push到远端服务器"
    git push || exit -1
    git push origin $release_tag || exit -1
    展开全文
  • VS2005/VS2008中增加SVN版本号

    千次阅读 2014-04-01 10:50:23
    为了使软件版本号的最后一位,即修订号与由svn管理的代码库修订号保持一致并自动更新,可以利用VS2005的生成事件和 svn 中的 subwcrev 程序实现,步骤如下: 工具/原料 Visual Studio 2005 SVN 客户端...

    为了使软件版本号的最后一位,即修订号与由svn管理的代码库修订号保持一致并自动更新,可以利用VS2005的生成事件和 svn 中的 subwcrev 程序实现,步骤如下:

    工具/原料

    • Visual Studio 2005
    • SVN 客户端( TortoiseSVN 或其他 )

    步骤/方法

    1. 编写一个模板文件,比如取名为 version_template.h,内容如下

      #ifndef _VERSION_H_
      #define _VERSION_H_

      #define VER_MAJOR 1
      #define VER_MINOR  0
      #define VER_REVISION $WCREV$

      #endif //!_VERSION_H_
    2. 找到 subwcrev.exe 可执行文件,一般在 svn 客户端的安装目录下,比如 TortoiseSVN 是在其安装目录的bin文件夹下。这里,笔者将 subwcrev.exe 复制到了代码工程目录下,方便使用。
    3. 在VS2005的项目属性页->预生成事件->命令行中添加一句:

      $(SolutionDir)\subwcrev.exe $(SolutionDir) $(SolutionDir)\src\qmlv\version_template.h $(SolutionDir)\src\qmlv\version.h




      SubWCRev 调用语法:
      SubWCRev WorkingCopyPath [SrcVersionFile DstVersionFile]
    4. 这样,代码编译通过后,预生成事件被触发,VS2005 调用SubWCRev.exe程序,替换version_template.h中的宏$WCREV$为当前的svn修订号,并另存为 version.h文件,version.h 会类似于:

      #ifndef _VERSION_H_
      #define _VERSION_H_

      #define VER_MAJOR 1
      #define VER_MINOR 0
      #define VER_REVISION 2821

      #endif //!_VERSION_H_
    1. 在程序中需要显示版本号的地方,引用 VER_REVISION 宏即可。

    展开全文
  • 使用 Git 生成编译版本号

    千次阅读 2013-08-11 11:56:40
    一般而言,我们的软件版本号通常会包括一个编译版本号。如果你的代码使用版本控制系统进行管理(很多开发者都是这么做的),这个编译版本号可以是我们版本控制系统的提交版本。 如果我们使用 Git 进行管理,这个...

    一般而言,我们的软件版本号通常会包括一个编译版本号。如果你的代码使用版本控制系统进行管理(很多开发者都是这么做的),这个编译版本号可以是我们版本控制系统的提交版本。

    如果我们使用 Git 进行管理,这个版本号会是一个 40 位的 SHA-1 的哈希值。不过,要是我们的软件版本号添加这么一个 40 位长的字符串,显然是不合适的。所以我们一般会取前 7 位——如果这样还不能标识出唯一版本,那么就取前 8 位等等。不过,手动去修改这个值当然是不合适的,我们有更简便的方式。这就是本文所要介绍的内容:使用 Git 生成这个编译版本号。

    为达到这一目的,我们一般会新建一个 version.h 文件,其内容可以是一个宏定义:

    #ifudef VERSION_H
    #define VERSION_H
    #define VERSION_NUMBER 1.0.0
    #endif // VERSION_H


    然后在我们的程序中,通过 include 这个 version.h,就可以获取这个 VERSION_NUMBER 的值;而我们所要做的,就是能够由程序生成这个宏的值。这就是思路,下面我们来看看如何实现。

    我们需要同 Git 进行交互,并且要能够写入文件。最方便的方式是使用 shell 脚本。这一设想是现实的:首先,Linux 天生具有 shell,可以直接使用;其次,Windows 虽然没有 shell,但是如果你要在 Windows 下使用 Git,就必须安装一个模拟环境,msys 或者 Cygwin,而这两个环境都提供了 shell。当然,如果你使用 msysgit 或者其他方式集成 git,那么就已经提供了这个 shell。因此,为了使用 shell 脚本,我们无需在拥有 Git 的开发环境中额外安装其他环境。这也是我们提到的这个方法的可取之处。

    首先我们要提供一个“模板” version.h.template,用于生成 version.h:

    #ifudef VERSION_H
    #define VERSION_H
    #define VERSION_NUMBER $GIT_VERSION
    #endif // VERSION_H


    我们的目的是能够自动替换 $GIT_VERSION 这个占位符,从而达到生成 version.h 的目的。

    下面就是我们的 shell 文件。该文件参考了这段代码,在此表示感谢!

    #!/bin/bash
    rm -f src/version.h
    git rev-list HEAD | sort > config.git-hash
    LOCALVER=`wc -l config.git-hash | awk '{print $1}'`
    if [ $LOCALVER \> 1 ] ; then
        VER=`git rev-list origin/master | sort | join config.git-hash - | wc -l | awk '{print $1}'`
        if [ $VER != $LOCALVER ] ; then
            VER="$VER+$(($LOCALVER-$VER))"
        fi
        if git status | grep -q "modified:" ; then
            VER="${VER}M"
        fi
        VER="$VER $(git rev-list HEAD -n 1 | cut -c 1-7)"
        GIT_VERSION=r$VER
    else
        GIT_VERSION=
        VER="x"
    fi
    rm -f config.git-hash
    
    cat version.h.template | sed "s/\$FULL_VERSION/$GIT_VERSION/g" > src/version.h
     
    echo "Generated version.h"


    下面来解释一下这个 shell 脚本。

    第一行,说明是一个 bash 脚本。

    第二行,强制删除 src/version.h 文件。可以想象,这个文件就是我们要生成的文件。如果之前已经生成过,我们则将其删除。

    第三行,运行 git 命令。git rev-list HEAD 获取推送到服务器内容的提交列表,然后使用管道 | 将其结果发送给 sort 命令进行排序,之后使用 > 作输出重定向,生成 config.git-hash 文件。

    第四行,调用一个 shell 命令:使用 wc 计算 config.git-hash 的行数,然后使用 awk 将其输出到一个变量 LOCALVER 中。

    第五行到第十四行,如果 $LOCALVER > 1 —— 注意有 > 的转义;并且,在变量赋值时无需 $ 符号,但是在使用时需要添加 $ —— 那么使用“git rev-list origin/master | sort | join config.git-hash – | wc -l | awk ‘{print $1}’”对 VER 进行赋值。这一段命令我们前面已经解释过,这里不解释。如果 $VER != $LOCALVER,则将 VER 与 LOCALVER 拼接在一起。然后我们检查 git status 是不是 modified,如果是的话则在后面添加一个 M。然后,我们使用 cut 命令取前七位。最后,我们将这个值赋给 GIT_VERSION。注意,我们在 $VER 前面增加了一个 r,当然你也可以不加,根据自己的需要。

    第十五行到第十八行,如果 $LOCALVER <= 1,则直接给 GIT_VERSION 和 VER 初始值。

    第十九行,删除 config.git-hash 文件。

    第二十一行,使用 cat 命令打开模板文件,利用管道将其传递给 sed——一个无需打开文件即可编辑的编辑器——发给 sed 的命令是“s/\$FULL_VERSION/$FULL_VERSION/g”,s 代表替换,s/AAA/BBB/ 表示将 AAA 用 BBB 替换,g 表示全局。注意,这里的 AAA 是正则表达式,因此,我们在查找文件中的 $FULL_VERSION 的时候,需要将 $ 转义。而后面的 $GIT_VERSION 则是取 shell 变量的值。最后输出重定向到 src/version.h 文件。

    好了,现在运行下 version.sh,如果没有路径问题,version.h 已经在 src 目录下了!

    Windows 平台注意:如果在 msysgit 下面,可能会有 join 命令找不到。出现这种问题是因为 msysgit 并没有把所有的 shell 命令都安装上去。解决方案是安装完整的 msys 或者 cygwin,然后将其中的 join.exe 放到 %GIT_PATH%/bin 即可。如果你不想或者不会安装庞大的 msys,那么可以按照这里所说的,利用 wget 下载这些命令。然后将其中的 join.exe 放到 %GIT_PATH/bin% 中。如果还有另外的命令找不到,按照这种方法即可。

    原文地址:点击打开链接

    展开全文
  • 但在这里推荐一个较为规范的版本号添加方案 在HTML5中,meta标签中的属性值可以很好的解决标记版本问题 在index.html中定义如下 <meta name="revised" content="定义页面的最新版本"/>
  • 修改系统Android版本,版本号

    千次阅读 2019-03-23 16:14:23
    一、版本号 1 显示版本号的代码在 packages/apps/Settings/src/com/android/settings/DeviceInfoSettings.java 在public void onCreate(Bundle icicle) 函数中,setStringSummary(KEY_BUILD_NUMBER, Build....
  • 1.修改device/mediateksample/k39tv1_bsp_1g/full_k39tv1_bsp_1g.mk下 外部型号:PRODUCT_MODEL := xxx ...版本号: PRODUCT_VERSION := 1.0.0 2.在build/make/tools/buildinfo.sh增加 ec...
  • 关于gulp中在html文件自动添加版本号需要Gulp插件:1、gulp-rev2、gulp-rev-format3、gulp-rev-replace要实现html中增加版本号的效果: 把gulp-rev的配置代码粘贴出来,gulp-rev帮我们生成一个版本清单文件:rev-...
  • 前端开发静态文件自动添加版本号解决方案 源代码下载地址http://www.zuidaima.com/share/1802384061877248.htm
  • chromium 03 修改chromium 编译版本号

    千次阅读 2018-08-18 11:47:21
    chromium 版本号定义在 src\chrome\VERSION 中。单纯的修改这里的版本号,一般是不能顺利编译通过的。比如68.0.3440.105要修改为主版本号大于 10的,比如:10.0.0.1,才能编译通过。 一般自己发布新版,都是从0.x.x.x...
  • 自动更新SVN版本号

    千次阅读 2015-01-24 15:22:42
    VC2005利用SVN的版本号,生成DLL和EXE文件的版本号 TortoiseSVN下有一个SubWCRev程序,可以获取任意个路径对应的SVN版本库的版本号。并替换到文件对应位置。 VC2005的资源文件可以控制生成的二进制文件版本号。 可以...
  • CSS和js自动添加版本号

    万次阅读 2015-03-19 18:41:23
    昨天去winy那里咨询他网站里css和js后面版本号的问题,我之所以想加这个功能是因为每次在A电脑修改的样式或者js到了B电脑上就看不到效果,还得ctrl+f5才能看到,我承认我缓存了网站的样式和js,虽然可以让用户把一些...
  • html 页面 js 引用添加动态版本号

    千次阅读 2019-09-19 17:56:25
    因为没有使用 freeMarker 等模板,给静态文件增加动态版本号后缀无法从后端获取后渲染。 先使用了 document.write("<script src='../js/index.js?v="+Math.Random()+"'><"+'/'+"script>...
  • 将ifeq到endif代码块注释,增加BUILD_DISPLAY_ID := “MTK6737_64_bsp_V1.01”, MTK6737_64_bsp_V1.01 对应的改为你需要显示的版本号 3、去掉自定义版本显示 自定义版本显示的版本号对应的源码位置在 device/...
  • css与js引入添加动态版本号

    千次阅读 2019-11-16 18:09:06
    css与js引入添加动态版本号 通过js给引入的css与js文件动态添加版本号,防止浏览器缓存,方便调试。 <script type="text/javascript"> document.write('<script type="text/javascript" charset="UTF-8" ...
  • C++使用 Git 生成编译版本号

    千次阅读 2016-09-26 14:56:52
    一般而言,我们的软件版本号通常会包括一个编译版本号。如果你的代码使用版本控制系统进行管理(很多开发者都是这么做的),这个编译版本号可以是我们版本控制系统的提交版本。 如果我们使用 Git 进行管理,这个...
  • 在html中,给引用的js文件动态添加版本号,可以去掉js缓存,保证使用的js始终是最新的js 。 &amp;amp;amp;lt;!DOCTYPE html&amp;amp;amp;gt; &amp;amp;amp;lt;html&amp;amp;amp;gt; &amp;amp...
  • Studio Gradle实践之多渠道自动化打包+版本号管理 上次介绍了Android Studio的安装、配置和基本使用。这次讲一下Android Studio用到的打包工具Gradle。Gradle是一种构建项目的框架,兼容Maven、Ant,...
  • js加版本号

    千次阅读 2019-04-17 00:15:38
    我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码...
  • gulp自动添加静态文件版本号方案

    千次阅读 2017-03-21 13:33:35
    1. 利用gulp根据静态文件(JS,CSS,图片)内容生成对应的HASH值作为它的版本号,文件内容变化则版本号跟着变(需处理生成版本号的位置,不同路径下同名文件HASH值覆盖问题,JSP文件编码问题等,已在下面给出的...
  • 引用js或css后加?v= 版本号的用法

    千次阅读 2015-07-27 00:36:53
    version= ) 使用参数有两种可能: 第一、脚本并不存在,而是服务端动态生成的,因此带了个版本号,以示区别。 即上面代码对于文件来说 等价于 但浏览器会认为他是 该文件的某个版本! 第二、客户端会缓存...
  • Java解析apk、ipa图标,包名,应用名称,版本号

    万次阅读 热门讨论 2016-12-13 17:46:43
    比如:包名、版本号、版本名、应用名称。 之前google了好多文章,没有完整的可以解决图标的博文。今天我就为大家带来一篇。 首先给大家吃一颗定心丸:这篇文章绝对可以帮助大家解析出来图标的。只要你的apk和...
  • VC2005利用SVN的版本号,生成DLL和EXE文件的版本号 TortoiseSVN下有一个SubWCRev程序,可以获取任意个路径对应的SVN版本库的版本号。并替换到文件对应位置。 VC2005的资源文件可以控制生成的二进制文件版本号。 ...
  • webpack打包版本号定义

    千次阅读 2017-11-16 18:01:00
    首先版本号的定义是为了解决缓存的问题 在编译的时候webpack提供了 插件html-webpack-plugin, 本文以时间作为版本号 <!DOCTYPE html> , initial-scale=1, maximum-scale=1"> , responsive, ...
  • 引入JS和CSS文件加版本号的作用

    千次阅读 2015-01-19 17:43:51
    使用参数有两种可能用途: -- 脚本并不存在, 而是服务端提供的, 带上版本号, 以示区别。
  • 在使用其他软件的时候,我们可以使用鼠标右键,查看信息的时候,看到软件的版本信息。 那么我们的delphi生成的软件怎么含有版本信息呢? 这个好办,对于delphi来说,其IDE就自己附带了这么一个功能,我使用的是...
  • 为防止浏览器缓存,一般会在js和css文件后添加版本号,但每次手工改将会很麻烦,因此可以考虑自行将文件修改时间作为版本号,并且自动附加到页面上。 先写一个获取文件名的公共方法: public string ...
  • 之前已经介绍了很多在Spring Boot中使用MySQL的案例,包含了Spring Boot最原始的JdbcTemplate、Spring Data JPA以及我们国内最常用的MyBatis。...Git已经帮助我们完成了代码的多版本管理,那么数据库中的表
  • nginx配置安装之-修改nginx版本号

    千次阅读 2012-08-27 02:10:30
    在nginx的配置文件中可以设置不发送版本信息: 1> vi nginx.conf 在http {}里加上server_tokens off 2> 编辑php-fpm配置文件,如fastcgi.conf或fcgi.conf: 找到:  fastcgi_param SERVER_SOFTWARE nginx/$...
  • 安装Extended Choice Parameter插件 选择‘参数化构建过程’ maven command line中进行引用 clean test -DsuiteXmlFile=src/main/resources/testng.xml -Dgroups="$TES...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 73,434
精华内容 29,373
关键字:

:src增加版本号