Командная консоль для обновления pom-файла из переменной - PullRequest
0 голосов
/ 01 ноября 2018

Ранее я использовал команду ниже, чтобы взять версию в pom.xml и увеличить ее с единицы. До увеличения версии снимка, 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 голосов
/ 02 ноября 2018

Здесь я упоминаю полностью рабочую команду. Спасибо за поддержку.

#!/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
0 голосов
/ 01 ноября 2018

Похоже, вы хотите отредактировать 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>

>
0 голосов
/ 01 ноября 2018

Да, вы можете использовать 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 вар)
  • Второй модифицирует (параметр -i sed) файл pom с помощью значение новой версии.
0 голосов
/ 01 ноября 2018

Я могу использовать плагин maven, чтобы сделать увеличение выше. Но дело в том, что мой наставник дал мне указание получить его с помощью команд оболочки для практики написания сценариев оболочки. Я высоко ценю вашу поддержку. Каким-то образом я решил свой вопрос, используя команды ниже.

#!/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
0 голосов
/ 01 ноября 2018

Простое решение для установки версии на определенное значение с помощью version-maven-plugin

mvn versions:set -DnewVersions=0.0.1

Если вы хотите увеличить его. Это может быть достигнуто с помощью build-helper-maven-pugin , как показано ниже:

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.

или вы можете использовать maven-release-plugin , который увеличит текущую версию до следующей, просто вызвав:

mvn -B release:update-versions

Или вы используете maven-release-plugin с помощью обычного процесса выпуска mvn release:prepare release:perform, который по умолчанию также увеличивает версию.

0 голосов
/ 01 ноября 2018

Используйте инструмент с поддержкой 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
...