How to decide the scope of transitive dependencies introduced by different dependencies?












3















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?










share|improve this question


















  • 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
















3















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?










share|improve this question


















  • 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














3












3








3


1






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?










share|improve this question














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






share|improve this question













share|improve this question











share|improve this question




share|improve this question










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 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














  • 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








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












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
});


}
});














draft saved

draft discarded


















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
















draft saved

draft discarded




















































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.




draft saved


draft discarded














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





















































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







Popular posts from this blog

How to change which sound is reproduced for terminal bell?

Can I use Tabulator js library in my java Spring + Thymeleaf project?

Title Spacing in Bjornstrup Chapter, Removing Chapter Number From Contents