Получите модули maven из репозитория вместо относительного пути к файлу - PullRequest
2 голосов
/ 16 августа 2010

У меня есть родительский проект с:

<modules>
    <module>../module1</module>
    <module>../module2</module>
    <module>../module3</module>
</modules>

и модули с

<parent>
    <groupId>com.cc</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

Могу ли я как-то указать, что, если в ../module2/ нет src, загрузите эти модули из репозитория, а вместо этого выполните Caused by: java.io.FileNotFoundException: C:\work\temp\wid7\workspace\module2 (The system cannot find the file specified.)?

Ответы [ 2 ]

3 голосов
/ 19 августа 2010

Хотя ArchCC предоставил приемлемый обходной путь для вашей проблемы, основная проблема заключается в том, что вы неправильно понимаете концепцию модулей.

Модули - это отношения во время сборки, а не зависимости во время выполнения (хотя они обычно не имеют смысла, если на них также не ссылаются как на зависимости). Мультимодульный проект позволяет выполнить сложную сборку за один шаг, используя общую конфигурацию. Как только сборка произошла, блок <modules> в развернутом pom не имеет никакого значения, поэтому совершенно бессмысленно указывать модули, если у вас их нет.

Если ваша проблема заключается в том, что вы хотите создать только часть проекта, тогда решение заключается в использовании расширенных команд реактора. Вот выдержка из mvn --help:

usage: mvn [options] [<goal(s)>] [<phase(s)>]

Options:
 -am,--also-make                        If project list is specified, also
                                        build projects required by the
                                        list
 -amd,--also-make-dependents            If project list is specified, also
                                        build projects that depend on
                                        projects on the list
 -pl,--projects <arg>                   Build specified reactor projects
                                        instead of all projects
 -rf,--resume-from <arg>                Resume reactor from specified

Примеры:

mvn -am -pl api,client/impl 

сборки модулей api и client / impl (здесь также работают вложенные модули) со всеми их зависимостями (в текущем дереве)

mvn -amd -pl core

ядро ​​модуля сборки и все модули, которые ссылаются на него как на зависимость

mvn -rf my/deep/nested/module

возобновить сборку реактора из указанного модуля (сценарий: у вас огромная сборка, которая не проходит из-за юнит-теста в 25-м модуле. Поэтому вы исправляете тест и продолжаете с того места, где находитесь, экономя время на повторную сборку все предыдущие модули)


РЕДАКТИРОВАТЬ: я просто понимаю, что ваши модули находятся за пределами корневого каталога. по моему мнению, это является нарушением концепции модулей maven, поскольку она нарушает функциональность реактора, указанную выше.

3 голосов
/ 17 августа 2010

Возможно решить проблему с помощью профилей.

<profiles>
    <profile>
        <id>module1</id>
        <activation>
            <file>
                <exists>../module1/pom.xml</exists>
            </file>
        </activation>
        <modules>
            <module>../module1</module>
        </modules>
    </profile>

    <profile>
        <id>module2</id>
        <activation>
            <file>
                <exists>../module2/pom.xml</exists>
            </file>
        </activation>
        <modules>
            <module>../module2</module>
        </modules>
    </profile>
    ...
</profiles>

Профили объединяют модули блоков в один. Так что другие модули достались из репозитория.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...