如何使用sed为Maven项目的Pom文件添加/覆盖自定义依赖并解决sed命令报错问题
解决sed修改Maven pom.xml时的报错问题
作为Linux新手,你遇到的这个sed报错其实很常见——问题出在分隔符的冲突上,我来一步步帮你搞定:
为什么你的sed命令会报错?
sed的s替换命令默认用/作为分隔符,而你要插入的内容里有大量的/(比如Nexus仓库的URL、XML标签的/>),这会让sed误以为这些/是命令的分隔符,导致它把后面的<当成了无效的命令标志,所以抛出bad flag in substitute command: '<'的错误。
正确的修改方案(分步sed命令)
推荐你分步骤修改pom.xml,这样更清晰不容易出错,而且我们换用|作为sed的分隔符,避免和内容里的/冲突:
1. 添加自定义依赖到<dependencies>节点
这条命令会在<dependencies>标签后插入你需要的依赖:
sed -i.bak 's|<dependencies>|<dependencies>\n <!-- 自定义依赖 -->\n <dependency>\n <groupId>pl.bla.abc</groupId>\n <artifactId>example</artifactId>\n <version>3</version>\n </dependency>|' pom.xml
2. 添加Spring Boot Maven插件的<build>配置
这条命令会在</dependencies>标签之后追加完整的build节点:
sed -i.bak '/<\/dependencies>/a\ <build>\n <plugins>\n <plugin>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-maven-plugin</artifactId>\n <version>2.0.0.RELEASE</version>\n <executions>\n <execution>\n <goals>\n <goal>repackage</goal>\n </goals>\n </execution>\n </executions>\n </plugin>\n </plugins>\n </build>' pom.xml
3. 添加<distributionManagement>配置
这条命令会在</project>标签之前插入发布仓库配置:
sed -i.bak '/<\/project>/i\ <distributionManagement>\n <repository>\n <id>nexus</id>\n <url>http://12.0.0.55:8081/repository/maven-releases/</url>\n </repository>\n </distributionManagement>' pom.xml
命令参数说明
-i.bak:修改pom.xml的同时自动创建备份文件pom.xml.bak,万一改坏了可以快速恢复- 用
|代替默认的/作为分隔符,彻底避免内容里的/干扰sed命令 /<\/dependencies>/a\:表示在匹配到</dependencies>的行之后追加内容/<\/project>/i\:表示在匹配到</project>的行之前插入内容
额外小提示
如果你的pom.xml已经存在<build>或<distributionManagement>节点,上面的命令会重复添加内容。这时候可以先检查节点是否存在,或者用更精准的匹配来修改(比如匹配<build>标签后插入插件)。不过作为新手,先确保pom.xml是干净的初始状态,再运行上面的命令会更顺利~
内容的提问来源于stack exchange,提问作者sroko1
相关产品推荐
相关产品推荐

