[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