Maven程序集:添加相同工件的不同版本?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (123)

我使用maven assembly插件创建我的应用程序存档。所有存在于我的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描述符文件来包含jar。我没有找到任何解决方案。

一个可能的解决方案是手动将所有需要的model.jar放入一个文件夹中并告诉程序集将其复制到档案中。但我正在寻找更可配置的解决方案。

任何想法 ?

提问于
用户回答回答于

我通过使用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>
用户回答回答于

Maven认为一次拥有多个版本的模块没有任何意义。它假定更新的版本取代旧版本。如果不是,它不是同一个模块。我建议你给新模块一个不同的名称,并确保它有不同的包,以避免选择一个随机模块。

扫码关注云+社区

领取腾讯云代金券