-
Notifications
You must be signed in to change notification settings - Fork 52
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] Separate transitive dependencies in core #1124
base: master
Are you sure you want to change the base?
[BUILD] Separate transitive dependencies in core #1124
Conversation
9d53234
to
fd07483
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice!
Your PR contains only the Gradle changes. I would expect that you also need to adjust the META-INF/MANIFEST.MF
file and remove entries that export libraries that are not part of the API (for example commons-codec in the core). Do you plan follow-up PRs that get rid of the remaining API/exported dependencies (for example commons-io)?
8a1167a
to
b206993
Compare
We have done the proposed fixes (and also moved Since commons-io seems to get used by the server (in |
so that the core can act as a dependency-container without leaking it's own (non-transitive) dependencies into the classpaths of the packages importing it while still providing the transitive dependencies that are needed by those packages. This is implemented by creating the two new configurations "bundle" and "bundleApi" which replace the previously used "releaseDep". Dependencies of the "bundle"-configuration gets extend from the "implementation"-configuration (by the gradle-java-plugin) which is not transitive and therefore it's dependencies are only visible to the core package itself while the dependencies in "bundleApi" (which the corresponding "api"-config extends from) can be used by all packages that import the core. Extension in the context of configurations means that that all the dependencies in the "bundle"-config also get added to the "implementation"-config. This solution has the advantage to other solutions (e.g. creating a new OSGI package) that the complexity of the build system is not significantly increased and no versioning of any additional OSGI packages needs to be considered. This commit includes just the preparations for the following commits that actually make this happen. So at this moment the new configs just get extended from the old "releaseDep" for compatibility reasons (this will change in the following commits). The solution was proposed and kindly explained to the authors by @m273d15 following the PR saros-project#1118. Co-authored-by: FKHals <[email protected]> Co-authored-by: paun42 <[email protected]> Co-authored-by: panphil <[email protected]>
to use the "bundle" and "bundleApi" as configurations instead of "releaseDep". Co-authored-by: Eik0fresh <[email protected]> Co-authored-by: paun42 <[email protected]> Co-authored-by: panphil <[email protected]>
to use the "bundle" and "bundleApi" as configurations instead of "releaseDep". Co-authored-by: Eik0fresh <[email protected]> Co-authored-by: paun42 <[email protected]> Co-authored-by: panphil <[email protected]>
and remove the last remains of the previous default configuration "releaseDep". Co-authored-by: Eik0fresh <[email protected]> Co-authored-by: paun42 <[email protected]> Co-authored-by: panphil <[email protected]>
b206993
to
d8dba44
Compare
You could simply add the dependency as a Gradle dependency of the server project. This is the intended way of handling dependencies. Instead of relying on the transitive dependencies of another project, the server defines its own dependencies. |
and instead let every project get it by itself, since it is not part of the cores public api and it further reduces the coupling between the core and these projects. We decided that this should be a separate commit from the previous ones (that also change the build-system) since it changes different files and could not be integrated coherently. Co-authored-by: Eik0fresh <[email protected]> Co-authored-by: paun42 <[email protected]> Co-authored-by: panphil <[email protected]>
c3fde89
to
7afa9b1
Compare
We just made the changes so that Edit: For some reason the STF tests of both commits seem to fail.. |
and instead let every project get it by itself, since it is not part of the cores public api and it further reduces the coupling between the core and these projects. Co-authored-by: Eik0fresh <[email protected]> Co-authored-by: paun42 <[email protected]> Co-authored-by: panphil <[email protected]>
Is there any reason why the I just confirmed on a testing branch at our fork that this seems to be the case since the tests succeed when the |
@@ -4,28 +4,7 @@ Bundle-Name: Saros Core | |||
Bundle-SymbolicName: saros.core | |||
Bundle-Version: 0.2.0 | |||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8 | |||
Export-Package: com.thoughtworks.xstream, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why do you remove the exports ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The xstream-Package is only used by the core and no other bundle. So the core don't need to export this package. If any other bundle is using this package and we missed to find it, please tell us that.
so that the core can act as a dependency-container without leaking it's
own (non-transitive) dependencies into the classpaths of the packages
importing it while still providing the transitive dependencies that
are needed by those packages.
This is implemented by creating the two new configurations "bundle" and
"bundleApi" which replace the previously used "releaseDep".
Dependencies of the "bundle"-configuration gets extend from the
"implementation"-configuration (by the gradle-java-plugin) which is not
transitive and therefore it's dependencies are only visible to the core
package itself while the dependencies in "bundleApi" (which the
corresponding "api"-config extends from) can be used by all packages
that import the core.
Extension in the context of configurations means that that all the
dependencies in the "bundle"-config also get added to the
"implementation"-config.
This solution has the advantage to other solutions (e.g. creating a new
OSGI package) that the complexity of the build system is not
significantly increased and no versioning of any additional OSGI
packages needs to be considered.
The solution was proposed and kindly explained to the authors by
@m273d15 following the PR #1118.