-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Closed
Labels
enhancementNew feature or requestNew feature or requestpriority:majorMajor loss of functionMajor loss of function
Milestone
Description
Guillaume Nodet opened MNG-7836 and commented
While the syntax for the 4.0.0 consumer POM is set in stone for accessing central repository, the build POM should be able to evolve. In particular, allowing the use of alternate syntaxes would bring some freedom to users.
This issue provides support for a ModelParser SPI interface which can be implemented as a core extension and allow the usage of a different file as the POM and allow a custom syntax.
An example of such an extension to support Hooch POMs can be found in the integration tests.
/**
* The {@code ModelParser} interface is used to locate and read {@link Model}s from the file system.
* This allows plugging in additional syntaxes for the main model read by Maven when building a project.
*/
@Experimental
public interface ModelParser {
/**
* Locates the pom in the given directory.
*
* @param dir the directory to locate the pom for, never {@code null}
* @return a {@code Source} pointing to the located pom or an empty {@code Optional} if none was found by this parser
*/
@Nonnull
Optional<Source> locate(@Nonnull Path dir);
/**
* Parse the model obtained previously by a previous call to {@link #locate(Path)}.
*
* @param source the source to parse, never {@code null}
* @param options possible parsing options, may be {@code null}
* @return the parsed {@link Model}, never {@code null}
* @throws ModelParserException if the model cannot be parsed
*/
@Nonnull
Model parse(@Nonnull Source source, @Nullable Map<String, ?> options) throws ModelParserException;
/**
* Locate and parse the model in the specified directory.
* This is equivalent to {@code locate(dir).map(s -> parse(s, options))}.
*
* @param dir the directory to locate the pom for, never {@code null}
* @param options possible parsing options, may be {@code null}
* @return an optional parsed {@link Model} or {@code null} if none could be found
* @throws ModelParserException if the located model cannot be parsed
*/
default Optional<Model> locateAndParse(@Nonnull Path dir, @Nullable Map<String, ?> options)
throws ModelParserException {
return locate(dir).map(s -> parse(s, options));
}
}
Remote Links:
Backported to: 4.0.0-alpha-8
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestpriority:majorMajor loss of functionMajor loss of function