2012-10-25 111 views
4

是否有命令或Maven插件可用於從命令行向POM添加依賴項?有沒有辦法從命令行添加依賴到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樣式表的人。

+0

你能告訴我們在什麼情況下,將是有益的。 – maba

+1

我有一個shell腳本從一個內部原型創建一個新項目。作爲腳本的一部分,我希望將新項目添加爲現有聚合器項目的依賴項。 – matts

+1

你可以使用'sed'來實現這一點。 –

回答

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

+0

does not'work the new lines – Setheron

+0

\ r \ n是Windows換行符。 \ n是Linux換行符。適當編輯。 –

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 
+0

小的nit,xsi:schemaLocation在這個片段中不是規範的 - Maven在semver中使用句點,而使用下劃線。根據https:// maven,「http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd」是正確的xsi:schemaLocation。 apache.org/pom.html – rektide

+0

修正了上面的小問題之後,我得到了一個成功的執行,但是不是將兩個依賴關係連接在一起,而是從pom中合併的片段覆蓋依賴關係中進行依賴關係。 :(:(:(巨大浪費時間。 – rektide

相關問題