Uploaded image for project: 'Maven Dependency Plugin'
  1. Maven Dependency Plugin
  2. MDEP-440

When dependency:build-classpath includeArtifactIds is set and excludeTransitive is still false, include transitive dependencies of specified artifacts

    XMLWordPrintableJSON

Details

    • New Feature
    • Status: Closed
    • Trivial
    • Resolution: Incomplete
    • None
    • None
    • build-classpath
    • None

    Description

      Summary:

      Please consider supporting on the dependency:build-classpath goal:

      • includeArtifacts=component-A
      • excludeTransitive=false

      Result: creating a classpath containing component-A's transitive dependencies.

      Detail:

      My use case is that I have a large assembly .zip that includes multiple components but I want to create "personalised" scripts for each component.

      Each script's classpath must include a large subset of the total list of dependencies. However, although they share many dependencies, component-A shouldn't have component-B's jar file on its classpath. Or if component-A uses Apache MQ and component-B doesn't then the Apache MQ jars shouldn't appear on component-B's classpath.

      It would be convenient to be able to say "build me the classpath for component-A, including all its dependencies" within the context of the wider assembly build. Would it be appropriate to do this by setting includeArtifactIds=component-A and leaving excludeTransitive as false? At the moment, as soon as you add includeArtifactIds, only those specific artifacts are included.

      The well-used alternative is to have the scripts generated in the individual component's build. The assembly pulls together all the components and scripts. However, there's no guarantee that the dependency resolution for the individual component decided on the same versions of .jar files as the overall assembly build. This can lead to some component's scripts relying on version 1.3 of Apache MQ but the asssembly packaging version 1.4. This enforcer goal exists to break the build if a potential problem is detected:
      https://maven.apache.org/enforcer/enforcer-rules/dependencyConvergence.html

      I feel that it's more convenient to build the scripts and the assembly in one shot and avoid the possibility of dependency resolution problems as far as the scripts are concerned. (of course, it opens you up to the possibility of runtime problems where a component won't execute properly because it's running against a different version of the dependency that it was compiled against).

      Attachments

        Activity

          People

            Unassigned Unassigned
            daveboden David Boden
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: