Uploaded image for project: 'Maven'
  1. Maven
  2. MNG-7842

Keep using transitive dependencies even if one of the declarations misses a version

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Open
    • Major
    • Resolution: Unresolved
    • None
    • None
    • Core, Dependencies
    • None

    Description

      I have a problem that Maven discards *all* transitive dependencies when a single of them misses <version>. It breaks workflows, and it is not clear why Maven behaves like that.

      I'm using Maven 3.8.6.

      Sample:

      <?xml version="1.0" encoding="UTF-8"?>
      <project xmlns="http://maven.apache.org/POM/4.0.0"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>
      
          <groupId>org.example</groupId>
          <artifactId>TestBugMaven</artifactId>
          <version>1.0-SNAPSHOT</version>
      
          <properties>
              <maven.compiler.source>17</maven.compiler.source>
              <maven.compiler.target>17</maven.compiler.target>
              <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          </properties>
      
          <dependencies>
              <dependency>
                  <groupId>org.apache.jmeter</groupId>
                  <artifactId>ApacheJMeter_core</artifactId>
                  <version>5.6.1</version>
              </dependency>
          </dependencies>
      </project>
      

      Test: mvn dependency:tree

      Output:

      [WARNING] The POM for org.apache.jmeter:ApacheJMeter_core:jar:5.6.1 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
      [INFO]
      [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ TestBugMaven ---
      [INFO] org.example:TestBugMaven:jar:1.0-SNAPSHOT
      [INFO] \- org.apache.jmeter:ApacheJMeter_core:jar:5.6.1:compile
      

      Frankly speaking, I do not understand why Maven discards ALL transitive dependencies in case it observes a single one with "missing version".

      Note: adding dependencyManagement does not seem to fix the case, so it is even more confusing.

      The following still discards transitive dependencies:

      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>com.google.auto.service</groupId>
            <artifactId>auto-service-annotations</artifactId>
            <scope>compile</scope>
            <version>1.1.1</version>
          </dependency>
        </dependencies>
      </dependencyManagement>
      
          <dependencies>
              <dependency>
                  <groupId>org.apache.jmeter</groupId>
                  <artifactId>ApacheJMeter_core</artifactId>
                  <version>5.6.1</version>
              </dependency>
          </dependencies>
      

      Attachments

        Activity

          People

            Unassigned Unassigned
            vladimirsitnikov Vladimir Sitnikov
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated: