I see now there is already 
https://github.com/apache/maven/blob/master/api/maven-api-meta/src/main/java/org/apache/maven/api/annotations/Provider.java
 but to me the javadoc is not explicit enough. It should state: Only Maven is 
allowed to implement/extend types with this annotation.

Konrad

On 2022/11/16 09:20:11 Konrad Windszus wrote:
> Hi,
> Unfortunately Maven 3 didn’t define a proper API. In effect everything 
> somehow exposed through class loaders was considered API by plugin/extension 
> developers.
> For Maven 4 a completely separate API was established in package 
> “org.apache.maven.api”, but what about the old packages used and exported in 
> Maven 3?
> 
> For example in the context of https://issues.apache.org/jira/browse/MNG-7588 
> <https://issues.apache.org/jira/browse/MNG-7588> I want to evolve the package 
> “org.apache.maven.plugin.descriptor”.
> We already figured out that this particular package (although not part of the 
> Maven 4 API) is used from both Maven Core as well as Maven Plugin Tools, 
> therefore this probably needs to stay backwards compatible.
> What about others like 
> https://github.com/apache/maven/blob/master/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginManager.java?
>  
> <https://github.com/apache/maven/blob/master/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginManager.java?>
> This interface should IMHO never been implemented outside Maven Core but in 
> fact it was exposed to all plugins/extensions (via 
> https://github.com/apache/maven/blob/a6b1ebb1cd40ca4b288fdeb30c6d2460323aa25b/maven-core/src/main/resources/META-INF/maven/extension.xml#L40
>  
> <https://github.com/apache/maven/blob/a6b1ebb1cd40ca4b288fdeb30c6d2460323aa25b/maven-core/src/main/resources/META-INF/maven/extension.xml#L40>).
> 
> There are three options coming to my mind:
> 
> 1. Deprecate the interfaces we don’t consider API and create new ones for 
> Maven 4 which are not exported!
> 2. Modify the existing interfaces in a backwards compatible way (but somehow 
> add a marker that they should not be implemented outside core)
> 3. Modify the existing  interfaces in a backwards compatible way (but somehow 
> add a marker that they should not be implemented outside core)
> 
> For all three options we somehow need to come up with a list of 
> classes/interfaces currently being exported through the API class loader, 
> which should be considered private and agree on an Annotation/Javadoc for 
> that (something like 
> https://github.com/mulesoft/api-annotations/blob/40b258afeff6560241dee5001ed00f1deb392e47/src/main/java/org/mule/api/annotation/NoImplement.java#L29
>  
> <https://github.com/mulesoft/api-annotations/blob/40b258afeff6560241dee5001ed00f1deb392e47/src/main/java/org/mule/api/annotation/NoImplement.java#L29>
>  or https://wiki.eclipse.org/API_Javadoc_tags#The_New_Solution 
> <https://wiki.eclipse.org/API_Javadoc_tags#The_New_Solution>
> 
> WDYT?
> 
> Konrad
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
For additional commands, e-mail: dev-h...@maven.apache.org

Reply via email to