以前,我使用下面的命令在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>
答案 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
说明: