How to decide the scope of transitive dependencies introduced by different dependencies?
Suppose my maven module M has the following dependencies:
M -> A(test scope) -> C(compile scope)
M -> B(compile scope) -> C(compile scope)
M depends on A and B with test and compile scope respectively. Both A and B depends on C with compile scope.
So my question is how maven decides the scope of C for M?
maven
add a comment |
Suppose my maven module M has the following dependencies:
M -> A(test scope) -> C(compile scope)
M -> B(compile scope) -> C(compile scope)
M depends on A and B with test and compile scope respectively. Both A and B depends on C with compile scope.
So my question is how maven decides the scope of C for M?
maven
1
Transitive scope resolution is explained in maven.apache.org/guides/introduction/…, so the first line would lead to a test dependency, the second one to a compile dependency. I guess that there is an order and compile wins over test, but I am not sure.
– JF Meier
Nov 21 '18 at 8:56
@JFMeier thanks for the input. I also thought compile scope should take precedence. But that's not the case in one of my project. So I wonder if there're certain rules that maven follows.
– Rui Li
Nov 21 '18 at 9:04
I would also be possible that this just decided by order. Maven has a rule to resolve dependency versions if several different exists (by depth, then by order), maybe this rule is also applied to scopes.
– JF Meier
Nov 21 '18 at 9:43
1
You can trymvn dependency:tree -Dverbose
to see if the test scoped dep is closer (less deep) in the tree. But I would also expect the compile scope to take precedence. Also make sure that you have the latest maven version and maven-dependency-plugin version, as there have been bug fixes in this area.
– gjoranv
Nov 21 '18 at 13:07
Thanks for your comments :) It turned out the issue with my project is that B is a shaded jar, and C is therefore removed from its pom. I think that's why I got a test scope of C for M.
– Rui Li
Nov 22 '18 at 2:03
add a comment |
Suppose my maven module M has the following dependencies:
M -> A(test scope) -> C(compile scope)
M -> B(compile scope) -> C(compile scope)
M depends on A and B with test and compile scope respectively. Both A and B depends on C with compile scope.
So my question is how maven decides the scope of C for M?
maven
Suppose my maven module M has the following dependencies:
M -> A(test scope) -> C(compile scope)
M -> B(compile scope) -> C(compile scope)
M depends on A and B with test and compile scope respectively. Both A and B depends on C with compile scope.
So my question is how maven decides the scope of C for M?
maven
maven
asked Nov 21 '18 at 8:39
Rui LiRui Li
5126
5126
1
Transitive scope resolution is explained in maven.apache.org/guides/introduction/…, so the first line would lead to a test dependency, the second one to a compile dependency. I guess that there is an order and compile wins over test, but I am not sure.
– JF Meier
Nov 21 '18 at 8:56
@JFMeier thanks for the input. I also thought compile scope should take precedence. But that's not the case in one of my project. So I wonder if there're certain rules that maven follows.
– Rui Li
Nov 21 '18 at 9:04
I would also be possible that this just decided by order. Maven has a rule to resolve dependency versions if several different exists (by depth, then by order), maybe this rule is also applied to scopes.
– JF Meier
Nov 21 '18 at 9:43
1
You can trymvn dependency:tree -Dverbose
to see if the test scoped dep is closer (less deep) in the tree. But I would also expect the compile scope to take precedence. Also make sure that you have the latest maven version and maven-dependency-plugin version, as there have been bug fixes in this area.
– gjoranv
Nov 21 '18 at 13:07
Thanks for your comments :) It turned out the issue with my project is that B is a shaded jar, and C is therefore removed from its pom. I think that's why I got a test scope of C for M.
– Rui Li
Nov 22 '18 at 2:03
add a comment |
1
Transitive scope resolution is explained in maven.apache.org/guides/introduction/…, so the first line would lead to a test dependency, the second one to a compile dependency. I guess that there is an order and compile wins over test, but I am not sure.
– JF Meier
Nov 21 '18 at 8:56
@JFMeier thanks for the input. I also thought compile scope should take precedence. But that's not the case in one of my project. So I wonder if there're certain rules that maven follows.
– Rui Li
Nov 21 '18 at 9:04
I would also be possible that this just decided by order. Maven has a rule to resolve dependency versions if several different exists (by depth, then by order), maybe this rule is also applied to scopes.
– JF Meier
Nov 21 '18 at 9:43
1
You can trymvn dependency:tree -Dverbose
to see if the test scoped dep is closer (less deep) in the tree. But I would also expect the compile scope to take precedence. Also make sure that you have the latest maven version and maven-dependency-plugin version, as there have been bug fixes in this area.
– gjoranv
Nov 21 '18 at 13:07
Thanks for your comments :) It turned out the issue with my project is that B is a shaded jar, and C is therefore removed from its pom. I think that's why I got a test scope of C for M.
– Rui Li
Nov 22 '18 at 2:03
1
1
Transitive scope resolution is explained in maven.apache.org/guides/introduction/…, so the first line would lead to a test dependency, the second one to a compile dependency. I guess that there is an order and compile wins over test, but I am not sure.
– JF Meier
Nov 21 '18 at 8:56
Transitive scope resolution is explained in maven.apache.org/guides/introduction/…, so the first line would lead to a test dependency, the second one to a compile dependency. I guess that there is an order and compile wins over test, but I am not sure.
– JF Meier
Nov 21 '18 at 8:56
@JFMeier thanks for the input. I also thought compile scope should take precedence. But that's not the case in one of my project. So I wonder if there're certain rules that maven follows.
– Rui Li
Nov 21 '18 at 9:04
@JFMeier thanks for the input. I also thought compile scope should take precedence. But that's not the case in one of my project. So I wonder if there're certain rules that maven follows.
– Rui Li
Nov 21 '18 at 9:04
I would also be possible that this just decided by order. Maven has a rule to resolve dependency versions if several different exists (by depth, then by order), maybe this rule is also applied to scopes.
– JF Meier
Nov 21 '18 at 9:43
I would also be possible that this just decided by order. Maven has a rule to resolve dependency versions if several different exists (by depth, then by order), maybe this rule is also applied to scopes.
– JF Meier
Nov 21 '18 at 9:43
1
1
You can try
mvn dependency:tree -Dverbose
to see if the test scoped dep is closer (less deep) in the tree. But I would also expect the compile scope to take precedence. Also make sure that you have the latest maven version and maven-dependency-plugin version, as there have been bug fixes in this area.– gjoranv
Nov 21 '18 at 13:07
You can try
mvn dependency:tree -Dverbose
to see if the test scoped dep is closer (less deep) in the tree. But I would also expect the compile scope to take precedence. Also make sure that you have the latest maven version and maven-dependency-plugin version, as there have been bug fixes in this area.– gjoranv
Nov 21 '18 at 13:07
Thanks for your comments :) It turned out the issue with my project is that B is a shaded jar, and C is therefore removed from its pom. I think that's why I got a test scope of C for M.
– Rui Li
Nov 22 '18 at 2:03
Thanks for your comments :) It turned out the issue with my project is that B is a shaded jar, and C is therefore removed from its pom. I think that's why I got a test scope of C for M.
– Rui Li
Nov 22 '18 at 2:03
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53408104%2fhow-to-decide-the-scope-of-transitive-dependencies-introduced-by-different-depen%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53408104%2fhow-to-decide-the-scope-of-transitive-dependencies-introduced-by-different-depen%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Transitive scope resolution is explained in maven.apache.org/guides/introduction/…, so the first line would lead to a test dependency, the second one to a compile dependency. I guess that there is an order and compile wins over test, but I am not sure.
– JF Meier
Nov 21 '18 at 8:56
@JFMeier thanks for the input. I also thought compile scope should take precedence. But that's not the case in one of my project. So I wonder if there're certain rules that maven follows.
– Rui Li
Nov 21 '18 at 9:04
I would also be possible that this just decided by order. Maven has a rule to resolve dependency versions if several different exists (by depth, then by order), maybe this rule is also applied to scopes.
– JF Meier
Nov 21 '18 at 9:43
1
You can try
mvn dependency:tree -Dverbose
to see if the test scoped dep is closer (less deep) in the tree. But I would also expect the compile scope to take precedence. Also make sure that you have the latest maven version and maven-dependency-plugin version, as there have been bug fixes in this area.– gjoranv
Nov 21 '18 at 13:07
Thanks for your comments :) It turned out the issue with my project is that B is a shaded jar, and C is therefore removed from its pom. I think that's why I got a test scope of C for M.
– Rui Li
Nov 22 '18 at 2:03