[
https://issues.apache.org/jira/browse/MNG-7836?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Guillaume Nodet updated MNG-7836:
---------------------------------
Component/s: API
Core
> Support alternative syntaxes for POMs
> -------------------------------------
>
> Key: MNG-7836
> URL: https://issues.apache.org/jira/browse/MNG-7836
> Project: Maven
> Issue Type: New Feature
> Components: API, Core
> Reporter: Guillaume Nodet
> Assignee: Guillaume Nodet
> Priority: Major
> Fix For: 4.0.0-alpha-8, 4.0.0
>
>
> 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|https://github.com/apache/maven-integration-testing/tree/master/core-it-suite/src/test/resources/mng-7836-alternative-pom-syntax].
> {code}
> /**
> * 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));
> }
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)