[gradle-debian-helper] 01/08: New Task debianMavenPom for generating POMs
Kai-Chung Yan
seamlik-guest at moszumanska.debian.org
Sat Oct 22 11:42:42 UTC 2016
This is an automated email from the git hooks/post-receive script.
seamlik-guest pushed a commit to branch master
in repository gradle-debian-helper.
commit fdad25feb67b7f29f9b816bc10a079b6cdd82e47
Author: Kai-Chung Yan (殷啟聰) <seamlikok at gmail.com>
Date: Tue Sep 6 21:20:24 2016 +0800
New Task debianMavenPom for generating POMs
---
gradle-helper-plugin/pom.xml | 14 ++++
.../java/org/debian/gradle/DebianHelperPlugin.java | 20 ++++-
.../java/org/debian/gradle/tasks/MavenPom.java | 93 ++++++++++++++++++++++
3 files changed, 126 insertions(+), 1 deletion(-)
diff --git a/gradle-helper-plugin/pom.xml b/gradle-helper-plugin/pom.xml
index 8bbc6f1..d09a153 100644
--- a/gradle-helper-plugin/pom.xml
+++ b/gradle-helper-plugin/pom.xml
@@ -79,6 +79,20 @@
<version>2.4.0</version>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>org.gradle</groupId>
+ <artifactId>gradle-maven</artifactId>
+ <version>${gradle.version}</version>
+ <scope>system</scope>
+ <systemPath>${gradle.libs}/gradle-maven.jar</systemPath>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <version>3.x</version>
+ <scope>system</scope>
+ <systemPath>/usr/share/java/maven-model-3.x.jar</systemPath>
+ </dependency>
</dependencies>
<!--
diff --git a/gradle-helper-plugin/src/main/java/org/debian/gradle/DebianHelperPlugin.java b/gradle-helper-plugin/src/main/java/org/debian/gradle/DebianHelperPlugin.java
index 0a2b6f6..7383bf6 100644
--- a/gradle-helper-plugin/src/main/java/org/debian/gradle/DebianHelperPlugin.java
+++ b/gradle-helper-plugin/src/main/java/org/debian/gradle/DebianHelperPlugin.java
@@ -16,13 +16,18 @@
package org.debian.gradle;
+import org.debian.gradle.tasks.MavenPom;
import org.gradle.api.Action;
+import org.gradle.api.invocation.Gradle;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
-import org.gradle.api.invocation.Gradle;
+import org.gradle.api.Task;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.HashMap;
+import java.util.Map;
+
/**
* Gradle plugin installing the Debian repository before those defined in the build script.
*/
@@ -40,6 +45,19 @@ public class DebianHelperPlugin implements Plugin<Gradle> {
log.info("\tAdding Debian repository to project '" + project.getName() + "'");
project.getRepositories().addFirst(repository);
project.getBuildscript().getRepositories().addFirst(repository);
+ project.afterEvaluate(new Action<Project>() {
+ @Override
+ public void execute(Project project) {
+ if (project.getPluginManager().hasPlugin("java")) {
+ log.info("\tAdding task debianMavenPom to project '" + project.getName() + "'");
+ project.getPluginManager().apply("maven");
+ Map<String, Class> debianMavenPomTaskOptions = new HashMap<String, Class>();
+ debianMavenPomTaskOptions.put("type", MavenPom.class);
+ project.task(debianMavenPomTaskOptions, "debianMavenPom");
+ ((Task)(project.getTasksByName("jar", false).toArray()[0])).dependsOn("debianMavenPom");
+ }
+ }
+ });
}
});
diff --git a/gradle-helper-plugin/src/main/java/org/debian/gradle/tasks/MavenPom.java b/gradle-helper-plugin/src/main/java/org/debian/gradle/tasks/MavenPom.java
new file mode 100644
index 0000000..4295a76
--- /dev/null
+++ b/gradle-helper-plugin/src/main/java/org/debian/gradle/tasks/MavenPom.java
@@ -0,0 +1,93 @@
+/**
+ * Copyright 2016 Kai-Chung Yan (殷啟聰)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.debian.gradle.tasks;
+
+import org.apache.maven.model.Dependency;
+import org.codehaus.groovy.runtime.MethodClosure;
+import org.codehaus.groovy.runtime.NullObject;
+import org.gradle.api.DefaultTask;
+import org.gradle.api.plugins.BasePluginConvention;
+import org.gradle.api.plugins.MavenPluginConvention;
+import org.gradle.api.tasks.OutputFile;
+import org.gradle.api.tasks.TaskAction;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.Comparator;
+
+public class MavenPom extends DefaultTask {
+
+ private void sortPomDependencies(org.gradle.api.artifacts.maven.MavenPom pom) {
+ Collections.sort(
+ pom.getDependencies(),
+ new Comparator<Object>() {
+ @Override
+ public int compare(Object o1, Object o2) {
+ Dependency d1 = (Dependency) o1;
+ Dependency d2 = (Dependency) o2;
+ if (d1.getScope().compareTo(d2.getScope()) != 0) {
+ return d1.getScope().compareTo(d2.getScope());
+ } else if (d1.getGroupId().compareTo(d2.getGroupId()) != 0) {
+ return d1.getGroupId().compareTo(d2.getGroupId());
+ } else if (d1.getArtifactId().compareTo(d2.getArtifactId()) != 0) {
+ return d1.getArtifactId().compareTo(d2.getArtifactId());
+ } else {
+ return d1.getVersion().compareTo(d2.getVersion());
+ }
+ }
+
+ @Override
+ public boolean equals(Object obj) { return false; }
+ }
+ );
+ }
+
+ private File getDestinationPomDir() {
+ return new File(getProject().getBuildDir(), "debian");
+ }
+
+ @OutputFile
+ private File getDestinationPomFile() {
+ return new File(
+ getDestinationPomDir(),
+ getProject().getConvention()
+ .getPlugin(BasePluginConvention.class)
+ .getArchivesBaseName() + ".pom"
+ );
+ }
+
+ @TaskAction
+ protected void generatePom() {
+ final org.gradle.api.artifacts.maven.MavenPom pom =
+ getProject().getConvention()
+ .getPlugin(MavenPluginConvention.class)
+ .pom();
+ getLogger().info("Configuring POM");
+ pom.project(new MethodClosure(
+ new Object() { public void execute() {} },
+ "execute"
+ ));
+ pom.setArtifactId(getProject().getConvention()
+ .getPlugin(BasePluginConvention.class)
+ .getArchivesBaseName());
+ getLogger().info("Sorting POM dependencies");
+ final org.gradle.api.artifacts.maven.MavenPom effectivePom = pom.getEffectivePom();
+ sortPomDependencies(effectivePom);
+ getDestinationPomDir().mkdir();
+ effectivePom.writeTo(getDestinationPomFile());
+ }
+}
\ No newline at end of file
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/gradle-debian-helper.git
More information about the pkg-java-commits
mailing list