web-dev-qa-db-fra.com

Comment faire gradle générer un fichier pom.xml valide à la racine d'un projet pour les utilisateurs de maven?

Bien que cela ne dure que deux jours maintenant, je suis définitivement convaincu d'utiliser gradle pour tous mes projets Java, et déposez pom.xml à la racine de tous mes projets.

Cependant, je voudrais rester compatible avec maven, dans le sens où j'aimerais qu'une tâche gradle puisse générer un pom.xml approprié à la racine du projet si l'utilisateur le souhaite.

En ce moment, la seule référence à un pom.xml que j'ai est dans cette section du fichier build.gradle (c'est, avec très peu de modifications, ce qui se trouve 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 extraire le pom.project de cette construction très profondément imbriquée dans une tâche qui pourrait générer un pom.xml (par défaut, le pom.xml généré est dans build/poms/pom-default.xml et semble assez bon)?

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

Lien complet vers le fichier build.gradle: ici .

39
fge

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

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")
}

Ensuite, vous appelez gradle createPom pour générer le pom.xml à la racine du projet. De toutes les choses dans la définition de pom, vous devez vraiment fournir groupId, artifactId et version, d'autres fins comme licenses ne sont pas si importants.

Vous pouvez également consulter cet exemple pour une définition de projet avec quelques dépendances, et essayez de l'exécuter pour voir ce qu'il produit.

61
jmruc

Voici mon build.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 createPom en anyTaskName comme vous le souhaitez. Ensuite, exécutez simplement gradle clean Ou grale build Ou simplement gradle createPom.

Cela le générera en tant que pom.xml à la racine du projet. Bien que vous puissiez remplacer writeTo("pom.xml") par writeTo("<anyDir>/newpom.xml").

Le pom.xml résultant:

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