通过shell脚本替换pom依赖项
我正在阅读pom.xml并通过shell脚本提升依赖性通过shell脚本替换pom依赖项,shell,sed,sh,xmlstarlet,Shell,Sed,Sh,Xmlstarlet,我正在阅读pom.xml并通过shell脚本提升依赖性 <dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> <version>2.0</version> </dependency> <dependency> <g
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.google.gwt.inject</groupId>
<artifactId>gin</artifactId>
<version>2.0</version>
</dependency>
com.google.inject
圭斯
2
com.google.gwt.inject
杜松子酒
2
在我想将guice版本升级到3.0的地方,是否有任何方法可以通过shell脚本替换特定的artifactId依赖项
因此,输出应如下所示
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>com.google.gwt.inject</groupId>
<artifactId>gin</artifactId>
<version>2.0</version>
</dependency>
com.google.inject
圭斯
3
com.google.gwt.inject
杜松子酒
2
最干净的方法(imho)是在POM中定义依赖项的版本。例如:
<properties>
<guice.version>2.0</guice.version>
<gin.version>2.0</gin.version>
</properties>
...
<dependencies>
...
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>${guice.version}</version>
</dependency>
<dependency>
<groupId>com.google.gwt.inject</groupId>
<artifactId>gin</artifactId>
<version>${gin.version}</version>
</dependency>
下面是一个使用
sed
的解决方案:
sed -r '/<artifactId>guice<\/artifactId>/ { N; s/(<version>).*?(<\/version>)/\13.0\2/ }' pom.xml > pom_new.xml
这两个命令都将使用您所需的输出创建新文件
pom_new.xml
。我看到其他人用xmlstarlet标记了您的问题。如果xmlstarlet是一种选择,我认为没有任何理由选择sed或awk
唯一可能让您绊倒的是POM通常有一个默认名称空间,因此您需要确保对其进行说明
这里有一个例子
POM XML输入
<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>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.google.gwt.inject</groupId>
<artifactId>gin</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
<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>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>com.google.gwt.inject</groupId>
<artifactId>gin</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
<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>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.google.gwt.inject</groupId>
<artifactId>gin</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
POM XML输出
<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>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.google.gwt.inject</groupId>
<artifactId>gin</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
<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>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>com.google.gwt.inject</groupId>
<artifactId>gin</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
<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>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.google.gwt.inject</groupId>
<artifactId>gin</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
输出
<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>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.google.gwt.inject</groupId>
<artifactId>gin</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
<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>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>com.google.gwt.inject</groupId>
<artifactId>gin</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
<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>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.google.gwt.inject</groupId>
<artifactId>gin</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
4.0.0
com.google.inject
圭斯
2.0-快照
com.google.gwt.inject
杜松子酒
2
Oops,您忘记发布代码了。StackOverflow是关于帮助人们修复代码的。这不是免费的编码服务。有代码总比没有代码好。即使您不知道如何编写程序,元代码也会演示您认为程序应该如何工作。试着向我们展示你到目前为止的工作,你期望的结果和你得到的结果,我们会帮助你找出答案。我们有没有办法找到版本?使用版本快照替换任何工件的版本?壳内script@Ganesh-因此,与其将guice的版本更改为“3.0”,不如将其更改为“2.0-SNAPSHOT”?是的!,它已动态标识版本并替换为-SNAPSHOT@Ganesh-您可以使用-x
来输出xpath表达式,而不是静态值。请参阅我的更新。Hally我将命令修改为xml ed-L-N p=“”-u”/*[p:artifactId='${repo_name}]/p:version“-x”concat(normalize-space(),'-SNAPSHOT')”pom.xml,因为我的repo名称在依赖项之外,而我的整个文件都已更改,请检查command@Zdnek我们有没有办法找到版本?使用版本快照替换任何工件的版本?在shell脚本中,我们有没有办法找到版本?使用版本快照替换任何工件的版本?shell脚本