Well, don't get me wrong, I think the original question was not whether YOU 
invest time in that, but more whether it makes sense that OTHERS invest in 
that. In the end, this is a democratic and open project. Not every idea asked 
is intended as your personal task. ;-)
-Markus


-----Ursprüngliche Nachricht-----
Von: Robert Scholte [mailto:rfscho...@apache.org] 
Gesendet: Samstag, 12. Dezember 2020 12:53
An: dev@maven.apache.org
Betreff: Re: AW: [DISCUSS] Allow attributes shorthand in pom.xml

Here's my unpopular response: I'm not going to invest in attribute support for 
Maven.
If the verbosity of the pom.xml is the first thing people complain about, well, 
then Maven is doing a pretty good job (if the build itself had issues, one 
would complain about that first, right?).
By having elements only it is much easier to maintain Maven. 
It'll remove discussion as to: what would be an attribute and what should be an 
element? Can it be based on required versus optional? Allowing both for the 
same "fields" is probably a recipe for disaster.

I'll leave it up to tools like polyglot to do some the transformation from your 
favorite language to the XML as expected by Maven.
This is a clear separation, and it will give the Maven team the opportunity to 
focus on the real issues.

So please join your forces and spend your energy on improving polyglot!

thanks,
Robert
On 12-12-2020 11:04:33, Markus KARG <mar...@headcrashing.eu> wrote:
Wouldn't it be a more modern and even more effective approach to add JSON 
support for POMs? We could keep POM.xml for legacy reasons but add support for 
POM.json files.
-Markus

-----Ursprüngliche Nachricht-----
Von: Will Iverson [mailto:wiver...@gmail.com]
Gesendet: Freitag, 11. Dezember 2020 23:40
An: dev@maven.apache.org
Betreff: [DISCUSS] Allow attributes shorthand in pom.xml

One of the biggest complaints about Maven has long been the verbosity of
the XML format. The verbosity is due in large part to the exclusive
reliance on XML elements in Maven.

Proposal: Allow Maven pom.xml to treat attributes as a short-hand for
declaring configuration elements.

Example: One of the most verbose sections of the pom for most projects is
dependencies. A typical example:


commons-io
commons-io
2.8.0


Here is the same declaration expressed with attribute shortcuts:


That's an 80% reduction in LoC, and would make Maven comparable with other
popular build tools (e.g. compare and contrast with other build tools at
https://mvnrepository.com/artifact/commons-io/commons-io/2.8.0)

REQUEST: Feedback on if this is something to pursue. I've done some
research, happy to submit patches, but don't want to pursue if there is
either a) technical reason[s] not to proceed I'm not aware of or b) a lack
of enthusiasm for the entire idea from the community.

Basically, I'm looking for some feedback along the lines of a) love it -
please submit patches so we can check it out, b) huh, maybe, willing to
look at it, or c) this is a terrible idea, because X. Effectively, a
totally non-binding vote on if this is worth exploring.

I've discussed this with others online and done some research, so are a few
answers to objections/Qs as I currently understand. I may be
wrong/uninformed about certain aspects, which would be very helpful
feedback.

Q: Won't this require a new Maven XSD to be generated?
A: No. The current Maven XSD declares many elements, but is not actually
involved in validation. While the current XSD is valuable for tools and
documentation, it does not actually perform validation.

Q: Wait, so what actually does the validation?
A: It's all done in Java code generated by Modello. The maven-model project
(https://github.com/apache/maven/tree/maven-3.6.3/maven-model) relies on
the Modello Maven Plugin (
http://codehaus-plexus.github.io/modello/modello-maven-plugin/) which in
turn relies on Modello core (http://codehaus-plexus.github.io/modello/) to
generate the Java code that processes the pom.xml

The proposal is to submit a patch for Modello that would allow the
generated source to accept an attribute as an alias for input. If it's a
valid element per the Maven maven.mdo file (
https://github.com/apache/maven/blob/maven-3.6.3/maven-model/src/main/mdo/maven.mdo)
it will now accept an attribute as a shortcut.

Q: Wouldn't this break, like, everything?
A: It would only affect pom.xml files that are read at runtime. All emitted
pom.xml files would remain exactly the same.

Q: Does this involve changing or rewriting the user's pom.xml? Isn't that
the thing that's making it hard to support alternative formats for pom.xml
like polyglot poms, etc?
A: Nope, the pom.xml on disk is still the pom.xml. A
X.X.X would be the only flag
recommended to declare that a pom.xml uses attributes for shorthand.

Q: How much work is this to actually implement?
A: It starts with a few lines added to the Modello code generation to allow
for attribute aliasing with a feature flag. Testing those changes through
the rest of the dependency chain. Adding test cases throughout.
Documentation. although as "now you can use attributes" is conceptually
simple it's not too bad. Tools in the Maven ecosystem would be able to
indicate they have been updated to support this by referring to the simple
term, "attribute shortcuts". Because nothing else changes, the only real
documentation change would be "things that were elements can also be
declared as attributes." The trickiest part is probably sorting out how to
manage the feature flag across the various components. I'm sure there's
more with a huge ecosystem like this, but the actual changes to the Modello
code gen appear to be surprisingly minor.

Q: What about tooling, like IDEs, publishing to Maven Central & Maven
repositories, etc?
A: Many IDEs appear to have implemented validation logic on top of Maven
that currently will flag attributes as errors in a pom.xml. Those IDEs and
other tools would require updates to this validation logic. Because the
rendered pom.xml output remains the same publishing tool chains and Maven
repositories should be completely unaffected.

Q: Any big issues you've identified?
A: Many sub-elements are not actually processed by Modello or Maven Model,
but are instead passed along to the plugin. For example,
elements. It would be up to each of these projects to eventually allow for
attribute aliasing (or not). Maven projects that rely on Modello would have
the choice to adopt the new version and turn on the feature flag (or not).
It's possible that this would be confusing for some users - i.e. "why can I
declare dependencies with attributes but not configuration values"? That
said, I think it's manageable and would allow the ecosystem to slowly
update.
Q: Shouldn't we wait for Maven 5 to tackle this?
A: There's an issue going back to 2008 about the verbosity of pom.xml -
https://issues.apache.org/jira/browse/MNG-3397 - so... that's 12 years.
While writing this email, I just realized I commented on that issue back in
2014. Any proposal to dramatically change the pom is going to be a *huge*
effort and is not at all what I'm proposing. This is literally the simplest
possible change I can think of that accomplishes the goal (dramatically
reducing the verbosity of the pom.xml) with the least possible impact to
the ecosystem. It's been twelve years. Maven 5 is years away.

I know there is a voting system for changes to Maven, and this would be a
huge userland change. If there is even a soft exploratory "yes" I'm happy
to submit patches. Even better would be the assistance of an existing Maven
committer willing to help me navigate Apache requirements. If the feedback
is generally negative, that's fine too - I'll just go ahead and close the
issue. What I don't want to do is submit patches and then have everyone
yell at me. The Internet can be rough, you know. :)

I know this is a long email - thanks for reading, and looking forward to
feedback.

Thanks,
-Will

P.S. I've been tracking my research on this approach with this issue
https://issues.apache.org/jira/browse/MNG-7044, in case you are curious
about the research/additional links.


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



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

Reply via email to