diff --git a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractValidateMojo.java b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractValidateMojo.java
index 0666b82..05d1b20 100644
--- a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractValidateMojo.java
+++ b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractValidateMojo.java
@@ -56,6 +56,8 @@
  * Common ancestor for all validation related mojos
  */
 public abstract class AbstractValidateMojo extends AbstractMojo {
+    public static final String IGNORE_GAV = "ignore";
+
     @Parameter(property = "vault.skipValidation", defaultValue = "false", required = true)
     boolean skipValidation;
 
@@ -144,7 +146,9 @@
 
     /**
      * Mapping of package dependencies given via group and name to Maven identifiers for enhanced validation.
-     * Each entry must have the format {@code <group>:<name>=<groupId>:<artifactId>}
+     * Each entry must have the format {@code <group>:<name>=<groupId>:<artifactId>}.
+     * To disable lookup (e.g. because referenced artifact is not available in a Maven repository) use {@code <group>:<name>=ignore}.
+     * This will also prevent the WARNING which would be otherwise be emitted.
      */
     @Parameter(property = "vault.package.dependency.to.maven.ga")
     protected Collection<String> mapPackageDependencyToMavenGa;
@@ -163,6 +167,11 @@
     protected final ValidationHelper validationHelper;
 
     protected DependencyResolver resolver;
+    
+    /**
+     * Artificial Maven artifact which indicates that it should not be considered for further lookup!
+     */
+    public static final Artifact IGNORE_ARTIFACT = new DefaultArtifact("ignore", "ignore", "1.0", "", "", "", null);
 
     public AbstractValidateMojo() {
         super();
@@ -175,7 +184,8 @@
         return mapPackageDependencyToMavenGa.stream()
                 .map(s -> s.split("=", 2))
                 .peek((p) -> { if(p.length != 2) { throw new IllegalArgumentException("Could not parse value"); } })
-                .collect(Collectors.toMap(a -> Dependency.fromString(a[0]), a -> { String[] mavenGA = a[1].split(":", 2); if(mavenGA.length != 2) { throw new IllegalArgumentException("Could not parse Maven group Id and artifact Id (must be separated by ':')"); } return new DefaultArtifact(mavenGA[0], mavenGA[1], "", "", "", "", null);} ));
+                // cannot use null values due to https://bugs.openjdk.java.net/browse/JDK-8148463 therefore rely on artificial IGNORE_ARTIFACT
+                .collect(Collectors.toMap(a -> Dependency.fromString(a[0]), a -> { if (a[1].equalsIgnoreCase(IGNORE_GAV)) { return IGNORE_ARTIFACT; } String[] mavenGA = a[1].split(":", 2); if(mavenGA.length != 2) { throw new IllegalArgumentException("Could not parse Maven group Id and artifact Id (must be separated by ':')"); } return new DefaultArtifact(mavenGA[0], mavenGA[1], "", "", "", "", null);} ));
     }
     @Override 
     public void execute() throws MojoExecutionException, MojoFailureException {
diff --git a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/validator/impl/context/DependencyResolver.java b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/validator/impl/context/DependencyResolver.java
index 1a43016..bb92031 100644
--- a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/validator/impl/context/DependencyResolver.java
+++ b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/validator/impl/context/DependencyResolver.java
@@ -24,6 +24,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.jackrabbit.filevault.maven.packaging.AbstractValidateMojo;
 import org.apache.jackrabbit.filevault.maven.packaging.MavenBasedPackageDependency;
 import org.apache.jackrabbit.vault.packaging.Dependency;
 import org.apache.jackrabbit.vault.packaging.PackageId;
@@ -100,6 +101,10 @@
         final String groupId;
         final String artifactId;
         Artifact artifact = mapPackageDependencyToMavenArtifact.get(dependency);
+        // is it special artifact which is supposed to be ignored?
+        if (artifact == AbstractValidateMojo.IGNORE_ARTIFACT) {
+            return null;
+        }
         // is it part of the mapping table?
         if (artifact != null) {
             groupId = artifact.getGroupId();
diff --git a/src/site/markdown/validators.md b/src/site/markdown/validators.md
index c9430f4..7b8c05a 100644
--- a/src/site/markdown/validators.md
+++ b/src/site/markdown/validators.md
@@ -37,12 +37,12 @@
   <validatorsSettings>
     <jackrabbit-filter>
       <isDisabled>false</isDisabled><!-- false is default, true disables the validator completely, all other setting are not relevant then -->
-      <defaultSeverity>error</defaultSeverity><!-- lower case enum values of .. />
+      <defaultSeverity>error</defaultSeverity>
       <options>
         <severityForUncoveredAncestorNodes>error</severityForUncoveredAncestorNodes>
       </options>
     </jackrabbit-filter>
-    <!-- later items potentially overwrite earlier items -->
+    <!-- succeeding items potentially overwrite preceding items -->
     <jackrabbit-filter:mygroup:mypackage>
       <isDisabled>true</isDisabled><!-- disable the validator for a specific package -->
     </jackrabbit-filter>
diff --git a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractValidateMojoTest.java b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractValidateMojoTest.java
index 0cabf0a..44c39b0 100644
--- a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractValidateMojoTest.java
+++ b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractValidateMojoTest.java
@@ -35,6 +35,15 @@
 public class AbstractValidateMojoTest {
 
     @Test
+    public void testValidMapWithIgnoredArtifacts() {
+        Assert.assertThat(AbstractValidateMojo.resolveMap(Arrays.asList("group1:name1=ignore", "group2:name2=groupId2:artifactId2")), 
+                Matchers.allOf(
+                    Matchers.hasEntry(Dependency.fromString("group1:name1"), AbstractValidateMojo.IGNORE_ARTIFACT),
+                    Matchers.hasEntry(Dependency.fromString("group2:name2"), new DefaultArtifact("groupId2", "artifactId2", "", "", "", "", null)),
+                    Matchers.aMapWithSize(2)));
+    }
+
+    @Test
     public void testValidMap() {
         Assert.assertThat(AbstractValidateMojo.resolveMap(Arrays.asList("group1:name1=groupId1:artifactId1", "group2:name2=groupId2:artifactId2")), 
                 Matchers.allOf(
