public Path getPath(List<String> keyAliases, Path defaultValue, Predicate<Path> constraint, String message) {
        AliasValueEntry candidate = getValue(keyAliases);
        if (candidate == null || StringUtils.isBlank(candidate.value)) {
            return defaultValue;
        }

        Path parsedPath = Paths.get(candidate.value);
        if (!constraint.test(parsedPath)) {
            throw InvalidOptionConfigurationException
                .constraintFailure(candidate.alias, "path", candidate.value, message);
        }
        return parsedPath;
    }
Parse a {@link Path} from the options using the key aliases. Note that this method does not guarantee
the file/path exists. Use a predicate for this such as {@link Predicates#fileExists()}.

@param keyAliases   the key aliases
@param defaultValue the default value
@param constraint   the constraint that the value should obey
@param message      a human-readable message to describe the constraint and display in the case of a
                    constraint violation.
@return the parsed path
@throws InvalidOptionConfigurationException if a constraint violation occurs.
@see Predicates#fileExists() File exists predicate.
common/config/src/main/java/io/apiman/common/config/options/GenericOptionsParser.java