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