[ 
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)

Reply via email to