2012-10-15 15 views
40

Ho un progetto Gradle e ho bisogno che tutte le sue dipendenze vengano trasferite e utilizzate con un altro progetto Maven. In altre parole, come posso generare (o posso generare) pom.xml da build.gradle?Gradle build.gradle to Maven pom.xml

risposta

46

Quando si utilizza Gradle's Maven plugin, il compito installare viene aggiunto automaticamente ai vostri compiti, e chiamandolo sarà sempre generare un file POM.

Quindi, se il file build.gradle assomiglia a questo:

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' 
} 

è possibile chiamare gradle install nella sua cartella, si trova nella build/pon sottocartella, un file chiamato Pommerening default.xml che conterrà le dipendenze. Inoltre, il JAR compilato insieme al POM si troverà nel repository locale Maven.

+0

questo dovrebbe essere il modo "ufficiale" per generare POM e installare gli artefatti localmente, specialmente quando si converte una serie di progetti di moduli legacy basati su POM. –

18

Come non volevo installare nulla nel mio repository locale, ho seguito, invece, dopo aver letto i documenti. Aggiungi nella tua 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") 
} 

per eseguirlo gradle writeNewPom

@a_horse_with_no_name

Gradle stato fatto con groove può provare ad aggiungere dopo la fine del blocco} progetto

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

non ha provato, indovinare selvaggia!

+1

Grazie, dilbertside. Come un incantesimo, nel mio caso) – WebComer

+1

Scrive solo i JAR nel POM, ma non crea un progetto completo che include anche le origini del progetto. Come faccio a ottenere il plugin Maven per scrivere anche le directory di origine (e testo, risorse ...) nel POM? –

+0

@dilbertside Ha funzionato per me. Grazie. –

7

Quando non hai Gradle installato il "scrivere compito Gradle per fare questo non è molto userful Invece di installare questo 100MB bestia con dependecies ho fatto il filtro di conversione dipendenze Gradle a Maven dipendenze:.

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" 

questo trasforma

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

in

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

Il resto di pom.xml dovrebbe essere creato a mano.

Problemi correlati