You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by kw...@apache.org on 2021/08/31 17:10:50 UTC

[jackrabbit-filevault-package-maven-plugin] branch bugfix/validate-classifier updated: JCRVLT-553 correctly validate in case there is no main artifact

This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch bugfix/validate-classifier
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault-package-maven-plugin.git


The following commit(s) were added to refs/heads/bugfix/validate-classifier by this push:
     new 152f636  JCRVLT-553 correctly validate in case there is no main artifact
152f636 is described below

commit 152f63622379c6127f72ecac55429173606bfbda
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Tue Aug 31 19:10:44 2021 +0200

    JCRVLT-553 correctly validate in case there is no main artifact
    
    also evaluate parameter "classifier" in mojos validate-files and
    validate-packages
---
 .../packaging/AbstractMetadataPackageMojo.java     | 17 ++++--
 .../maven/packaging/ValidateFilesMojo.java         |  9 +++-
 .../maven/packaging/ValidatePackageMojo.java       | 61 +++++++++++++---------
 .../filevault/maven/packaging/VaultMojo.java       |  2 +-
 .../it/GenerateMetadataMultiModuleIT.java          |  3 +-
 .../maven/packaging/it/ProjectBuilder.java         | 18 +++++--
 .../maven/packaging/it/ValidatePackageIT.java      | 10 ++--
 7 files changed, 79 insertions(+), 41 deletions(-)

diff --git a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractMetadataPackageMojo.java b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractMetadataPackageMojo.java
index 4708063..5cb90b1 100644
--- a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractMetadataPackageMojo.java
+++ b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractMetadataPackageMojo.java
@@ -181,19 +181,28 @@ public abstract class AbstractMetadataPackageMojo extends AbstractMojo {
         }
     }
 
+    /**
+     * 
+     * @param isForWriting
+     * @return the (potentially classifier-specific) work directory
+     */
     File getWorkDirectory(boolean isForWriting) {
+        return getWorkDirectory(getLog(), isForWriting, workDirectory, classifier);
+    }
+
+    static File getWorkDirectory(Log log, boolean isForWriting, File defaultWorkDirectory, String classifier) {
         if (StringUtils.isNotBlank(classifier)) {
-            File classifierWorkDirectory = new File(workDirectory.toString() + "-" + classifier);
+            File classifierWorkDirectory = new File(defaultWorkDirectory.toString() + "-" + classifier);
             if (!isForWriting) {
                 // fall back to regular work directory if work dir for classifier does not exist
                 if (!classifierWorkDirectory.exists()) {
-                    getLog().warn("Using regular workDirectory " + workDirectory + " as classifier specific workDirectory does not exist at " + classifierWorkDirectory);
-                    return workDirectory;
+                    log.warn("Using regular workDirectory " + defaultWorkDirectory + " as classifier specific workDirectory does not exist at " + classifierWorkDirectory);
+                    return defaultWorkDirectory;
                 }
             }
             return classifierWorkDirectory;
         } else {
-            return workDirectory;
+            return defaultWorkDirectory;
         }
     }
 
diff --git a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/ValidateFilesMojo.java b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/ValidateFilesMojo.java
index 3b7db40..75891a2 100644
--- a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/ValidateFilesMojo.java
+++ b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/ValidateFilesMojo.java
@@ -98,6 +98,13 @@ public class ValidateFilesMojo extends AbstractValidateMojo {
             defaultValue = "${project.build.directory}/vault-work",
             required = true)
     File workDirectory;
+    
+    /**
+     * If given validates files built for the given classifier. This modifies the {@link #workDirectory} and appends the suffix {@code -<classifier>} to it.
+     */
+    @Parameter(property = "vault.classifier")
+    protected String classifier = "";
+
     //-----
     // End: Copied from AbstractMetadataPackageMojo
     // -----
@@ -182,7 +189,7 @@ public class ValidateFilesMojo extends AbstractValidateMojo {
             if (metaInfoVaultSourceDirectory != null) {
                 metaInfRootDirectory = metaInfoVaultSourceDirectory.getParentFile();
             }
-            File generatedMetaInfRootDirectory = new File(workDirectory, Constants.META_INF);
+            File generatedMetaInfRootDirectory = new File(AbstractMetadataPackageMojo.getWorkDirectory(getLog(), false, workDirectory, classifier), Constants.META_INF);
             getLog().info("Validate files in generatedMetaInfRootDirectory " + getProjectRelativeFilePath(generatedMetaInfRootDirectory.toPath()) + " and metaInfRootDir " + getProjectRelativeFilePath(generatedMetaInfRootDirectory.toPath()));
             ValidationContext context = new DirectoryValidationContext(buildContext.isIncremental(), generatedMetaInfRootDirectory, metaInfRootDirectory, resolver, getLog());
             ValidationExecutor executor = validationExecutorFactory.createValidationExecutor(context, false, false, getValidatorSettingsForPackage(context.getProperties().getId(), false));
diff --git a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/ValidatePackageMojo.java b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/ValidatePackageMojo.java
index 1fcd99a..93b73ae 100644
--- a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/ValidatePackageMojo.java
+++ b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/ValidatePackageMojo.java
@@ -44,6 +44,7 @@ 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.plugins.annotations.ResolutionScope;
+import org.codehaus.plexus.util.StringUtils;
 import org.jetbrains.annotations.Nullable;
 import org.xml.sax.SAXException;
 
@@ -57,7 +58,7 @@ public class ValidatePackageMojo extends AbstractValidateMojo {
 
     /** The main package file to validate. By default will be the project's main artifact (in case a project is given). If empty the main artifact will not be validated
      * but only the attached artifacts with the given {@link #classifiers}. */
-    @Parameter(property = "vault.packageToValidate", defaultValue = "${project.artifact.file}", required=true)
+    @Parameter(property = "vault.packageToValidate", defaultValue = "${project.artifact.file}")
     private File packageFile;
 
     /** If set to {@code true} always executes all validators also for all sub packages (recursively). */
@@ -72,41 +73,51 @@ public class ValidatePackageMojo extends AbstractValidateMojo {
     private List<Artifact> attachedArtifacts;
 
     /**
-     * If given validates all attached artifacts with one of the given classifiers in addition to the one given in {@link #packageFile}.
+     * If given validates all attached artifacts with one of the given classifiers (potentially in addition to the one given in {@link #packageFile}).
+     * This list is merged with the classifier given in parameter {@link #classifier}.
      */
     @Parameter()
     private List<String> classifiers;
 
+    /**
+     * The given classifier is merged with the ones given in parameter {@link #classifiers) and all matching attached artifacts are validated (potentially in addition to the one given in {@link #packageFile}).
+     */
+    @Parameter(property = "vault.classifier")
+    protected String classifier = "";
+
     public ValidatePackageMojo() {
     }
 
     @Override
     public void doExecute(ValidationHelper validationHelper) throws MojoExecutionException, MojoFailureException {
-        try {
-            boolean foundPackage = false;
-            if (packageFile != null && !packageFile.toString().isEmpty() && !packageFile.isDirectory()) {
-                validatePackage(validationHelper, packageFile.toPath());
-                foundPackage = true;
-            } 
-            if (!attachedArtifacts.isEmpty()) {
-                for (Artifact attached : attachedArtifacts) {
-                    // validate attached artifacts with given classifiers
-                    if (classifiers.contains(attached.getClassifier())) {
-                        validatePackage(validationHelper, attached.getFile().toPath());
-                        foundPackage = true;
-                    }
+        boolean foundPackage = false;
+        if (packageFile != null && !packageFile.toString().isEmpty() && !packageFile.isDirectory()) {
+            validatePackage(validationHelper, packageFile.toPath());
+            foundPackage = true;
+        } 
+        if (!attachedArtifacts.isEmpty()) {
+            List<String> classifiersToCompare = new ArrayList<>();
+            if (classifiers != null) {
+                classifiersToCompare.addAll(classifiers);
+            }
+            if (StringUtils.isNotBlank(classifier)) {
+                classifiersToCompare.add(classifier);
+            }
+            for (Artifact attached : attachedArtifacts) {
+                // validate attached artifacts with given classifiers
+                if (classifiersToCompare.contains(attached.getClassifier())) {
+                    validatePackage(validationHelper, attached.getFile().toPath());
+                    foundPackage = true;
                 }
-            } 
-            if (!foundPackage) {
-                getLog().warn("No packages found to validate.");
             }
-            validationHelper.failBuildInCaseOfViolations(failOnValidationWarnings);
-        } catch (IOException | ParserConfigurationException | SAXException e) {
-            throw new MojoExecutionException("Could not validate package '" + packageFile + "': " + e.getMessage(), e);
+        } 
+        if (!foundPackage) {
+            getLog().warn("No packages found to validate.");
         }
+        validationHelper.failBuildInCaseOfViolations(failOnValidationWarnings);
     }
 
-    private void validatePackage(ValidationHelper validationHelper, Path file) throws IOException, ParserConfigurationException, SAXException, MojoExecutionException {
+    private void validatePackage(ValidationHelper validationHelper, Path file) throws MojoExecutionException {
         getLog().info("Start validating package " + getProjectRelativeFilePath(file) + "...");
 
         // open file to extract the meta data for the validation context
@@ -123,13 +134,15 @@ public class ValidatePackageMojo extends AbstractValidateMojo {
                 throw new MojoExecutionException("No registered validators found!");
             }
             getLog().debug("End validating package " + getProjectRelativeFilePath(file) + ".");
+        } catch (IOException | ParserConfigurationException | SAXException e) {
+            throw new MojoExecutionException("Could not validate package '" + file + "': " + e.getMessage(), e);
         }
     }
 
     private void validateArchive(ValidationHelper validationHelper, Archive archive, Path path, ArchiveValidationContextImpl context,
             ValidationExecutor executor) throws IOException, SAXException, ParserConfigurationException {
         validateEntry(validationHelper, archive, archive.getRoot(), Paths.get(""), path, context, executor);
-        validationHelper.printMessages(executor.done(), getLog(), buildContext, packageFile.toPath());
+        validationHelper.printMessages(executor.done(), getLog(), buildContext, path);
     }
 
     private void validateEntry(ValidationHelper validationHelper, Archive archive, Archive.Entry entry, Path entryPath, Path packagePath, ArchiveValidationContextImpl context,
@@ -187,7 +200,7 @@ public class ValidatePackageMojo extends AbstractValidateMojo {
         } else {
             messages.add(new ValidationViolation(ValidationMessageSeverity.WARN, "Found unexpected file outside of " + Constants.ROOT_DIR + " and " + Constants.META_INF, entryPath, packagePath, null, 0,0, null));
         }
-        validationHelper.printMessages(messages, getLog(), buildContext, packageFile.toPath());
+        validationHelper.printMessages(messages, getLog(), buildContext, packagePath);
     }
 
 }
diff --git a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/VaultMojo.java b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/VaultMojo.java
index f0189b1..5dc5f77 100644
--- a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/VaultMojo.java
+++ b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/VaultMojo.java
@@ -73,7 +73,7 @@ public class VaultMojo extends AbstractSourceAndMetadataPackageMojo {
 
     private static final String PACKAGE_TYPE = "zip";
 
-    static final String PACKAGE_EXT = "." + PACKAGE_TYPE;
+    public static final String PACKAGE_EXT = "." + PACKAGE_TYPE;
 
     private static final Collection<File> STATIC_META_INF_FILES = Arrays.asList(new File(Constants.META_DIR, Constants.CONFIG_XML),
             new File(Constants.META_DIR, Constants.SETTINGS_XML));
diff --git a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/GenerateMetadataMultiModuleIT.java b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/GenerateMetadataMultiModuleIT.java
index 5bec415..65d78de 100644
--- a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/GenerateMetadataMultiModuleIT.java
+++ b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/GenerateMetadataMultiModuleIT.java
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.filevault.maven.packaging.it;
 
 import java.nio.file.Paths;
 
+import org.apache.jackrabbit.filevault.maven.packaging.VaultMojo;
 import org.junit.Test;
 
 public class GenerateMetadataMultiModuleIT {
@@ -47,7 +48,7 @@ public class GenerateMetadataMultiModuleIT {
     public void multi_module_build_clean_package() throws Exception {
         new ProjectBuilder()
                 .setTestProjectDir("/generate-metadata-multimodule")
-                .setTestPackageFile("container/" + ProjectBuilder.TEST_PACKAGE_DEFAULT_NAME)
+                .setTestPackageFile("container/" + ProjectBuilder.TEST_PACKAGE_DEFAULT_NAME + VaultMojo.PACKAGE_EXT)
                 .setTestGoals("clean", "package")
                 .setVerifyPackageContents(false)
                 .build()
diff --git a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ProjectBuilder.java b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ProjectBuilder.java
index ca10153..608f73c 100644
--- a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ProjectBuilder.java
+++ b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ProjectBuilder.java
@@ -49,6 +49,7 @@ import java.util.zip.ZipFile;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.input.BoundedReader;
+import org.apache.jackrabbit.filevault.maven.packaging.VaultMojo;
 import org.apache.maven.it.VerificationException;
 import org.apache.maven.it.Verifier;
 import org.apache.maven.model.Model;
@@ -79,7 +80,7 @@ public class ProjectBuilder {
 
     public static final String TEST_PROJECTS_ROOT = "target/test-classes/test-projects";
 
-    static final String TEST_PACKAGE_DEFAULT_NAME = "target/package-plugin-test-pkg-1.0.0-SNAPSHOT.zip";
+    static final String TEST_PACKAGE_DEFAULT_NAME = "target/package-plugin-test-pkg-1.0.0-SNAPSHOT";
 
     static final Pattern PLACEHOLDER_PATTERN = Pattern.compile("%(\\d*)%");
 
@@ -158,9 +159,9 @@ public class ProjectBuilder {
         return this;
     }
 
-    public ProjectBuilder setTestProjectDir(File testProjectDir) {
+    public ProjectBuilder setTestProjectDir(File testProjectDir, String classifier) {
         this.testProjectDir = testProjectDir;
-        this.testPackageFile = new File(testProjectDir, TEST_PACKAGE_DEFAULT_NAME);
+        this.testPackageFile = new File(testProjectDir, TEST_PACKAGE_DEFAULT_NAME + (StringUtils.isNotBlank(classifier)?"-"+classifier:"") + VaultMojo.PACKAGE_EXT);
 
         // if we ever need different files, just create the setters.
         this.expectedFilesFile = new File(testProjectDir, "expected-files.txt");
@@ -174,11 +175,18 @@ public class ProjectBuilder {
         return this;
     }
 
+    public ProjectBuilder setTestProjectDir(File testProjectDir) {
+        return setTestProjectDir(testProjectDir, null);
+    }
+
+    public ProjectBuilder setTestProjectDir(String relPath, String classifier) {
+        return setTestProjectDir(new File(testProjectsRoot, relPath), classifier);
+    }
+
     public ProjectBuilder setTestProjectDir(String relPath) {
-        return setTestProjectDir(new File(testProjectsRoot, relPath));
+        return setTestProjectDir(relPath, null);
     }
 
-    
     public File getTestProjectDir() {
         return testProjectDir;
     }
diff --git a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ValidatePackageIT.java b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ValidatePackageIT.java
index 2733e58..0bb753f 100644
--- a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ValidatePackageIT.java
+++ b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ValidatePackageIT.java
@@ -33,16 +33,16 @@ public class ValidatePackageIT {
 
     private static final String TEST_PROJECT_NAME = "/validator-projects/";
 
-    private ProjectBuilder verify(String projectName, boolean expectToFail) throws VerificationException, IOException {
+    private ProjectBuilder verify(String projectName, boolean expectToFail, String classifier) throws VerificationException, IOException {
         return new ProjectBuilder()
-                .setTestProjectDir(TEST_PROJECT_NAME + projectName)
+                .setTestProjectDir(TEST_PROJECT_NAME + projectName, classifier)
                 .setBuildExpectedToFail(expectToFail)
                 .build();
     }
 
     @Test
     public void testInvalidProject() throws Exception {
-        ProjectBuilder projectBuilder = verify("invalid-project", true);
+        ProjectBuilder projectBuilder = verify("invalid-project", true, null);
         projectBuilder.verifyExpectedLogLines(Paths.get("META-INF", "vault", "filter.xml").toString());
         File csvReportFile = new File(projectBuilder.getTestProjectDir(), "report.csv");
         Assert.assertTrue(csvReportFile.exists());
@@ -53,11 +53,11 @@ public class ValidatePackageIT {
  
     @Test
     public void testValidProjectWithZip() throws Exception {
-        verify("project-with-zip", false);
+        verify("project-with-zip", false, null);
     }
 
     @Test
     public void testValidProjectWithClassifier() throws Exception {
-        verify("classifier-project", false);
+        verify("classifier-project", false, "test");
     }
 }