Таможенная упаковка Maven, переходные зависимости не включены - PullRequest
0 голосов
/ 18 мая 2018

Я играю с пользовательским подключаемым модулем Maven 3 для некоторых не-Java-артефактов, и у меня проблема с получением транзитивных зависимостей для работы.У меня определены три проекта: модель , модель-импл и cli , с такими зависимостями:

cli
  model-impl
    model

MyПользовательские плагины жизненного цикла вызываются в каждом проекте, и я могу успешно собрать модель и модель-импл .Для каждого из этих проектов ожидаемые артефакты хранятся в моем локальном хранилище. cli однако терпит неудачу, потому что я не получаю модель в качестве зависимости в моем Mojo.Я не совсем уверен, что это проблема в моем коде, потому что даже при использовании mvn dependency: dependency-tree не показывает полную иерархию зависимостей:

[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< com.corp.nodes:myproj-cli >-----------------------
[INFO] Building myproj Test 1.0.0-SNAPSHOT
[INFO] --------------------------------[ myproj ]--------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ myproj-cli ---
[INFO] com.corp.nodes:myproj-cli:myproj:1.0.0-SNAPSHOT
[INFO] \- com.corp.:myproj-model-impl:myproj:1.0.0-SNAPSHOT:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

ЗдесьЯ ожидал увидеть дерево с тремя уровнями для каждого из проектов.

Вот файл component.xml, определенный в моем настраиваемом плагине:

<component-set>
    <components>
        <component>
            <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
            <role-hint>myproj</role-hint>
            <implementation>
                org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping
            </implementation>
            <configuration>
                <phases>
                    <initialize>com.corp.maven:myproj-plugin:unpackageDependencies</initialize>
                    <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
                    <compile>com.corp.maven:myproj-plugin:compile</compile>
                    <process-test-resources>org.apache.maven.plugins:maven-resources-plugin:testResources</process-test-resources>
                    <test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile>
                    <test>org.apache.maven.plugins:maven-surefire-plugin:test</test>
                    <package>com.corp.maven:myproj-plugin:package</package>
                    <install>org.apache.maven.plugins:maven-install-plugin:install</install>
                    <deploy>org.apache.maven.plugins:maven-deploy-plugin:deploy</deploy>
                </phases>
            </configuration>
        </component>
        <component>
            <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
            <role-hint>myproj</role-hint>
            <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
            <configuration>
                <type>myproj</type>
                <extension>myproj</extension>
                <packaging>myproj</packaging>
                <addedToClasspath>true</addedToClasspath>
                <includesDependencies>true</includesDependencies>
            </configuration>
        </component>
    </components>
</component-set>

Все POM проекта имеют упаковку myproj , и все зависимости имеютих тип установлен на myproj .Вот pom для проекта cli :

<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>com.corp.arthur.nodes</groupId>
    <artifactId>myproj-cli</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>myproj</packaging>

    <name>myproj Test</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.corp.arthur</groupId>
            <artifactId>myproj-model-impl</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <type>myproj</type>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>com.corp.maven</groupId>
                <artifactId>myproj-plugin</artifactId>
                <version>1.0.0-SNAPSHOT</version>
                <extensions>true</extensions>
            </plugin>
        </plugins>
    </build>
</project>

POM для проекта impl выглядит аналогично.Есть идеи, что мне не хватает?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Наконец выяснил, что происходит, отследив источник для класса DefaultDependencyCollector.Оказывается, мне нужно было установить includesDependencies в моих компонентах.xml на false .Происходило то, что сборщик зависимостей видел, что флаг был истинным, то есть зависимости были включены в артефакт, и поэтому не проходили через них.Если для него установлено значение false, оно действительно повторяется, и я получаю ожидаемое поведение.

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< com.corp.nodes:myproj-cli >------------------
[INFO] Building myproj Test: CLI Node 1.0.0-SNAPSHOT
[INFO] --------------------------------[ myproj ]--------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ myproj-cli ---
[INFO] com.corp.nodes:myproj-cli:myproj:1.0.0-SNAPSHOT
[INFO] \- com.corp:myproj-model-impl:myproj:1.0.0-SNAPSHOT:compile
[INFO]    \- com.corp:myproj-model:myproj:1.0.0-SNAPSHOT:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
0 голосов
/ 06 июня 2018

Я боролся с подобной проблемой, пытаясь включить мою Android-библиотеку через maven в мой другой проект.Мои исследования показали, что pom-файл библиотеки не включен в библиотеку maven для некоторых случаев, таких как мой - у меня был файл .aar.Следовательно, ваша система сборки проекта ничего не знает об этих переходных зависимостях.Решением для меня было вручную указать их в моем файле Gradle.Более конкретно с этим можно ознакомиться в этой теме .

...