From 39f0bfd5cea1daa0c0696f93d8a85b4603326b82 Mon Sep 17 00:00:00 2001 From: vladimirchavkin Date: Wed, 10 Sep 2025 10:43:55 +0300 Subject: [PATCH 1/2] DeveloperInfo plugin --- .idea/.gitignore | 8 ++++ .idea/misc.xml | 6 +++ .idea/vcs.xml | 6 +++ EmptyProject/pom.xml | 30 +++++++++++++ MavenPlugin/pom.xml | 45 +++++++++++++++++++ .../java/org/plugin/DeveloperInfoMojo.java | 27 +++++++++++ 6 files changed, 122 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 MavenPlugin/src/main/java/org/plugin/DeveloperInfoMojo.java diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..a818314 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/EmptyProject/pom.xml b/EmptyProject/pom.xml index 0b30830..dcd6f54 100644 --- a/EmptyProject/pom.xml +++ b/EmptyProject/pom.xml @@ -14,4 +14,34 @@ UTF-8 + + + jdoe + John Doe + jdoe@example.com + + architect + developer + + + + + + + + org.plugin + MavenPlugin + 1.0-SNAPSHOT + + + developer-info + validate + + developer-info + + + + + + \ No newline at end of file diff --git a/MavenPlugin/pom.xml b/MavenPlugin/pom.xml index 9f5cd58..9360d6a 100644 --- a/MavenPlugin/pom.xml +++ b/MavenPlugin/pom.xml @@ -7,11 +7,56 @@ org.plugin MavenPlugin 1.0-SNAPSHOT + maven-plugin 17 17 UTF-8 + 3.9.9 + 3.15.0 + 2.4.0 + + + org.apache.maven + maven-plugin-api + ${maven.plugin.api} + provided + + + org.apache.maven.plugin-tools + maven-plugin-annotations + ${maven.plugin.annotations} + provided + + + org.apache.maven + maven-core + ${maven.plugin.api} + provided + + + + + + + org.apache.maven.plugins + maven-plugin-plugin + 3.15.1 + + plugin + + + + default-descriptor + + descriptor + + + + + + \ No newline at end of file diff --git a/MavenPlugin/src/main/java/org/plugin/DeveloperInfoMojo.java b/MavenPlugin/src/main/java/org/plugin/DeveloperInfoMojo.java new file mode 100644 index 0000000..a74ea9d --- /dev/null +++ b/MavenPlugin/src/main/java/org/plugin/DeveloperInfoMojo.java @@ -0,0 +1,27 @@ +package org.plugin; + +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.project.MavenProject; + +import java.util.List; + +@Mojo(name = "developer-info") +public class DeveloperInfoMojo extends AbstractMojo { + + @Parameter(defaultValue = "${project}", readonly = true, required = true) + private MavenProject mavenProject; + + @Override + public void execute() throws MojoExecutionException, MojoFailureException { + getLog().info("Developer Information"); + mavenProject.getDevelopers().forEach(developer -> { + getLog().info("ID: " + developer.getId()); + getLog().info("Name: " + developer.getName()); + getLog().info("Email: " + developer.getEmail()); + getLog().info("Roles: " + String.join(", ", developer.getRoles())); + }); + } \ No newline at end of file From ba5b4b34a8b2c3d9a4c181931ecd4a6d1ec9927c Mon Sep 17 00:00:00 2001 From: vladimirchavkin Date: Sat, 20 Sep 2025 10:38:48 +0300 Subject: [PATCH 2/2] DeveloperInfo plugin. Added null and empty checking --- .../java/org/plugin/DeveloperInfoMojo.java | 46 ++++++++++++++++--- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/MavenPlugin/src/main/java/org/plugin/DeveloperInfoMojo.java b/MavenPlugin/src/main/java/org/plugin/DeveloperInfoMojo.java index a74ea9d..b71613d 100644 --- a/MavenPlugin/src/main/java/org/plugin/DeveloperInfoMojo.java +++ b/MavenPlugin/src/main/java/org/plugin/DeveloperInfoMojo.java @@ -3,13 +3,15 @@ import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; +import java.util.Collections; import java.util.List; -@Mojo(name = "developer-info") +@Mojo(name = "developer-info", defaultPhase = LifecyclePhase.VALIDATE) public class DeveloperInfoMojo extends AbstractMojo { @Parameter(defaultValue = "${project}", readonly = true, required = true) @@ -18,10 +20,40 @@ public class DeveloperInfoMojo extends AbstractMojo { @Override public void execute() throws MojoExecutionException, MojoFailureException { getLog().info("Developer Information"); - mavenProject.getDevelopers().forEach(developer -> { - getLog().info("ID: " + developer.getId()); - getLog().info("Name: " + developer.getName()); - getLog().info("Email: " + developer.getEmail()); - getLog().info("Roles: " + String.join(", ", developer.getRoles())); + + List developers = mavenProject.getDevelopers(); + if (developers == null) { + developers = Collections.emptyList(); + } + + developers.forEach(developer -> { + String devId = developer.getId(); + if (devId == null || devId.trim().isEmpty()) { + devId = "Unknown"; + } + getLog().info("ID: " + devId); + + String name = developer.getName(); + if (name == null || name.trim().isEmpty()) { + name = "Anonymous Developer"; + } + getLog().info("Name: " + name); + + String email = developer.getEmail(); + if (email == null || email.trim().isEmpty()) { + email = "no-email@unknown.com"; + } + getLog().info("Email: " + email); + + List roles = developer.getRoles(); + if (roles == null || roles.isEmpty()) { + roles = Collections.singletonList("default-role"); + } + getLog().info("Roles: " + String.join(", ", roles)); }); - } \ No newline at end of file + + if (developers.isEmpty()) { + getLog().info("No developers found in the project."); + } + } +} \ No newline at end of file