You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Guillaume Nodet (Jira)" <ji...@apache.org> on 2025/01/20 10:11:00 UTC

[jira] [Updated] (MNG-7836) Support alternative syntaxes for POMs

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