5

我可以使用命令或 Maven 插件从命令行向 POM 添加依赖项吗?

例如,我想输入如下内容:

mvn lazy:add-dependency -DgroupId=com.mycompany -DartifactId=derp -Dversion=1.0

并让它修改当前目录中 POM 的依赖项部分:

<dependencies>
    ... other dependencies ...
    <dependency>
        <groupId>com.mycompany</groupId>
        <artifactId>derp</artifactId>
        <version>1.0</version>
    </dependency>
</dependencies>

添加上述 XML 的外部命令也可以使用,但我更喜欢不需要我编写 XSL 样式表的命令。

4

3 回答 3

1

不确定你是否解决了这个问题,但我过去用 xsltproc 做过类似的事情(我知道你说过不要使用它,但我从来没有找到另一种方法)。

function merge_xml ()
{
TEMP_XML1="some-temp-file1.xml"
TEMP_XML2="some-temp-file2.xml"
cat > $TEMP_XML1
cp $1 $TEMP_XML2

echo "Merging XML stream from $1 into $2" >&2

xsltproc --stringparam with "$TEMP_XML1" merge.xslt "$TEMP_XML2" | tidy -xml -indent -quiet -wrap 500 -output $2
}

merge.xslt 可以在这里找到http://www2.informatik.hu-berlin.de/~obecker/XSLT/merge/merge.xslt

然后调用 Bash 函数:

merge_xml $PROJECT_ROOT/content/pom.xml $PROJECT_ROOT/content/pom.xml << EOF 
<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/maven-v4_0_0.xsd">
<dependencies>
    <dependency>
      <groupId>com.company</groupId>
      <artifactId>my-artifact</artifactId>
      <version>1.0-SNAPSHOT</version>
      <classifier>jar</classifier>
    </dependency>
</dependencies>
</project>
EOF
于 2015-01-26T13:56:04.510 回答
0

I'm not aware of an existing Plugin that does this, but it could be fairly straightforward to implement your own Maven plugin leveraging Ant and XMLTask.

于 2012-10-26T18:15:16.697 回答
0

按照安德鲁的评论:

使用 sed 的示例:

sed 's/<dependencies>/<dependencies>\r\n<!--ghost-->\r\n<dependency>\r\n<groupId>org.ghost4j<\/groupId>\r\n<artifactId>ghost4j<\/artifactId>\r\n<version>0.5.0<\/version>\r\n<\/dependency>\r\n<!--ghost-->/g' pom.xml > pom2.xml

将依赖项标记替换为依赖项标记,后跟新依赖项(在列表中首先插入新依赖项。

使用新依赖项创建一个新文件 pom2.xml(可以使用以下方法更改以覆盖原始文件: pom.xml > pom.xml

于 2013-10-11T18:46:18.443 回答