Shell命令从变量更新pom文件

时间:2018-11-01 09:25:14

标签: linux bash shell maven

以前,我使用下面的命令在pom.xml中获取版本,并将其从1开始递增。在增量快照版本为0.0.1

之前
#!/bin/bash

version=$(grep -ri "<version>" pom.xml |head -n 1 | sed -e 's/^[ \t]* 
<version>\([^<]*\)<.*$/\1/' | sed 's/[-SNAPSHOT]//g')
var1=$(echo $version | cut -c1)
var2=$(echo $version | cut -c2)
var3=$(echo $version | cut -c3)
var4=$(echo $version | cut -c4)
var5=$(echo $version | cut -c5)
var5=$((var5+1))
incrementVer=$var1$var2$var3$var4$var5
echo $incrementVer

输出is 0.0.2

但是我想将此输出推入pom文件并更新为<version>0.0.2</version>

我可以使用sed命令更新pom文件吗?

我的pom文件如下所示,

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>com.mss.inven</groupId>
<artifactId>INVEN</artifactId>
<version>0.0.1-SNAPSHOT</version>

6 个答案:

答案 0 :(得分:2)

通过https://github.com/char502/exchange_rate_app_react

将版本设置为特定值的简单解决方案
mvn versions:set -DnewVersions=0.0.1

如果您想增加它。可以通过versions-maven-plugin使用,如下所示:

mvn build-helper:parse-version versions:set \
     -DnewVersion=\${parsedVersion.nextMajorVersion}.0.0 \
     versions:commit

或者如果您想增加次要版本:

mvn build-helper:parse-version versions:set \
 -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.nextMinorVersion}.0 \
 versions:commit

或者如果您想增加补丁版本:

mvn build-helper:parse-version versions:set \
 -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}.\${parsedVersion.nextIncrementalVersion} \
 versions:commit

您需要注意Windows / Linux上的引用。

或者您可以使用build-helper-maven-pugin,只需调用以下命令即可将当前版本增加到下一个版本:

mvn -B release:update-versions

或者您通过mvn release:prepare release:perform通过通常的发布过程来执行maven-release-plugin,默认情况下,版本也会增加。

答案 1 :(得分:0)

使用支持XML的工具。例如,在xsh中,您可以编写

open pom.xml ;
register-namespace m http://maven.apache.org/POM/4.0.0 ;
for //m:version
    set . xsh:subst(., '(?<=\.)([0-9]+)$', '$1+1', 'e') ;
save :b ;

将“ 0.0.1”更改为“ 0.0.2”。

如果存在-SNAPSHOT,也要增加版本,正则表达式会变得更加复杂:

xsh:subst(., '(?<=\.)([0-9]+)(?=$|-SNAPSHOT$)', '$1+1', 'e') ;
              ^         ^          ^              ^      ^
              |         |          |              |      |
              |         |      Followed by        |  Evaluate replacement
         Preceded       |      end of string      |  as code
         by a dot   At least   or -SNAPSHOT plus  |
                    one digit  end of string     Add one
                                                 to the 1st
                                                 capture group

答案 2 :(得分:0)

我可以使用Maven插件来完成上述操作。但问题是我的导师已被指示要我使用Shell命令来练习Shell脚本来获取它。非常感谢您的支持。我以某种方式使用以下命令解决了我的问题。

#!/bin/bash

cd Project/

version=$(grep -ri "<version>" pom.xml |head -n 1 | sed -e 's/^[ \t]*<version>\ 
([^<]*\)<.*$/\1/')

major=$(echo $version | cut -c1)
var2=$(echo $version | cut -c2)
miner=$(echo $version | cut -c3)
var4=$(echo $version | cut -c4)
bug=$(echo $version | cut -c5)
bug=$((bug+1))
str="-SNAPSHOT"
incrementVer=$major$var2$miner$var4$bug$str
echo $incrementVer

pomChange=$(grep -ri "<version>" pom.xml | head -n 1 | sed -i "s/\(<version>\)[^<]*\ 
(<\/version>\)/\1$incrementVer\2/" pom.xml)
echo $pomChange

输出看起来像

[INFO] ------------------------------------------------------------------- 
[INFO] BUILD SUCCESS
[INFO] --------------------------------------------------------------------- 
[INFO] Total time: 4.087s
[INFO] Finished at: Wed Oct 31 00:25:40 IST 2018
[INFO] Final Memory: 6M/17M
[INFO] --------------------------------------------------------------------
0.0.2-SNAPSHOT
Finished: SUCCESS

答案 3 :(得分:0)

好像您要在后端中编辑pom.xml。尝试Perl单线。 检查一下。

> cat pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>com.mss.inven</groupId>
<artifactId>INVEN</artifactId>
<version>0.0.1-SNAPSHOT</version>

> perl -ne ' { s/(.*)\.(\d+)(-SNAPSHOT.*)/printf("%s.%d%s",$1,$2+1,$3)/ge and $_=~s/.$//g if /<version>/; print } ' pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>com.mss.inven</groupId>
<artifactId>INVEN</artifactId>
<version>0.0.2-SNAPSHOT</version>

>

答案 4 :(得分:0)

在这里我提到了完全有效的命令。谢谢您的支持。

#!/bin/bash

version=$(grep -ri "<version>" pom.xml |head -n 1 | sed -e 's/^[ \t]*<version>\ 
([^<]*\)<.*$/\1/')

major=$(echo $version | cut -c1)
var2=$(echo $version | cut -c2)
miner=$(echo $version | cut -c3)
var4=$(echo $version | cut -c4)
bug=$(echo $version | cut -c5)
bug=$((bug+1))
str="-SNAPSHOT"
incrementVer=$major$var2$miner$var4$bug$str
echo $incrementVer

LN=$(grep -n "<version>" pom.xml | head -1 | awk -F ":" '{print $1}')
sed -i "$LN s/$version/$incrementVer/" pom.xml

答案 5 :(得分:-2)

是的,您可以使用sed修改pom.xml文件中的版本。 只需在给定的bash脚本的末尾添加以下两行:

LN=$(grep -n "<version>" pom.xml | head -1 | awk -F ":" '{print $1}')
sed -i "$LN s/$version/$incrementVer/" pom.xml

说明:

  • 第一行恢复项目版本的行号(在LN中 var)
  • 使用以下命令对pom文件进行第二次修改(sed的-i参数) 新版本值。