Maven assembly: ajouter une version différente du même artefact

je crée mon archive d'application avec le plugin Maven assembly. Toutes les dépendances présentes dans ma pom sont incluses sans aucun problème.

Maintenant, j'ai besoin d'inclure deux ou plusieurs versions d'un même artefact.

Si dans mon pompon j'ai mis

<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>

de la source le résolveur dependenvcy supprime l'ancienne version et seul le 1.1.0 est empaqueté dans l'archive

j'essaie d'inclure le jar en utilisant le fichier de descripteur XML d'assemblage. Et je n'ai pas trouvé solution.

une solution possible sera de mettre manuellement tout le modèle nécessaire.pot à l'intérieur d'un dossier et de dire à l'assemblée de le copier dans l'archive. Mais je cherche une solution plus configurable.

une idée ?

18
demandé sur Vlagorce 2010-11-30 13:17:41

4 réponses

j'ai trouvé une solution en utilisant maven-dependency-plugin pour copier les dépendances de pom résolues et les jar supplémentaires.

<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>

maintenant je dois juste ajouter les lignes suivantes dans mon xml d'assemblage

    <fileSet>
        <directory>${project.build.directory}/lib</directory>
        <outputDirectory>/lib</outputDirectory>
        <filtered>false</filtered>
        <includes>
            <include>*.jar</include>
        </includes>
        <fileMode>0600</fileMode>
    </fileSet>
13
répondu Vlagorce 2010-11-30 14:11:14

Maven suppose qu'il n'a pas de sens d'avoir plus d'une version d'un module à la fois. Il suppose qu'une nouvelle version remplace l'ancienne version. Si ce n'est pas ce n'est pas le même module. Je vous suggère de donner un nom différent au nouveau module et de vous assurer qu'il a des paquets différents pour éviter de choisir un module aléatoire.

en général, Maven a essayé d'encourager une bonne conception de l'application et rend délibérément difficile de faire des choses qu'il a déterminé être un mauvais idée.

11
répondu Peter Lawrey 2010-11-30 10:25:23

une autre solution moche pourrait être d'utiliser des superpositions de fichiers de guerre, en exploitant le fait que ce mécanisme ne fait pas attention aux versions des fichiers de composants JAR lors de l'application des superpositions.

1
répondu Stephen C 2010-11-30 12:58:37

je suis d'accord, les différentes versions des moyens de remplacer l'ancienne. Si nous devons consommer deux versions différentes d'un webservice pour certains exigence de l'entreprise. C'est une bonne idée de générer les stubs dans différents paquets et en ajoutant à maven vous pouvez les spécifier dans groupid. Cela devrait fonctionner.

0
répondu Purushothaman 2016-02-11 08:12:55