Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Build] Define all MANIFEST.MF entries through the bnd-maven-plugin #517

Merged
merged 1 commit into from
Jun 25, 2024

Conversation

HannesWell
Copy link
Contributor

and derive 'Bundle-SymbolicName' header from the artifactId where possible.

This is originally created for #516, but would probably also make #506 simpler.

Comment on lines 36 to 38
<bnd.instructions.additions><![CDATA[
Bundle-SymbolicName: org.apache.maven.resolver.transport.jdk
Automatic-Module-Name: ${Bundle-SymbolicName}
]]></bnd.instructions.additions>
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it correct that from all the maven-resolver-transport-jdk modules only maven-resolver-transport-jdk is actually to be used and jdk-8, jdk-11 and jdk-21 are only there fore technical reasons to create multi-release jars?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's right.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, thanks. Then I think it it not really necessary to create a Manifest for those specific bundles or at least it is not necessary to make sure the information is complete, isn't it?

Copy link
Contributor Author

@HannesWell HannesWell Jun 21, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have now incorporated that and updated the resolver-transport-jdkX modules.

@HannesWell
Copy link
Contributor Author

@gnodet or @cstamas could you please have a look at this?

and derive 'Bundle-SymbolicName' header from the artifactId where
possible.
@HannesWell
Copy link
Contributor Author

I have now further enhanced this and added the Automatic-Module-Name by default for all modules (like in the 1.9.x variant of this in #518).
In #516 that header is explicitly removed for all modules that get a JPMS module-info generated.

Due to the naming unification this PR changes the Bundle-SymbolicName and Automatic-Module-Name header value for the locks modules:

  • org.apache.maven.resolver.named -> org.apache.maven.resolver.named.locks
  • org.apache.maven.resolver.named.redisson -> org.apache.maven.resolver.named.locks.redisson
  • org.apache.maven.resolver.named.hazelcast -> org.apache.maven.resolver.named.locks.hazelcast

I hope this is acceptable?

@gnodet and @cstamas from my POV this is ready and I think it would suit best to have this before my other changes.
Could you please approve the workflows and review this?

@cstamas cstamas requested a review from gnodet June 25, 2024 12:36
<Automatic-Module-Name>org.apache.maven.resolver.supplier</Automatic-Module-Name>
<Bundle-SymbolicName>${Automatic-Module-Name}</Bundle-SymbolicName>
<bnd.instructions.additions><![CDATA[
Bundle-SymbolicName: org.apache.maven.resolver.supplier
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's the behaviour since maven-resolver-supplier-mvn3 and maven-resolver-supplier-mvn4 end up with the same symbolic name / module name ? Isn't that a problem ?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

my "non-expert" opinion: IMO no, as only one can be used at one time, or in other words, I see no use case when you want both in the same container?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, that's OSGi, so it's supposed to support different versions of the same packages/services to be deployed in the same container...

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@HannesWell is there any real OSGi use case ? like pax-url or something like that ? Or is that just to be able to use Maven inside Eclipse ?
More specifically, is there any use of OSGi services, or just the package wiring layer ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When using both in the same OSGi runtime it could indeed become a challenge and will probably depend on the runtime configuration how multiple bundles with same ID and version are handled.
If they had different version, e.g. aligned with the targeted maven version it wouldn't be a problem, but I don't think that's what you want and also what's suitable here.

Solutions could be to say that one should only use one of both or we add a corresponding name suffix like for the maven artifactId?
I can implement it as you prefer.

Copy link
Contributor

@gnodet gnodet Jun 25, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fwiw, the maven 4 based supplier is a bit off. It should now looks like
https://github.com/apache/maven/blob/master/maven-api-impl/src/test/java/org/apache/maven/internal/impl/standalone/RepositorySystemSupplier.java
That said, I don't think it's a good idea to tie a resolver jar so closely with maven private implementation classes... It should really be the opposite and the supplier should be provided by maven.
IIRC, those two suppliers are mostly for demos, right @cstamas ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That said, I don't think it's a good idea to tie a resolver jar so closely with maven private implementation classes... It should really be the opposite and the supplier should be provided by maven.

I have to say that I just learned the resolver last week from the nice demos (I new it exists and what it does longer before but have not worked with it) so my opinions are probably not that qualified.
But yes I understood the supplier as 'standalone' integration of the resolver with maven (as you say in the doc, in general the resolver can work with any kind of back-end and Maven is just one, probably the most prominent and driving one).
From that POV it is indeed a back-reference in the dependency graph to have maven-resolver-supplier in maven-resolver.
In maven there is already the maven-resolver-provider, would it make sense to merge the maven-resolver-supplier into that?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@HannesWell are you aware of https://github.com/maveniverse/mima ? As it's maybe what you really need, as Resolver supplier provides really only the "basic experience". Also, see here:
https://issues.apache.org/jira/browse/MNG-8163?focusedCommentId=17856703&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-17856703

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@HannesWell are you aware of https://github.com/maveniverse/mima ? As it's maybe what you really need, as Resolver supplier provides really only the "basic experience".

Not yet. Thanks for the hint. I'll have a closer look at it.

Also, see here:
https://issues.apache.org/jira/browse/MNG-8163?focusedCommentId=17856703&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-17856703

Yes that's an interesting discussion and I follow it. I just couldn't contribute anything useful (yet).
But after thinking again about this discussion, the argument that the supplier uses resolver-impl also made me wonder if moving that part to maven is really the right step.
But from your comment in that issue I assume that this is a bigger discussion that might only be solved in resolver 3.0.

Btw. should we have another issue or just PR to have different names for the bundles for resolver-supper for maven 3 and 4? Or do you think we should keep it as it is now?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@HannesWell are you aware of https://github.com/maveniverse/mima ? As it's maybe what you really need, as Resolver supplier provides really only the "basic experience".

Not yet. Thanks for the hint. I'll have a closer look at it.

Also, see here:
https://issues.apache.org/jira/browse/MNG-8163?focusedCommentId=17856703&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-17856703

Yes that's an interesting discussion and I follow it. I just couldn't contribute anything useful (yet). But after thinking again about this discussion, the argument that the supplier uses resolver-impl also made me wonder if moving that part to maven is really the right step. But from your comment in that issue I assume that this is a bigger discussion that might only be solved in resolver 3.0.

Btw. should we have another issue or just PR to have different names for the bundles for resolver-supper for maven 3 and 4? Or do you think we should keep it as it is now?

We also need to take into account the Maven 4 API which kinda hides the resolver API... it may be easier to integrate in the near future.

@gnodet gnodet merged commit 52ca14e into apache:master Jun 25, 2024
5 checks passed
@HannesWell HannesWell deleted the unify-all-manifest-headers branch June 25, 2024 20:35
@HannesWell
Copy link
Contributor Author

Thank you @gnodet for your review and submitting this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
4 participants