2012-10-15 144 views
40

我有一個Gradle項目,我需要將它的所有依賴關係轉移到另一個Maven項目中使用。換句話說,我怎樣才能從build.gradle生成(或者可以生成)pom.xml?Gradle build.gradle到Maven pom.xml

回答

46

當使用Gradle's Maven plugin,該安裝任務自動添加到您的任務,並調用它總是會產生一個POM文件。

因此,如果您的build.gradle文件看起來像這樣:

apply plugin: 'java' 
apply plugin: 'maven' 

group = 'myGroup' 
// artifactId is taken by default, from folder name 
version = '0.1-SNAPSHOT' 

dependencies { 
    compile 'commons-lang:commons-lang:2.3' 
} 

可以調用gradle install它的文件夾中,你會發現在編譯/勁歌子文件夾中,文件名爲pom-其中將包含依賴關係的default.xml。此外,與POM一起構建的JAR將位於您的Maven本地回購站中。

+0

這應該是生成POM並在本地安裝工件的「官方」方式,尤其是當您要轉換一堆傳統的基於POM的模塊項目時。 –

18

因爲我不想在本地回購中安裝任何東西,所以在閱讀文檔後,我確實遵循了相關規定。 添加在您的build.gradle

apply plugin: 'maven' 

group = 'com.company.root' 
// artifactId is taken by default, from folder name 
version = '0.0.1-SNAPSHOT' 

task writeNewPom << { 
    pom { 
     project { 
      inceptionYear '2014' 
      licenses { 
       license { 
        name 'The Apache Software License, Version 2.0' 
        url 'http://www.apache.org/licenses/LICENSE-2.0.txt' 
        distribution 'repo' 
       } 
      } 
     } 
    }.writeTo("pom.xml") 
} 

運行它 gradle writeNewPom

@a_horse_with_no_name

gradle這個被用Groovy做可以嘗試結束後}項目區增加

build{ 
    plugins{ 
    plugin{ 
     groupId 'org.apache.maven.plugins' 
     artifactId 'maven-compiler-plugin' 
     configuration{ 
      source '1.8' 
      target '1.8' 
     } 
    } 
    } 
} 

沒有嘗試,狂猜!

+1

謝謝,dilbertside。就像一個魅力,在我的情況下) – WebComer

+1

這隻寫JARs到POM,但不創建一個完整的項目,也包括來自項目的來源。我如何獲得maven插件也可以將源代碼(和文本,資源...)目錄寫入POM中? –

+0

@dilbertside爲我工作。謝謝。 –

7

當你有沒有gradle這個安裝了「寫gradle這個任務來完成不是很的Userful而是與依賴條件安裝此100MB獸我所做的過濾器轉換gradle這個依賴於Maven依賴:

cat build.gradle\ 
| awk '{$1=$1};1'\ 
| grep -i "compile "\ 
| sed -e "s/^compile //Ig" -e "s/^testCompile //Ig"\ 
| sed -e "s/\/\/.*//g"\ 
| sed -e "s/files(.*//g"\ 
| grep -v ^$\ 
| tr -d "'"\ 
| sed -e "s/\([-_[:alnum:]\.]*\):\([-_[:alnum:]\.]*\):\([-+_[:alnum:]\.]*\)/<dependency>\n\t<groupId>\1<\/groupId>\n\t<artifactId>\2<\/artifactId>\n\t<version>\3<\/version>\n<\/dependency>/g" 

這種轉換

compile 'org.slf4j:slf4j-api:1.7.+' 
compile 'ch.qos.logback:logback-classic:1.1.+' 
compile 'commons-cli:commons-cli:1.3' 

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.7.+</version> 
</dependency> 
<dependency> 
    <groupId>ch.qos.logback</groupId> 
    <artifactId>logback-classic</artifactId> 
    <version>1.1.+</version> 
</dependency> 
<dependency> 
    <groupId>commons-cli</groupId> 
    <artifactId>commons-cli</artifactId> 
    <version>1.3</version> 
</dependency> 

應該手工創建pom.xml的其餘部分。