Подтвердить что ты не робот

Сбор Maven: добавьте другую версию того же артефакта

Я создаю свой архив приложений с плагином сборки maven. Вся зависимость, присутствующая в моем помпе, включена без каких-либо проблем.

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

Если в моем pom я положил

<dependencies>
        [...]
        <dependency>
            <groupId>db.test</groupId>
            <artifactId>my-model</artifactId>
            <version>1.0.3</version>
        </dependency>
        <dependency>
            <groupId>db.test</groupId>
            <artifactId>my-model</artifactId>
            <version>1.1.0</version>
        </dependency>
</dependencies>

Источником зависимого распознавателя удалите старую версию и только 1.1.0 будет упакован в архив

Я пытаюсь включить банку, используя файл дескриптора xml. И я не нашел никакого решения.

Возможное решение состоит в том, чтобы вручную поместить весь необходимый файл model.jar в папку и сообщить сборке скопировать его в архив. Но я ищу более настраиваемое решение.

Любая идея?

4b9b3361

Ответ 1

Я нашел решение, используя maven-dependency-plugin для копирования разрешенных зависимостей pom и дополнительного jar.

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.1</version>
<executions>
    <execution>
        <id>copy-dependencies</id>
        <phase>package</phase>
        <goals>
            <goal>copy-dependencies</goal>
        </goals>
        <configuration>
            <outputDirectory>${project.build.directory}/lib</outputDirectory>
            <overWriteReleases>false</overWriteReleases>
            <overWriteSnapshots>false</overWriteSnapshots>
            <overWriteIfNewer>true</overWriteIfNewer>
            <includeScope>runtime</includeScope>
        </configuration>
    </execution>
    <execution>
        <id>copy-model</id>
        <phase>package</phase>
        <goals>
            <goal>copy</goal>
        </goals>
        <configuration>
            <artifactItems>
                <artifactItem>
                    <groupId>my.test.pkg</groupId>
                    <artifactId>my-model</artifactId>
                    <classifier>server</classifier>
                    <version>1.0.3</version>
                    <type>jar</type>
                </artifactItem>
                <artifactItem>
                    <groupId>my.test.pkg</groupId>
                    <artifactId>my-model</artifactId>
                    <classifier>server</classifier>
                    <version>1.1.0</version>
                    <type>jar</type>
                </artifactItem>
            </artifactItems>
            <outputDirectory>${project.build.directory}/lib</outputDirectory>
        </configuration>
    </execution>
</executions>

Теперь мне просто нужно добавить следующие строки в моей сборке xml

    <fileSet>
        <directory>${project.build.directory}/lib</directory>
        <outputDirectory>/lib</outputDirectory>
        <filtered>false</filtered>
        <includes>
            <include>*.jar</include>
        </includes>
        <fileMode>0600</fileMode>
    </fileSet>

Ответ 2

Maven предполагает, что не имеет смысла иметь более одной версии модуля сразу. Предполагается, что более новая версия заменяет более старую версию. Если нет, это не тот же модуль. Я предлагаю вам дать новому модулю другое имя и убедиться, что он имеет разные пакеты, чтобы избежать выбора случайного модуля.

В общем, Maven пытался поощрить хороший дизайн приложений и сознательно затруднял делать то, что, по его мнению, было плохой идеей.

Ответ 3

Другим уродливым решением может быть использование оверлей WAR файлов, использующих тот факт, что этот механизм не обращает внимания на версии компонентов JAR файлов при применении наложений.

Ответ 4

Я согласен, разные версии означают замену старого. Если нам нужно использовать две разные версии веб-сервиса для некоторых бизнес-требований. Это хорошая идея для создания заглушек в разных пакетах, и, добавляя maven, вы можете указать их в groupid. Это должно работать.