title: Are there any reasons to keep explicit dependency declaration for my own transitive dependencies in Maven?
body: <p>I have been reading for a while about an explicit versus transitive (implicit) dependency declaration in Maven. Most of the people tend to agree that you should always explicitly declare the libraries that your project depends on, mostly to avoid versions mismatch.</p>
  
  <p>That is perfectly reasonable, but <strong>how should we tackle our internal dependencies</strong>? I see absolutely no reason to keep the explicit dependency between the modules, if they can be resolved via transitive mechanism.</p>
  
  <p>My use case scenario:</p>
  
  <ul>
  <li>my team develops software in <code>major.minor.micro</code> release cycles, ex: 1.1.1, 1.1.2, 1.3.0, etc...</li>
  <li>with each release we increment the versioning scheme for all of our modules in the project (so A:1.0, B:1.0 become A:1.1, B:1.1)</li>
  <li>we are using reactor projects, nested as far as two levels deep</li>
  </ul>
  
  <p>My gut is telling me - get rid of the dependency spaghetti. Anyone will prove me wrong? Reactor (dependencies) graphs are more than welcome :-)</p>
  
  <h1>An example:</h1>
  
  <p>My parent project uses following modules (external dependencies omitted):</p>
  
  <pre><code>Project:1.1   
   - core:1.1
   - +-- util:1.1 
   -   +-- xml-helper:1.1
   - logic:1.1
   - +-- util:1.1 
   -   +-- xml-helper:1.1
   - gui:1.1
  </code></pre>
  
  <p>The question is: should I declare <code>xml-helper:1.1</code> as a dependency in <code>core</code>'s and <code>logic</code>'s pom.xml? That dependency will be automatically resolved (transitive) as I'm using <code>util</code> module. </p>
  
  <p>If I declare it, I get a larger pom to maintain.</p>
  
  <p>If I skip it, I might get into troubles when dependencies evolve over time.</p>