So subtrahieren Sie Efeu-Abhängigkeitssätze

Mein Ziel ist es, transitive Projektabhängigkeiten in mehrere sich nicht überschneidende Gruppen zu unterteilen:

system (jars bereits in j2ee container vorhanden; manuell mit explizit festgelegten versionen aufgelistet)bereitgestellt (Gläser, die in den j2ee-Container kopiert werden sollen; manuell aufgelistet)Ohr (Gläser in Ohr / Lib, der Rest verpackt werden)

Meine unten aufgelistete aktuelle Lösung weist einige Mängel auf:

System- und bereitgestellte Bibliotheken müssen einzeln von ear conf ausgeschlossen werdenNeue Transitive Deps von Drittanbietern, die nicht bereits explizit ausgeschlossen wurden, könnten versehentlich zu Ohren kommenmüssen manchmal explizit hinzufügenoverride Duplizieren des Bibliotheksnamens und der Version

Gibt es einen Ansatz, um diese Mängel zu beseitigen?

Es wäre schön, in der Lage zu sein, eine Konf als Ergebnis der Subtraktion von Abhängigkeitssätzen von den anderen zu definieren (mit einer angemessenen Konfliktlösung):ear = Laufzeitsystem - bereitgestellt.

Könnte sein<conf name="ear" extends="runtime,!system,!provided"/> Notation könnte unterstützt werden, wennIVY-982 wird repariert.

Auf der Suche nach einer konkreten Lösung.

Auch bereit, in Betracht zu ziehen, zu gradle zu wechseln, wenn es eine Lösung gibt.

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">

    <info organisation="example.com" module="parent"/>

    <configurations defaultconfmapping="compile->@;runtime->@;system->master;provided->runtime;ear->runtime;test->test(default)">
        <conf name="compile"/>
        <conf name="runtime" extends="compile"/>
        <conf name="ear" extends="runtime" description="Libs to be packed inside ear"/>
        <conf name="provided" description="Libs to copy to j2ee container"/>
        <conf name="system" description="Libs already present in j2ee container"/>
        <conf name="test" extends="ear,provided,system" description="Simulate container environment. Used by unit tests to catch dependency compatibility problems."/>
    </configurations>

    <dependencies>
        <dependency org="log4j" name="log4j" rev="1.2.15" force="true" conf="system"/>
        <dependency org="commons-collections" name="commons-collections" rev="3.1" force="true" conf="system"/>
        <dependency org="commons-lang" name="commons-lang" rev="2.2" force="true" conf="system"/>

        <dependency org="org.apache.velocity" name="velocity" rev="1.7" force="true" conf="provided"/>
        <dependency org="org.slf4j" name="slf4j-api" rev="1.5.6" force="true" conf="provided"/>
        <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.5.6" force="true" conf="provided"/>
        <!-- ... -->

        <dependency name="module1" rev="latest.integration" conf="runtime,ear,provided,test"/>
        <dependency name="module2" rev="latest.integration" conf="runtime,ear,provided,test"/>
        <!-- ... -->

        <exclude org="commons-collections" conf="ear,provided"/>
        <exclude org="commons-lang" conf="ear,provided"/>
        <exclude org="org.apache.velocity" conf="ear"/>
        <!-- TODO: negation not working: https://issues.apache.org/jira/browse/IVY-982 -->
        <!--<exclude org="org.slf4j" conf="*, !provided"/>-->
        <exclude org="org.slf4j" conf="ear,test"/>
        <!-- ... -->

        <override org="org.slf4j" rev="1.5.6"/>
        <override org="commons-collections" module="commons-collections" rev="3.1"/>
        <override org="commons-lang" module="commons-lang" rev="2.2"/>
        <!-- ... -->
    </dependencies>

</ivy-module>

Beispiele für Projektquellen zum Experimentieren finden Sie inIVY-1443 Befestigung.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage