Comment faire pour que gradle génère un pom valide.fichier xml à la racine d'un projet maven utilisateurs?

alors que depuis seulement deux jours maintenant, je suis certainement vendu sur l'utilisation de gradle pour tous mes projets Java, et drop pom.xml à partir de la racine de tous mes projets.

cependant, je voudrais rester maven-compatible, dans le sens où je voudrais qu'une tâche de Grad soit capable de générer un pom approprié.xml à la racine du projet si l'utilisateur le souhaitez.

en ce moment, la seule référence à une pom.xml que j'ai est dans cette section de la construction.gradle fichier (ce qui est, avec très peu de modifications, ce qui est trouvé ici):

uploadArchives {
    repositories {
        mavenDeployer {
            beforeDeployment {
                MavenDeployment deployment -> signing.signPom(deployment);
            }

            repository(url: sonatypeRepoURI) {
                authentication(userName: sonatypeUsername,
                    password: sonatypePassword);
            }

            pom.project {
                name "${name}";
                packaging "bundle";
                description "${description}";
                url "${projectURL}";

                scm {
                    url "${gitroscm}";
                    connection "${gitroscm}";
                    developerConnection "${gitrwscm}";
                }

                licenses {
                    license {
                        name "Lesser General Public License, version 3 or greater";
                        url "http://www.gnu.org/licenses/lgpl.html";
                        distribution "repo";
                    }
                }

                developers {
                    developer {
                        id "whocares";
                        name "whocares";
                        email "whocares";
                    }
                }
            }
        }
    }
}

Comment puis-je extraire le pom.project de ce très profondément imbriqués construire dans une tâche qui pourrait générer un pom.xml (par défaut, le pom généré.xml est en build/poms/pom-default.xml et semble assez bon)?

Plus important encore, est-il possible d'extraire pom.project de uploadArchives tout en étant capable de s'y référer?

Lien complet vers la construction.gradle fichier: ici.

33
demandé sur fge 2013-06-24 21:59:22

2 réponses

Vous pouvez utiliser le gradle plugin maven. Cela ajoute de l' pom méthode de convention à votre projet, que vous pouvez utiliser dans une tâche pour générer un pom.xml fichier,

apply plugin: 'maven'

task createPom << {
    pom {
        project {
            groupId 'org.example'
            artifactId 'test'
            version '1.0.0'

            inceptionYear '2008'
            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")
}

vous pouvez Ensuite appeler gradle createPom pour générer le pom.xml dans la racine du projet. De toutes les choses dans la définition de pom, vous devriez vraiment fournir groupId,artifactId et version, d'autres s'amincit comme licenses ne sont pas important.

Vous pouvez aussi consulter les ce exemple pour un projet, la définition de certaines dépendances, et essayez de voir ce qu'il produit.

54
répondu jmruc 2013-06-24 19:49:35

voici ma version.gradle

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'maven'

repositories { 
mavenLocal() 
mavenCentral()
}

dependencies {

    compile 'org.springframework:spring-core:4.0.5.RELEASE'
    compile 'org.springframework:spring-webmvc:4.0.5.RELEASE'

    compile 'org.slf4j:slf4j-api:1.7.5'
    runtime 'org.slf4j:slf4j-log4j12:1.7.5'

    testCompile 'org.springframework:spring-test:4.0.5.RELEASE'

    testCompile 'junit:junit:4.11'
    testCompile "org.mockito:mockito-core:1.9.5"
    testCompile "org.hamcrest:hamcrest-library:1.3"

    testCompile 'javax.servlet:javax.servlet-api:3.0.1'
}
test {
  testLogging {
    // Show that tests are run in the command-line output
    events 'started', 'passed'
  }
}
task wrapper(type: Wrapper) { gradleVersion = '1.12' }
task createPom  {
    pom {
        project {
            groupId 'sg.test.spring.web.guide'
            artifactId 'sg-web-initial'
            version '1.0.0-SNAPSHOT'

            inceptionYear '2008'
            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")
}

vous pouvez nommer la tâche createPomanyTaskName comme vous le souhaitez. Ensuite, il suffit d'exécuter gradle clean ou grale build ou tout simplement gradle createPom.

Cela va générer pom.xml à la racine du projet. Bien que vous pouvez remplacer writeTo("pom.xml")writeTo("<anyDir>/newpom.xml").

La résultante de pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <groupId>sg.test.spring.web.guide</groupId>
    <artifactId>sg-web-initial</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <inceptionYear>2008</inceptionYear>
    <licenses>
        <license>
            <name>The Apache Software License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
            <distribution>repo</distribution>
        </license>
    </licenses>
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.0.5.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.0.5.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.5</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>1.9.5</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.0.5.RELEASE</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-library</artifactId>
            <version>1.3</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
6
répondu sanjeev 2015-06-02 09:17:07