挑选两个版本的JAR

时间:2017-10-03 07:25:21

标签: maven maven-assembly-plugin morphia

我的项目取决于以下2个依赖项。

<dependency>
    <groupId>com.myorg.projectA</groupId>
    <artifactId>projectA</artifactId>
    <version>0.0.1-RELEASE</version>
</dependency>

<dependency>
    <groupId>com.myorg.projectB</groupId>
    <artifactId>projectB</artifactId>
    <version>0.0.1-RELEASE</version>
</dependency>

这两个依赖项都依赖于morphia的不同版本。当我构建我的项目时,只选择了1个版本的morphia。我需要morphia个版本。

以下是我根据this解决方案添加的内容,但这似乎无效。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.0.0</version>
    <configuration>
        <descriptor>src/assembly/dep.xml</descriptor>
    </configuration>
    <executions>
        <execution>
        <id>copy-dependencies</id>
        <phase>package</phase>
        <goals>
            <goal>copy-dependencies</goal>
        </goals>
        <configuration>
            <artifactItems>
                <artifactItem>
                    <groupId>org.mongodb.morphia</groupId>
                    <artifactId>morphia</artifactId>
                    <classifier>server</classifier>
                    <version>1.3.2</version>
                    <type>jar</type>
                </artifactItem>
                <artifactItem>
                    <groupId>org.mongodb.morphia</groupId>
                    <artifactId>morphia</artifactId>
                    <classifier>server</classifier>
                    <version>0.110</version>
                    <type>jar</type>
                </artifactItem>
            </artifactItems>
  <outputDirectory>${project.build.directory}/dependency/</outputDirectory>
    </configuration>
</execution>

            

我的汇编文件dep.xml

<?xml version='1.0' encoding='UTF-8'?>
<assembly>
    <id>jar-with-dependencies</id>
<formats>
    <format>jar</format>
</formats>

<dependencySets>
    <dependencySet>
        <scope>runtime</scope>
        <unpack>true</unpack>
        <unpackOptions>
            <excludes>
                <exclude>**/LICENSE*</exclude>
                <exclude>**/README*</exclude>
            </excludes>
        </unpackOptions>
    </dependencySet>
</dependencySets>

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

我没有看到morphia的版本被下载或被复制到我的dependency文件夹中。

1 个答案:

答案 0 :(得分:0)

由于传递依赖性,Maven经常会找到不同版本的工件。在这种情况下,Maven只会选择它遇到的第一件神器。

如果你真的想最终得到两个版本的工件,你可以使用像maven-build-helper-plugin这样的插件。但最有可能你不会得到你想要的东西。要在运行时使用两个不同版本的jar,您必须处理类加载器,这可能很难实现。如果你真的想沿着这条路走下去,我建议你看看osgi和其中一个像Felix这样的实现。

相关问题