【发布时间】:2016-01-22 23:24:44
【问题描述】:
我有一个pom.xml 文件,我想将任何dependency 节点中的版本从0.1-SNAPSHOT 替换为不同的版本(比如说NEW-VERSION),我唯一的限制是替换只有当groupId 匹配特定文本时才应该这样做,比如说:com.company.xyz。
话虽如此,假设这是我的pom.xml 的dependencies 部分:
<dependencies>
<dependency>
<groupId>com.company.xyz</groupId>
<artifactId>xyz-xx-utils</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.ibm.xyz</groupId>
<artifactId>xyz</artifactId>
<version>56.1</version>
</dependency>
</dependencies>
应用 sed 命令后,我希望它看起来像:
<dependencies>
<dependency>
<groupId>com.company.xyz</groupId>
<artifactId>xyz-xx-utils</artifactId>
<version>NEW-VERSION</version>
</dependency>
<dependency>
<groupId>com.ibm.xyz</groupId>
<artifactId>xyz</artifactId>
<version>56.1</version>
</dependency>
</dependencies>
这是我尝试过但没有成功的方法:
newVersion="NEW-VERSION"
sed -i "s/\(<dependency>\)\(<groupId>com.company.xyz</groupId>\)\(<artifactId>.*\</artifactId>\)\(<version>0.1-SNAPSHOT</version>\)\(</dependency>\)/\1\2\3$newVersion\5/" pom.xml
我想知道这不起作用的原因是否是因为我的文本有多行,所以我研究了一下,但我不明白用于处理多行的语法(一些N 的东西)。
顺便说一句,我将这段代码包含在执行其他操作的 bash 文件中,这就是为什么我想使用 sed 或任何其他与 bash 兼容的“工具”来执行此操作。
【问题讨论】:
-
请注意,使用 maven 属性可能会使这在未来变得更容易。例如
<version>NEW-VERSION</version>变成<version>NEW-${xyz-xx-utils.version}</version>然后你在别处定义它,例如<xyz-xx-utils.version>1.2-SNAPSHOT</xyz-xx-utils.version> -
你为什么不用版本插件?